Offpunk’s Development Guidelines
Minimalism
- Offpunk is, first and foremost, a Gemini browser. Gemini shoult stay first-class. Gopher second.
- Offpunk is intended firt and foremost for offline use.
- Offpunk goal is not to browse the web but to extract useful informations from the page.
- Each page should always be presented the same. There will never be any CSS or design support in Offpunk.
- Offpunk is a reading tool. It doesn’t run any app. There will never be any kind of JS support. If information cannot be extracted without JS on a given page, this page should be considered as broken and it is not Offpunk’s fault.
- Offpunk is an open tool. It will only implement free and open protocols. No proprietary protocols.
Developers
- It’s OK to be wrong. It is OK to make a mistake. Be gentle on yourself.
- A mistake should be acknowledged and corrected as quick as possible.
- Nobody should be blamed for honest mistakes
- Developers are assumed to work offline, development should be done asynchronously by email.
- Each commit should probably comes with an CHANGELOG entry
Code structure
- Offpunk should run directly as a Python script without any installation, environment settings or anything else. This is non-negotiable core value.
- Code should be in as few files as possible in one single folder.
- Code should be split in separate files only if it makes sense to use some part of the code as an independent tool.
Crash and errors
- Offpunk should never crash. That’s final. Any crash should be corrected.
- Corrolary: Offpunk code should not throw exceptions but handle all possible cases.
- Corrolary 2: Any call to an external library should catch any potential exception.
Dependencies
- Offpunk should depend on as few dependencies as possible. Any work toward removing a dependency is good work.
- Dependencies should be optional. Code should run without that dependency.
- For a depency to be considered, 4 conditions need to be met:
0. The dependency is 100% open and free software, as defined by the FSF.
1. The dependency is well maintained with a stable and reliable API. There’s no need to track API changes accross versions.
2. The dependency popular and widely packaged in most popular Linux distribution (if it is not in Debian, it is probably not popular enough). It is not uncommon to have it already installed.
3. The feature offered by the dependency cannot be implemented directly in Offpunk in less than 1000LOC. The point is to avoid small dependencies for relatively trivial features.
4. The dependency doesn’t depend itself on dependencies breaking the previous 3 rules.
Permalinks:
https://offpunk.net/dev-guidelines.html
gemini://offpunk.net/dev-guidelines.gmi