author | František Kučera <franta-hg@frantovo.cz> |
Wed, 31 Aug 2016 11:45:16 +0200 | |
branch | v_0 |
changeset 7 | 8bda15db8a3d |
parent 6 | bd140638915f |
child 8 | 7155027c2be4 |
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 |
<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
|
12 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
13 |
<h2>Free software</h2> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
14 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
15 |
<ul> |
4 | 16 |
<li>Every piece of Sane software is also <a href="https://www.gnu.org/philosophy/free-sw.html">Free software</a>.</li> |
17 |
<li>The user has freedom to run the program for any purpose, to study and change it (i.e. has access to the source code under a free software license) and to distribute modified or unmodified copies.</li> |
|
18 |
<li>The user controls his/her computer and software and owns the data.</li> |
|
19 |
<li>Non-free software can not be trusted.</li> |
|
20 |
<li>Must be buildable using free software toolchain (like GNU/Linux + GCC or OpenJDK etc.).</li> |
|
21 |
<li>Should not promote non-free (proprietary) software or services.</li> |
|
22 |
<li>Copyleft licenses (like GNU GPL or GNU Affero GPL) are strongly recommended because they guarantee software freedoms to every single end-user and prevent possibility that freedom vanishes somewhere in the distribution chain and the user can't benefit from the free software albeit the software is build on originally free source code.</li> |
|
23 |
<li>If the software is distributed with a hardware, the hardware must support instalation of independently built software without any restrictions or requirements (e.g. digital signature from the original author).</li> |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
24 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
25 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
26 |
<h2>Documented</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
27 |
<ul> |
5 | 28 |
<li>At least basic documentation must be released under a free license (GNU FDL is recommended).</li> |
29 |
<li>There might be also other documentation/books released under any license and price.</li> |
|
30 |
<li>But average software engineer must be able to build and operate the software with just the free (basic) documentation.</li> |
|
31 |
<li>There must be a free documentation with description of building and running the software on a fresh operating system installation including description of all dependencies.</li> |
|
32 |
<!-- |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
33 |
<li>documentation should focus on all target groups: users, administrators, developers</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
34 |
<li>there must be a big picture and software architercure described</li> |
5 | 35 |
--> |
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
36 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
37 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
38 |
<h2>Semantic versioning</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
39 |
<ul> |
6 | 40 |
<li><a href="http://semver.org/">Semantic versioning</a> is strongly recommended.</li> |
41 |
<li>Especially when the software is suposed to be used as dependency by others.</li> |
|
42 |
<li>If there is a need of some marketing or cool versioning/codenames like Ultrasonic Umbrella or 2016, they should be used in addition to semantic versioning, not instead of it.</li> |
|
43 |
<li>Once publicly released, the package must not be changed anymore – if a change (even a small fix) is needed, new version number must be assigned.</li> |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
44 |
<li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
45 |
APIs, file formats and protocols might be semanticly versioned independently from the implementation; |
6 | 46 |
in such case, there should be a table documenting which API/format/protocol version matches which implementation version. |
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
47 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
48 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
49 |
|
7 | 50 |
<h2>Compatible with itself</h2> |
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
51 |
<ul> |
7 | 52 |
<li>Focus on backward compatibility. Newer version should work as a drop-in replacement.</li> |
53 |
<li>Don't broke things – rather postpone the release date than deliver a faulty product.</li> |
|
54 |
<li>Don't remove features unless they are really obsolete, unused or unrepairably broken.</li> |
|
55 |
<li>Incompatible changes must be planned and announced in advance. <!--Major/minor/patch numbers must be increased according to the Semantic versioning.--></li> |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
56 |
<li>upgrade scripts + upgrade documentation</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
57 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
58 |
|
7 | 59 |
<h2>Compatible with others</h2> |
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
60 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
61 |
<li>use open standards (protocols, formats) if they exist</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
62 |
<li>define own open standards if needed |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
63 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
64 |
<li>also standards must be semantically versioned</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
65 |
<li>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.)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
66 |
<li>also configuration should have machine readable description and should be testable by executing a command</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
67 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
68 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
69 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
70 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
71 |
<h2>Modular architecture</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
72 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
73 |
<li>larger and multi-purpose software should be divided into smaller modules</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
74 |
<li>modules must have defined dependencies (less = better)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
75 |
<li>particular modules should be compilable and executable separately</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
76 |
<li>whole system should be compilable (buildable) with only selected modules – must not require compilation or even distribution of all modules, if they are not necessary</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
77 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
78 |
|
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
79 |
<h2>Extensible</h2> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
80 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
81 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
82 |
<li>able to be extended |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
83 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
84 |
<li>by configuration (RegExp, SQL, XSLT, XPath etc.)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
85 |
<li>by scripting (Guile, Bash, ECMA Script etc.)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
86 |
<li>and/or third-party plugins/modules |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
87 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
88 |
<li>it should be easy to create a third-party module and plug it in an existing system</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
89 |
<li>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 a mere plug-in)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
90 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
91 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
92 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
93 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
94 |
<li>there should be public directory of extensions/scripts</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
95 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
96 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
97 |
<h2>Testable</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
98 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
99 |
<li>there should be automated build-time complex tests for the package – feed the program with sample input and verify expected output</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
100 |
<li>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</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
101 |
<li>unit tests are recommended for code parts that are internally complex (algorithms, important business logic) and have simple interfaces</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
102 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
103 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
104 |
<h2>Safe code and sustainability</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
105 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
106 |
<li>correctness, safety and readability is prefered to performance</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
107 |
<li>use strong data typing, declare preconditions and possible exceptions</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
108 |
<li>data structures must be known and well documented – don't use undocumented map keys or properties</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
109 |
<li>code, comments and analysis should be written in the same natural language</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
110 |
<li>there should be a dictionary of used terms, so whole team and also users and customers will speak same language</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
111 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
112 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
113 |
<h2>Small code footprint</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
114 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
115 |
<li>less LOC (resp. complexity) = better</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
116 |
<li>reduce boilerplate and unused code</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
117 |
<li>use code generators (during build process, not to generate code to be manually edited and versioned)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
118 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
119 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
120 |
<h2>Sane dependencies</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
121 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
122 |
<li>avoid NIH and reuse code but also avoid dependency hell</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
123 |
<li>know your dependencies, know why they are required</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
124 |
<li>reduce dependencies to only necessary ones</li> |
3 | 125 |
<li>depend on small and useful libraries – not on bulky application packages or libraries with large transitive dependencies</li> |
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
126 |
<li>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</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
127 |
<li>helper tools: |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
128 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
129 |
<li>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.</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
130 |
<li>Or if you use Java as your main language, consider not using Python/Perl for scripting and use Java for it</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
131 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
132 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
133 |
<li>if possible, always depend on abstract interfaces, not on particular implementations</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
134 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
135 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
136 |
<h2>Easily auditable</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
137 |
<ul> |
3 | 138 |
<li>small code footprint and minimal dependencies makes it easy to do security audit</li> |
139 |
<li>avoid ungrounded refactoring and reformatting – they make mess and noise in the version control system and impede the audit</li> |
|
140 |
<li>refactoring/reformatting changesets should be separated from substantive changes</li> |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
141 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
142 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
143 |
<h2>Reproducible builds</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
144 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
145 |
<li>builds should be reproducible: same code/version → same binary package</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
146 |
<li>if not, it should be documented, why and how build products mihgt differ, and there should be plan/task to make it reproducible</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
147 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
148 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
149 |
<h2>Trustworthy packages and sources</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
150 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
151 |
<li>every released version (binary or source) is cryptographically signed by the authors (GnuPG/OpenPGP is strongly recommended)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
152 |
<li>if HTTP is supported, HTTPS should also be – the attacker/eavesdropper should not even know what software/package/update is downloaded by the user</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
153 |
<li>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 </li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
154 |
<li>releases should be downloadable also (or exclusively) over BitTorrent or other P2P network</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
155 |
<li>there should be also checksums/hashes for every package</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
156 |
<li>source code repository is accessible through an encrypted connection</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
157 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
158 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
159 |
<h2>Network interactions</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
160 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
161 |
<li>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</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
162 |
<li>if dependencies are optionally automatically downloaded during/before build, the packaging system must cryptographically verify that that they are undamaged</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
163 |
<li>avoid unwanted network interactions during runtime – no „call home“ or update-checks without user's explicit consent</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
164 |
<li>if any network connection is used, it must be cryptographically secured against MITM attacks</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
165 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
166 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
167 |
<h2>Localized/internationalized</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
168 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
169 |
<li>is is strongly recommended that it should be possible to localize the user interface independently from the original author by writing a language pack</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
170 |
<li>GNU Gettext or other standard framework (like Java resource bundles) should be used</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
171 |
<li>error messages should have assigned unique error codes, so it is possible to find relevant information regardless current locale</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
172 |
<!-- GEC is recommended for such unique error identifiers --> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
173 |
<li>data formats and protocols must be language/locale independent |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
174 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
175 |
<li>e.g. use decimal point instead of comma and no thousand separators for numbers, use standardized date formats</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
176 |
<li>in general: everything that is expected to be machine-readable or machine-generated must be independent from current locale</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
177 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
178 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
179 |
<li>character encoding: |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
180 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
181 |
<li>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)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
182 |
<li>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</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
183 |
<li>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)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
184 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
185 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
186 |
<li>the metric system should be used as default</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
187 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
188 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
189 |
<h2>Communication channels</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
190 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
191 |
<li>use RSS/Atom or other machine readable format for: |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
192 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
193 |
<li>security announcements</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
194 |
<li>new version announcements</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
195 |
<li>infrastructure outage announcements</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
196 |
<li>blog, documentation, how-tos etc.</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
197 |
<li>AFK events (conferences, meetings, hackatons etc.), for calendar data iCal format is strongly recommended</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
198 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
199 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
200 |
<li>mailing list</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
201 |
<li>e-mail/SMTP |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
202 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
203 |
<li>use TLS</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
204 |
<li>use DKIM/ADSP</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
205 |
<li>use signed and encrypted messages (GnuPG or X.509)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
206 |
<li>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</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
207 |
</ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
208 |
</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
209 |
<li>Jabber MUC or IRC</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
210 |
<li>discussion forum</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
211 |
<li>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</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
212 |
<li>Q&A tool + FAQ</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
213 |
<li>there should be a second-level internet domain for the project or its team</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
214 |
<li>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</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
215 |
<li>URLs should be as stable as possible (don't broke old links, set up redirections if needed)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
216 |
<li>the website must be independent and must contain everything needed – any content (JavaScripts, CSS, fonts, images etc.) downloaded from other domains must not be required to browse/use the website</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
217 |
<li>authors should publish their public keys (GnuPG/OpenPGP or X.509)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
218 |
<li>crpyptographically secured e-mail address or web form for receiving security vulnerabilities report</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
219 |
<li>every security incident must be clearly documented and investigated – don't obscure it</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
220 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
221 |
|
1
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
222 |
<h2>Open development – has public:</h2> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
223 |
<ul> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
224 |
<li>source code repository (versioning system), not just source code releases</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
225 |
<li>description of the process of accepting external patches</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
226 |
<li>feature/bug tracking system</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
227 |
<li>roadmap of future releases</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
228 |
<li>plan of supported versions/branches</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
229 |
<li>every release/version/branch must clearly declare the status (alpha, beta, prototype, stable, retired, deprecated…)</li> |
83f6bf9077c5
indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents:
0
diff
changeset
|
230 |
</ul> |
0
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
231 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
232 |
|
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
233 |
</body> |
b0e72d76cccf
import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
234 |
</html> |