commit: 3d066fb243e8e94e73fcdc51e79e6088dc6d3de9
parent: 42f87f328e7e53ca317eeb90378d09cc28543517
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Wed, 8 Jan 2020 10:08:31 +0100
decisions.md: New file
Diffstat:
1 file changed, 33 insertions(+), 0 deletions(-)
diff --git a/decisions.md b/decisions.md
@@ -0,0 +1,33 @@
+# Decisions taken over the project lifetime
+## What is this?
+See <https://akazlou.com/posts-output/2015-11-09-every-project-should-have-decisions/>
+Bascially, the idea is to have a file in your projects repo, where you record
+the decisions you make over the course of the project's lifetime.
+Rewriting history will not be done but Post-Scriptum notices will.
+
+## 2020-01-08 08:42:00Z : Start of the decisions.md file
+From memory and git log:
+
+- Changelog is done when preparing for a release, it is copied into the git tag description. This means that there isn't a central file and isn't a changelog entry added with commits.
+- OpenPGP is deprecated in favor of signify, reasons being security and portability.
+- Prefer using lower and more standard/ubiquitous layers for implementations, one example is the about information with printf and Gtk Dialog rather than a custom scheme in WebKitGTK.
+ - using GLib instead of POSIX was done at first but the quality/behaviour of GLib (like `g_malloc()` calling `abort()` on errors) reverted this decision.
+- WebKitGTK was picked because it is the only WebKit port which is maintained enough without a bus-factor (consider giving QtWebKit a hand too?).
+- The `.clang-format` file was copied from the one living in my home directory:
+ - function declaration is at the start of the line to allow jumping to it with a simple editor
+ - braces on their own lines to allow for comments space
+ - "tabs for indentation and space for alignement" style is used for flexibility
+- mdoc was picked over other formats for the manpage, as it is implemented in mandoc and GNU groff, much simpler to read/write and transform to other formats (like HTML or Markdown).
+- Markdown was picked over other formats for informal documentation, it is a simple format supported by most forges, a format which is easier to write and parse could be considered
+- Proprietary systems are not supported for their lack of auditability and transparency.
+- C was picked because:
+ 1. I wanted to avoid being limited by binding completeness or model
+ 2. I think it is a good language which is fit for this purpose provided you are careful enough (such as using LLVM to it's full potential for checks)
+ 3. It is portable and doesn't introduces more dependencies than is already needed
+- POSIX was picked for it's portability (only known one where it's absent is Windows but it's not going to be supported)
+- Writing a portable (almost POSIX-only) Makefile with `pkg-config(1)` was picked over other build systems which tend to be over-complicated and rely on only one implementation.
+- Originally the URL entry accepted only valid URLs, this was changed to a bit of heuristics for fixing it when it was entered by the user.
+- No search entry is provided, this is to encourage users to avoid search engines as much as possible, support for SmartBookmarks with keywords (similar to DuckDuckGo/Searx !bangs) will be added after support for suggestions via bookmarks
+- Bookmarks are first-class citizens as they are data explicitely controlled by the user
+- No browsing history is provided, this is to encourage to use and improve bookmarks, it will be added later on with data retention limits, ability to wipe it and non-reachable from WebKit (and so the Wild Web).
+- Javascript is turned off by default with a checkbox to enable it temporarly, Permissions Requests (microphone, geolocation, …) are all denied, something similar to uMatrix and NoScript will eventually be done to fix this