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:
- I wanted to avoid being limited by binding completeness or model
- 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)
- 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