--- a/ssm-en.xhtml Sun Dec 09 01:14:18 2018 +0100
+++ b/ssm-en.xhtml Sun Sep 08 17:28:06 2019 +0200
@@ -7,13 +7,13 @@
</head>
<body>
<h1>Sane Software Manifesto</h1>
-
+
<p style="text-align: center"><DRAFT> Please note that this is a draft version. Stay tuned for v1.0.0! </DRAFT></p>
-
+
<p>In respect to user freedoms, privacy, liberty, quality, mental health and world peace we create software according to these guidelines.</p>
<h2>Free software</h2>
-
+
<ul>
<li>Every piece of Sane software is also <a href="https://www.gnu.org/philosophy/free-sw.html">Free software</a>.</li>
<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>
@@ -37,7 +37,7 @@
<li>there must be a big picture and software architercure described</li>
-->
</ul>
-
+
<h2>Semantic versioning</h2>
<ul>
<li><a href="http://semver.org/">Semantic versioning</a> is strongly recommended.</li>
@@ -64,9 +64,9 @@
<li>use open standards (protocols, formats) if they exist</li>
<li>define and publish own open standards if needed
<ul>
- <li>also standards must be semantically versioned</li>
- <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>
- <li>also configuration should have machine readable description and should be testable by executing a command</li>
+ <li>also standards must be semantically versioned</li>
+ <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>
+ <li>also configuration should have machine readable description and should be testable by executing a command</li>
</ul>
</li>
</ul>
@@ -83,16 +83,16 @@
<ul>
<li>able to be extended
- <ul>
- <li>by configuration (RegExp, SQL, XSLT, XPath etc.)</li>
- <li>by scripting (Guile, Bash, Python, Lua, ECMA Script etc.)</li>
- <li>and/or third-party plugins/modules
<ul>
- <li>it should be easy to create a third-party module and plug it in an existing system</li>
- <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); the required dependency should contain just interfaces (method/function signatures) and data structures but no implementation (executable code)</li>
+ <li>by configuration (RegExp, SQL, XSLT, XPath etc.)</li>
+ <li>by scripting (Guile, Bash, Python, Lua, ECMA Script etc.)</li>
+ <li>and/or third-party plugins/modules
+ <ul>
+ <li>it should be easy to create a third-party module and plug it in an existing system</li>
+ <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); the required dependency should contain just interfaces (method/function signatures) and data structures but no implementation (executable code)</li>
+ </ul>
+ </li>
</ul>
- </li>
- </ul>
</li>
<li>there should be public directory of extensions/scripts</li>
</ul>
@@ -130,10 +130,10 @@
<li>depend on small and useful libraries – not on bulky application packages or libraries with large transitive dependencies</li>
<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>
<li>helper tools:
- <ul>
- <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>
- <li>Or if you use Java as your main language, consider not using Python/Perl for scripting and use Java for it</li>
- </ul>
+ <ul>
+ <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>
+ <li>Or if you use Java as your main language, consider not using Python/Perl for scripting and use Java for it</li>
+ </ul>
</li>
<li>if possible, always depend on abstract interfaces, not on particular implementations</li>
</ul>
@@ -176,17 +176,17 @@
<li>error messages should have assigned unique error codes, so it is possible to find relevant information regardless current locale</li>
<!-- GEC is recommended for such unique error identifiers -->
<li>data formats and protocols must be language/locale independent
- <ul>
- <li>e.g. use decimal point instead of comma and no thousand separators for numbers, use standardized date formats</li>
- <li>in general: everything that is expected to be machine-readable or machine-generated must be independent from current locale</li>
- </ul>
+ <ul>
+ <li>e.g. use decimal point instead of comma and no thousand separators for numbers, use standardized date formats</li>
+ <li>in general: everything that is expected to be machine-readable or machine-generated must be independent from current locale</li>
+ </ul>
</li>
<li>character encoding:
- <ul>
- <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>
- <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>
- <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>
- </ul>
+ <ul>
+ <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>
+ <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>
+ <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>
+ </ul>
</li>
<li>the metric system should be used as default</li>
</ul>
@@ -194,22 +194,22 @@
<h2>Communication channels</h2>
<ul>
<li>use RSS/Atom or other machine readable format for:
- <ul>
- <li>security announcements</li>
- <li>new version announcements</li>
- <li>infrastructure outage announcements</li>
- <li>blog, documentation, how-tos etc.</li>
- <li>AFK events (conferences, meetings, hackatons etc.), for calendar data iCal format is strongly recommended</li>
- </ul>
+ <ul>
+ <li>security announcements</li>
+ <li>new version announcements</li>
+ <li>infrastructure outage announcements</li>
+ <li>blog, documentation, how-tos etc.</li>
+ <li>AFK events (conferences, meetings, hackatons etc.), for calendar data iCal format is strongly recommended</li>
+ </ul>
</li>
<li>mailing list</li>
<li>e-mail/SMTP
- <ul>
- <li>use TLS</li>
- <li>use DKIM/ADSP</li>
- <li>use signed and encrypted messages (GnuPG or X.509)</li>
- <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>
- </ul>
+ <ul>
+ <li>use TLS</li>
+ <li>use DKIM/ADSP</li>
+ <li>use signed and encrypted messages (GnuPG or X.509)</li>
+ <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>
+ </ul>
</li>
<li>Jabber MUC or IRC</li>
<li>discussion forum</li>
@@ -224,6 +224,28 @@
<li>every security incident must be clearly documented and investigated – don't obscure it</li>
</ul>
+ <h2>Accept contributions</h2>
+ <ul>
+ <li>good quality code contributions with appropriate copyright and patent licenses or assignments should be accepted from anyone</li>
+ <li>the <em>good quality code</em> is defined by the project and might involve code style, idioms, design patterns, software architecture, required tests, documentation etc.</li>
+ <li>such requirements and rules should be available to the contributor before he begins; however (especially smaller) projects might communicate such code quality requirements and provide consultations and guidance during the contribution</li>
+ <li>in order to contribute, it must not be required:
+ <ul>
+ <li>to have an account on any particular third party service like particular e-mail or hosting provider</li>
+ <li>to sign a contract (which includes accepting <em>Terms and conditions</em>) with any particular third party (e.g. source code hosting provider)</li>
+ <li>to sign any political, religious or other proclamation or agree with it</li>
+ </ul>
+ </li>
+ <li>in order to contribute, it might be required:
+ <ul>
+ <li>to have an e-mail address (but not at particular domain)</li>
+ <li>to assign the copyright to the project and grant a free license for all patents relevant to the contribution</li>
+ </ul>
+ </li>
+ <li>the project should record all accepted contributions and maintain a public list of all authors/contributors</li>
+ <li>the contributor must not loose the right to use or distribute the contributed code under any license (of his choice)</li>
+ </ul>
+
<h2>Open development – has public:</h2>
<ul>
<li>source code repository (versioning system), not just source code releases</li>
@@ -233,7 +255,7 @@
<li>plan of supported versions/branches</li>
<li>every release/version/branch must clearly declare the status (alpha, beta, prototype, stable, retired, deprecated…)</li>
</ul>
-
-
+
+
</body>
</html>
\ No newline at end of file