ssm-en.xhtml
author František Kučera <franta-hg@frantovo.cz>
Sun, 21 Aug 2016 23:59:31 +0200
branchv_0
changeset 3 f31614583438
parent 1 83f6bf9077c5
child 4 53e8012e5461
permissions -rw-r--r--
indentation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    16
			<li>user has freedoms</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    17
			<li>user controls his/her computer and software and owns the data</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    18
			<li>non-free software can not be trusted </li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    19
			<li>must be buildable using free software toolchain (like GNU/Linux + GCC or OpenJDK etc.)</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    20
			<li>should not promote non-free (proprietary) software or services</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    21
			<li>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 and the user can't benefit from the free software albeit the software is build on originally free source code</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    22
		</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
    23
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    24
		<h2>Documented</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    25
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    26
			<li>at least basic documentation must be released under a free license (GNU FDL is recommended)</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    27
			<li>there might be also other documentation/books released under any license and price</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    28
			<li>but average software engineer must be able to build and operate the software with just the basic free documentation</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    29
			<li>there must be a free documentation describing building and running of the software on a fresh operating system installation including description of all dependencies</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    30
			<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
    31
			<li>there must be a big picture and software architercure described</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    32
		</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
    33
	
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    34
		<h2>Semantic versioning</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    35
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    36
			<li>strongly recommended</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    37
			<li>required when the package is suposed to be used as dependency by others</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    38
			<li>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</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    39
			<li>once publicly released, the package must not be changed anymore – if a change (even small fix) is needed, new version number must be assigned</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    40
			<li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    41
				APIs, file formats and protocols might be semanticly versioned independently from the implementation;
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    42
				in such case, there should be a table documenting which API/format/protocol version matches which implementation version
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    43
			</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    44
		</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
    45
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    46
		<h2>Compatibilible with itself</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    47
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    48
			<li>focus on backward compatibility</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    49
			<li>don't broke things</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    50
			<li>incompatible changes must be planned and announced in advance</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    51
			<li>upgrade scripts + upgrade documentation</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    52
		</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
    53
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    54
		<h2>Compatibilible with others</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    55
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    56
			<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
    57
			<li>define own open standards if needed
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    58
				<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    59
				<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
    60
				<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
    61
				<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
    62
				</ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    63
			</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    64
		</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
    65
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    66
		<h2>Modular architecture</h2>
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>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
    69
			<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
    70
			<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
    71
			<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
    72
		</ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    73
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    74
		<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
    75
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    76
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    77
			<li>able to be extended
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    78
			<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    79
				<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
    80
				<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
    81
				<li>and/or third-party plugins/modules
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    82
				<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    83
					<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
    84
					<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
    85
				</ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    86
				</li>
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>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    89
			<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
    90
		</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
    91
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    92
		<h2>Testable</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    93
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    94
			<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
    95
			<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
    96
			<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
    97
		</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
    98
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
    99
		<h2>Safe code and sustainability</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   100
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   101
			<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
   102
			<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
   103
			<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
   104
			<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
   105
			<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
   106
		</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
   107
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   108
		<h2>Small code footprint</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   109
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   110
			<li>less LOC (resp. complexity) = better</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   111
			<li>reduce boilerplate and unused code</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   112
			<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
   113
		</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
   114
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   115
		<h2>Sane dependencies</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   116
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   117
			<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
   118
			<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
   119
			<li>reduce dependencies to only necessary ones</li>
3
f31614583438 indentation
František Kučera <franta-hg@frantovo.cz>
parents: 1
diff changeset
   120
			<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
   121
			<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
   122
			<li>helper tools:
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   123
			<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   124
				<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
   125
				<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
   126
			</ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   127
			</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   128
			<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
   129
		</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
   130
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   131
		<h2>Easily auditable</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   132
		<ul>
3
f31614583438 indentation
František Kučera <franta-hg@frantovo.cz>
parents: 1
diff changeset
   133
			<li>small code footprint and minimal dependencies makes it easy to do security audit</li>
f31614583438 indentation
František Kučera <franta-hg@frantovo.cz>
parents: 1
diff changeset
   134
			<li>avoid ungrounded refactoring and reformatting – they make mess and noise in the version control system and impede the audit</li>
f31614583438 indentation
František Kučera <franta-hg@frantovo.cz>
parents: 1
diff changeset
   135
			<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
   136
		</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
   137
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   138
		<h2>Reproducible builds</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   139
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   140
			<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
   141
			<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
   142
		</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
   143
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   144
		<h2>Trustworthy packages and sources</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   145
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   146
			<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
   147
			<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
   148
			<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
   149
			<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
   150
			<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
   151
			<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
   152
		</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
   153
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   154
		<h2>Network interactions</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   155
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   156
			<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
   157
			<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
   158
			<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
   159
			<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
   160
		</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
   161
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   162
		<h2>Localized/internationalized</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   163
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   164
			<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
   165
			<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
   166
			<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
   167
			<!-- 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
   168
			<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
   169
			<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   170
				<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
   171
				<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
   172
			</ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   173
			</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   174
			<li>character encoding:
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   175
			<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   176
				<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
   177
				<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
   178
				<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
   179
			</ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   180
			</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   181
			<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
   182
		</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
   183
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   184
		<h2>Communication channels</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   185
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   186
			<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
   187
			<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   188
				<li>security announcements</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   189
				<li>new version announcements</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   190
				<li>infrastructure outage announcements</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   191
				<li>blog, documentation, how-tos etc.</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   192
				<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
   193
			</ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   194
			</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   195
			<li>mailing list</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   196
			<li>e-mail/SMTP
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   197
			<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   198
				<li>use TLS</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   199
				<li>use DKIM/ADSP</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   200
				<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
   201
				<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
   202
			</ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   203
			</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   204
			<li>Jabber MUC or IRC</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   205
			<li>discussion forum</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   206
			<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
   207
			<li>Q&amp;A tool + FAQ</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   208
			<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
   209
			<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
   210
			<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
   211
			<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
   212
			<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
   213
			<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
   214
			<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
   215
		</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
   216
1
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   217
		<h2>Open development – has public:</h2>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   218
		<ul>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   219
			<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
   220
			<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
   221
			<li>feature/bug tracking system</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   222
			<li>roadmap of future releases</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   223
			<li>plan of supported versions/branches</li>
83f6bf9077c5 indented text → XHTML lists
František Kučera <franta-hg@frantovo.cz>
parents: 0
diff changeset
   224
			<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
   225
		</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
   226
	
b0e72d76cccf import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
   227
	
b0e72d76cccf import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
   228
	</body>
b0e72d76cccf import of the sane-software-manifesto.txt (earlier draft, not versioned)
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
   229
</html>