author | František Kučera <franta-hg@frantovo.cz> |
Sun, 21 Aug 2016 21:27:40 +0200 | |
branch | v_0 |
changeset 0 | b0e72d76cccf |
child 1 | 83f6bf9077c5 |
permissions | -rw-r--r-- |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
2 |
<!DOCTYPE html SYSTEM "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd"> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
3 |
<html xmlns="http://www.w3.org/1999/xhtml"> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
4 |
<head> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
5 |
<title>Sane Software Manifesto</title> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
6 |
<link href="style.css" type="text/css" rel="StyleSheet" /> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
7 |
</head> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
8 |
<body> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
9 |
<h1>Sane Software Manifesto</h1> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
10 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
11 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
12 |
<p>In respect to user freedoms, privacy, liberty, quality, mental health and world peace we create software according to these guidelines.</p> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
13 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
14 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
15 |
<h2>free software</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
16 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
17 |
user has freedoms |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
18 |
user controls his/her computer and software |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
19 |
non-free software can not be trusted |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
20 |
must be buildable using free software toolchain (like GNU/Linux + GNU GCC or OpenJDK etc.) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
21 |
should not promote non-free (proprietary) software or services |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
22 |
copyleft licenses (like GNU GPL or GNU Affero GPL) are recommended because they guarantee software freedoms to every single end-user and prevent possibility that freedom vanishes somewhere in the distribution chain a user can't benefit from the free software albeit the software is build on originally free source code |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
23 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
24 |
<h2>documented</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
25 |
at least basic documentation must be released under a free license (GNU FDL is recommended) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
26 |
there might be also other documentation/books released under any license and price |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
27 |
but average software engineer must be able to build and operate the software with just basic free documentation |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
28 |
there must be a free documentation describing building and running of the software on a fresh operating system installation including description of all dependencies |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
29 |
documentation should focus on all target groups: users, administrators, developers |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
30 |
there must be a big picture and software architercure described |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
31 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
32 |
<h2>semantic versioning</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
33 |
strongly recommended |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
34 |
required when the package is suposed to be used as dependency by others |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
35 |
if there is need of some marketing or cool versioning/codenames like Ultrasonic Umbrella or 2016, they should be used in addition to semantic versioning, not instead it |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
36 |
once publicly released, the package must not be changed anymore – if a change (even small fix) is needed, new version number must be assigned |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
37 |
APIs, file formats and protocols might be semanticly versioned independently from the implementation |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
38 |
in such case, there should be a table documenting which API/format/protocol version matches which implementation version |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
39 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
40 |
<h2>compatibilible with itself</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
41 |
focus on backward compatibility |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
42 |
don't broke things |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
43 |
incompatible changes must be planned and announced in advance |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
44 |
upgrade scripts + upgrade documentation |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
45 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
46 |
<h2>compatibilible with others</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
47 |
use open standards (protocols, formats) if they exist |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
48 |
define own open standards if needed |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
49 |
also standards must be semantically versioned |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
50 |
should be written in machine readable format (WSDL, WADL, ASN.1, XSD, Diameter dictionary etc.) or at least formal language (Backus–Naur Form, EBNF etc.) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
51 |
also configuration should have machine readable description and should be testable by executing a command |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
52 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
53 |
<h2>modular architecture</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
54 |
larger and multi-purpose software should be divided into smaller modules |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
55 |
modules must have defined dependencies (less = better) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
56 |
particular modules should be compilable and executable separately |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
57 |
whole system should be compilable with only selected modules – must not require compilation or even distribution of all modules, if they are not necessary |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
58 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
59 |
<h2>extensible</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
60 |
able to be extended |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
61 |
by configuration (RegExp, SQL, XSLT, XPath etc.) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
62 |
by scripting (Guile, ECMA Script etc.) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
63 |
and/or third-party plugins/modules |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
64 |
it should be easy to create a third-party module and plug it in an existing system |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
65 |
dependencies needed to write an extension (i.e. header files, API classes/interfaces) should be as small as possible (do not require large codebase to write an extension) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
66 |
there should be public directory of extensions/scripts |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
67 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
68 |
<h2>testable</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
69 |
there should be automated build-time complex tests for the package – feed the program with sample input and verify expected output |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
70 |
there should be also automated runtime/postinstall tests – in order to verify that software was installed properly, all required dependencies are met and basic function is guaranteed – the program should report problem during its start (as a warning if it is not fatal), instead of unexpected failures during operation |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
71 |
unit tests are recommended for code parts that are internally complex (algorithms, important business logic) and have simple interfaces |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
72 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
73 |
<h2>safe code and sustainability</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
74 |
correctness, safety and readability is prefered to performance |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
75 |
use strong data typing, declare preconditions and possible exceptions |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
76 |
data structures must be known and well documented – don't use undocumented map keys or properties |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
77 |
code, comments and analysis should be written in the same natural language |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
78 |
there should be a dictionary of used terms, so whole team and also users and customers will speak same language |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
79 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
80 |
<h2>small code footprint</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
81 |
less LOC (resp. complexity) = better |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
82 |
reduce boilerplate and unused code |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
83 |
use code generators (during build process, not to generate code to be manually edited and versioned) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
84 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
85 |
<h2>sane dependencies</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
86 |
avoid NIH and reuse code but also avoid dependency hell |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
87 |
know your dependencies, know why they are required |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
88 |
reduce dependencies to only necessary ones |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
89 |
depend on small and useful libraries – not on bulky application packages |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
90 |
if dependency on bulky application package is inevitable, add a layer of abstraction – create a generic interface and connector and allow others to replace the bulky package with their own sane implementation |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
91 |
helper tools: |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
92 |
if you e.g. use Bash and Perl during the build process, don't add also Python dependency, write it in Perl – or use Python instead of Perl. |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
93 |
Or if you use Java as your main language, consider not using Python/Perl for scripting and use Java for it |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
94 |
if possible, always depend on abstract interfaces, not on particular implementations |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
95 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
96 |
<h2>easily auditable</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
97 |
small code footprint and minimal dependencies makes it easy to do security audit |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
98 |
avoid ungrounded refactoring and reformatting – they make mess and noise in the version control system and impede the audit |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
99 |
refactoring/reformatting changesets should be separated from substantive changes |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
100 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
101 |
<h2>reproducible builds</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
102 |
builds should be reproducible: same code/version → same binary package |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
103 |
if not, it should be documented, why and how build products mihgt differ, and there should be plan/task to make it reproducible |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
104 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
105 |
<h2>trustworthy packages and sources</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
106 |
every released version (binary or source) is cryptographically signed by the authors (GnuPG/OpenPGP is strongly recommended) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
107 |
if HTTP is supported, HTTPS should also be – the attacker/eavesdropper should not even know what software/package/update is downloaded by the user |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
108 |
the attacker should not be able to suppress updates – the program must not be silent in such case and must warn the user that something possibly nasty and dangerous is happening |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
109 |
releases should be downloadable also (or exclusively) over BitTorrent or other P2P network |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
110 |
there should be also checksums/hashes for every package |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
111 |
source code repository is accessible through an encrypted connection |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
112 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
113 |
<h2>network interactions</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
114 |
no network connection is needed during build – build must be possible completely offline, all dependencies must be downloadable and documented including secure hashes or better cryptographic signatures |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
115 |
if dependencies are optionally automatically downloaded during/before build, the packaging system must cryptographically verify that that they are undamaged |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
116 |
avoid unwanted network interactions during runtime – no „call home“ or update-checks without user's explicit consent |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
117 |
if any network connection is used, it must be cryptographically secured against MITM attacks |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
118 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
119 |
<h2>localized/internationalized</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
120 |
is is strongly recommended that it should be possible to localize the user interface independently from the original author by writing a language pack |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
121 |
GNU Gettext or other standard framework (like Java resource bundles) should be used |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
122 |
error messages should have assigned unique error codes, so it is possible to find relevant information regardless current locale |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
123 |
GEC is recommended for such unique error identifiers |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
124 |
data formats and protocols must be language/locale independent |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
125 |
e.g. use decimal point instead of comma and no thousand separators for numbers, use standardized date formats |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
126 |
in general: everything that is expected to be machine-readable or machine-generated must be independent from current locale |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
127 |
character encoding: |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
128 |
always be aware of it, don't just blindly use current platform's default (because the other side might run on different platform with different default) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
129 |
if given software/format/protocol has some default encoding, it must be clearly defined in its specification and this default should not be changed without changing the major version number |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
130 |
if there is no default, the encoding must be specified in the metadata attached (e.g. protocol headers, extended attributes on filesystem) to the actual data or at least at the begining of the data (like declaration in XML format) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
131 |
the metric system should be used as default |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
132 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
133 |
<h2>communication channels</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
134 |
RSS/Atom or other machine readable format for: |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
135 |
security announcements |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
136 |
new version announcements |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
137 |
infrastructure outage announcements |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
138 |
blog, documentation, how-tos etc. |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
139 |
AFK events (conferences, meetings, hackatons etc.), for calendar data iCal format is strongly recommended |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
140 |
mailing list |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
141 |
e-mail/smtp |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
142 |
use TLS |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
143 |
use DKIM/ADSP |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
144 |
use signed and encrypted messages (GnuPG or X.509) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
145 |
avoid spam and viruses, don't spam the users, don't push them to subscribe your „newsletter“ – always offer also anonymous channel like RSS/Atom |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
146 |
Jabber MUC or IRC |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
147 |
discussion forum |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
148 |
don't push users to register at a proprietary social networks resp. at particular company like Facebook – users without such account must not be discriminated – use open and decentralized networks/protocols instead |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
149 |
Q&A tool + FAQ |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
150 |
there should be a second-level internet domain for the project or its team |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
151 |
but don't buy an internet domain if you are not prepared to mainain it for decades – rather use third level domain under some reliable second level domain maintained by a credible group or person – think of that every expired domain helps spammers and scammers and hurts the users |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
152 |
URLs should be as stable as possible (don't broke old links, set up redirections if needed) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
153 |
the website must be independent and must contain everything needed – any content (JavaScripts, CSS, fonts etc.) downloaded from othed domains must not be required to browse/use the website |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
154 |
authors should publish their public keys (GnuPG/OpenPGP or X.509) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
155 |
crpyptographically secured e-mail address or web form for receiving security vulnerabilities report |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
156 |
every security incident must be clearly documented and investigated – don't obscure it |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
157 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
158 |
<h2>open development – has public:</h2> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
159 |
source code repository (versioning system), not just source code releases |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
160 |
description of the process of accepting external patches |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
161 |
feature/bug tracking system |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
162 |
roadmap of future releases |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
163 |
plan of supported versions/branches |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
164 |
every release/version/branch must clearly declare the status (alpha, beta, prototype, stable, retired, deprecated…) |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
165 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
166 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
167 |
</body> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
168 |
</html> |