link GNU Coding Standards and Information for Maintainers of GNU Software v_0 v0.5
authorFrantišek Kučera <franta-hg@frantovo.cz>
Wed, 02 Oct 2019 22:28:55 +0200
branchv_0
changeset 43 1f52b8493268
parent 42 ef8fd61fd011
child 44 de7a5dc5d5d1
link GNU Coding Standards and Information for Maintainers of GNU Software Add links to compatible and relevant rules in GNU. Thanks to Félicien Pillot for bringing this idea and finding some matching rules: https://lists.globalcode.info/mailman3/hyperkitty/list/sane-software@lists.globalcode.info/thread/LVFFEQREQ2LBZGWVJIFTZE2QV3AGF5RO/
text/ssm.en.xml
--- a/text/ssm.en.xml	Wed Oct 02 19:10:46 2019 +0200
+++ b/text/ssm.en.xml	Wed Oct 02 22:28:55 2019 +0200
@@ -50,10 +50,24 @@
 		<item>
 			<id>c78a9796-7862-4dd2-8ad9-3fdae094fe2c</id>
 			<text>Must be buildable using free software toolchain (like GNU/Linux + GCC or OpenJDK etc.).</text>
+			<link>
+				<url>https://www.gnu.org/prep/maintain/maintain.html#Ethical-and-Philosophical-Consideration</url>
+				<type>compatible</type>
+				<title>Information for Maintainers of GNU Software: Ethical and Philosophical Consideration</title>
+				<quotation>A GNU package should not recommend use of any non-free program, nor should it require a non-free program (such as a non-free compiler or IDE) to build. Thus, a GNU package cannot be written in a programming language that does not have a free software implementation.</quotation>
+				<quotation>Now that GNU/Linux systems are widely available, all GNU packages should provide full functionality on a 100% free GNU/Linux system, and should not require any non-free software to build or function.</quotation>
+				<quotation>Similarly, a GNU package should not require the use of non-free software, including JavaScript, for the coordination of its development.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>b3c0daaf-dcaf-49a8-ae38-40590456a315</id>
 			<text>Must not promote non-free (proprietary) software or services.</text>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#References</url>
+				<type>compatible</type>
+				<title>GNU Coding Standards: References to Non-Free Software and Documentation</title>
+				<quotation>A GNU program should not recommend, promote, or grant legitimacy to the use of any non-free program. Proprietary software is a social and ethical problem, and our aim is to put an end to that problem. We can’t stop some people from writing proprietary programs, or stop other people from using them, but we can and should refuse to advertise them to new potential customers, or to give the public the idea that their existence is ethical.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>b2fd5d2d-4d47-48e8-8abc-4b1aa94a7951</id>
@@ -81,6 +95,12 @@
 		<item>
 			<id>c63ea2ac-c255-4f3e-a0e2-b49d1e145347</id>
 			<text>At least basic documentation must be released under a free license (GNU FDL is recommended).</text>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#License-for-Manuals</url>
+				<type>compatible</type>
+				<title>GNU Coding Standards: License for Manuals</title>
+				<quotation>Please use the GNU Free Documentation License for all GNU manuals that are more than a few pages long.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>fd8e3bbd-d46a-40fe-85a6-b902336456d4</id>
@@ -89,10 +109,23 @@
 		<item>
 			<id>e4dede5b-059e-4e47-b03d-80142b8467f1</id>
 			<text>There might be also other documentation/books released under any license and price.</text>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#Reading-other-Manuals</url>
+				<type>related</type>
+				<title>GNU Coding Standards: Reading other Manuals</title>
+				<quotation>There may be non-free books or documentation files that describe the program you are documenting.</quotation>
+				<quotation>It is ok to use these documents for reference, just as the author of a new algebra textbook can read other books on algebra.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>c0df4d14-43f8-4b61-83c4-fb5896161aeb</id>
 			<text>But average software engineer must be able to build and operate the software with just the free (basic) documentation.</text>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#Configuration</url>
+				<type>related</type>
+				<title>GNU Coding Standards: How Configuration Should Work</title>
+				<quotation>Each GNU distribution should come with a shell script named configure.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>e6cd9c52-0e66-402c-930c-901fa66acd22</id>
@@ -122,6 +155,12 @@
 				<type>compatible</type>
 				<title>Semantic Versioning</title>
 			</link>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#Releases</url>
+				<type>compatible</type>
+				<title>GNU Coding Standards: Making Releases</title>
+				<quotation>You should identify each release with a pair of version numbers, a major version and a minor. We have no objection to using more than two numbers</quotation>
+			</link>
 		</item>
 		<item>
 			<id>cf557a11-b307-4c2f-a7b5-5d2485d23258</id>
@@ -207,6 +246,20 @@
 			<text>Another good ways to extend and customize the software are:</text>
 			<text>configuration (XML, INI, RegExp, SQL, XSLT, XPath etc.) and</text>
 			<text>scripting (Guile, Bash, Python, Lua, ECMA Script etc.)</text>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#Source-Language</url>
+				<type>compatible</type>
+				<title>GNU Coding Standards: Which Languages to Use</title>
+				<quotation>The more GNU components use Guile and Scheme, the more users are able to extend and combine them</quotation>
+				<quotation>Many programs are designed to be extensible: they include an interpreter for a language that is higher level than C. Often much of the program is written in that language, too. The Emacs editor pioneered this technique.</quotation>
+				<quotation>The standard extensibility interpreter for GNU software is Guile, which implements the language Scheme (an especially clean and simple dialect of Lisp).</quotation>
+			</link>
+			<link>
+				<url>https://www.gnu.org/software/guile/</url>
+				<type>related</type>
+				<title>GNU Guile</title>
+				<description>GNU implementation of the Scheme language (which is a dialect of Lisp).</description>
+			</link>
 		</item>
 	</chapter>
 	
@@ -249,6 +302,12 @@
 		<item>
 			<id>e24e600e-6542-4664-8cf0-2d8c6feb6c13</id>
 			<text>code, comments and specification should be written in the same natural language</text>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#Comments</url>
+				<type>related</type>
+				<title>GNU Coding Standards: Commenting Your Work</title>
+				<quotation>Please write the comments in a GNU program in English, because English is the one language that nearly all programmers in all countries can read.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>fa92aa33-a69f-43b8-9051-9bfdcd3d293f</id>
@@ -274,6 +333,12 @@
 		<item>
 			<id>b07fe0f0-2be7-4c1c-9b19-b671269c5e58</id>
 			<text>use code generators (during build process, not to generate code to be manually edited and versioned)</text>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#Releases</url>
+				<type>compatible</type>
+				<title>GNU Coding Standards: Making Releases</title>
+				<quotation>Building and installing the program should never modify any of the files contained in the distribution. This means that all the files that form part of the program in any way must be classified into source files and non-source files. Source files are written by humans and never changed automatically; non-source files are produced from source files by programs under the control of the Makefile.</quotation>
+			</link>
 		</item>
 	</chapter>
 	
@@ -428,6 +493,12 @@
 		<item>
 			<id>c3827486-6bf5-45c0-9a6d-61ad659d8ba1</id>
 			<text>GNU Gettext or other standard framework (like Java resource bundles) should be used.</text>
+			<link>
+				<url>https://www.gnu.org/prep/standards/standards.html#Internationalization</url>
+				<type>compatible</type>
+				<title>GNU Coding Standards: Internationalization</title>
+				<quotation>GNU has a library called GNU gettext that makes it easy to translate the messages in a program into various languages. You should use this library in every program.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>a57f4fc8-1f64-46e2-a91d-3a598c37f2e9</id>
@@ -484,11 +555,23 @@
 			<id>e8b18e02-d7b2-4584-8eee-dbaf823f6800</id>
 			<text>A mailing list (e-mail conference) or other equivalently open and decentralized technology should be used for the many-to-many communication.</text>
 			<note>Having an „old school“ mailing list is not mandatory – it might be e.g. a P2P distributed technology or some self-hosted forum.</note>
+			<link>
+				<url>https://www.gnu.org/prep/maintain/maintain.html#Standard-Mailing-Lists</url>
+				<type>related</type>
+				<title>Information for Maintainers of GNU Software: Standard Mailing Lists</title>
+			</link>
 		</item>
 		<item>
 			<id>e746eb5b-8d8b-4ec8-9315-a311f35e156a</id>
 			<text>Users must not be pushed to register at a proprietary social networks resp. at particular providers of such services.</text>
 			<text>Users without such account must not be disadvantaged – use open and decentralized networks/protocols instead.</text>
+			<link>
+				<url>https://www.gnu.org/prep/maintain/maintain.html#Ethical-and-Philosophical-Consideration</url>
+				<type>compatible</type>
+				<title>Information for Maintainers of GNU Software: Ethical and Philosophical Consideration</title>
+				<quotation>Please don’t host discussions about your package in a service that requires nonfree software. For instance, Google+ “communities” require running a nonfree JavaScript program to post a message, so they can’t be used in the Free World. Google Groups has the same problem. To host discussions there would be excluding people who live by free software principles.</quotation>
+				<quotation>Of course, you can’t order people not to use such services to talk with each other. What you can do is not legitimize them, and use your influence to lead people away from them. For instance, where you say where to have discussions related to the program, don’t list such a place.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>ff537045-819e-4dec-a020-d2c9f2c3292b</id>
@@ -525,6 +608,12 @@
 			<text>The website should not require a modern complex browser for basic tasks like reading the documentation, downloading a release or submitting a bug report.</text>
 			<text>Such tasks should be feasible even with simple text browsers (e.g. Lynx or Links2).</text>
 			<note>Modern browsers consists of 20 or 25 millions lines of code. Requiring such complex software for basic tasks is not reasonable.</note>
+			<link>
+				<url>https://www.gnu.org/prep/maintain/maintain.html#Freedom-for-Web-Pages</url>
+				<type>related</type>
+				<title>Information for Maintainers of GNU Software: Freedom for Web Pages</title>
+				<quotation>Please make sure it is possible to use the web site fully using the Lynx browser, and with the IceCat browser with LibreJS enabled.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>c89e8699-574c-4b28-9f65-6284d6051f68</id>
@@ -535,6 +624,12 @@
 		<item>
 			<id>fed07648-106a-4b7c-9026-509c82109448</id>
 			<text>Source code repository (versioning system) must be public. Do not publish just source code snapshots of released versions.</text>
+			<link>
+				<url>https://www.gnu.org/prep/maintain/maintain.html#Old-Versions</url>
+				<type>related</type>
+				<title>Information for Maintainers of GNU Software: Recording Old Versions</title>
+				<quotation>The history of previous revisions and log entries is very important for future maintainers of the package, so even if you do not make it publicly accessible, be careful not to put anything in the repository or change log that you would not want to hand over to another maintainer some day.</quotation>
+			</link>
 		</item>
 	</chapter>
 	
@@ -548,6 +643,12 @@
 		<item>
 			<id>ea429f77-44db-4eb4-9925-0d28f9abf47a</id>
 			<text>the „good quality code“ is defined by the project and might involve code style, idioms, design patterns, software architecture, required tests, documentation etc.</text>
+			<link>
+				<url>https://www.gnu.org/prep/maintain/maintain.html#Clean-Ups</url>
+				<type>compatible</type>
+				<title>Information for Maintainers of GNU Software: Cleaning Up Changes</title>
+				<quotation>Don’t feel obligated to include every change that someone asks you to include. You must judge which changes are improvements—partly based on what you think the users will like, and partly based on your own judgment of what is better. If you think a change is not good, you should reject it.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>b0022cea-4caf-4663-ae24-5fc5da31333b</id>
@@ -574,6 +675,12 @@
 			<item>
 				<id>af6a589f-d419-483f-b7b2-07b6e9da3924</id>
 				<text>to sign any political, religious or other proclamation or agree with it</text>
+				<link>
+					<url>https://www.gnu.org/prep/maintain/maintain.html#Other-Politics</url>
+					<type>compatible</type>
+					<title>Information for Maintainers of GNU Software: Other Politics</title>
+					<quotation>A GNU package should not seriously advocate any other political causes. Not that the GNU Project opposes those other causes. Rather, it is neutral on them, and GNU packages should be neutral too. </quotation>
+				</link>
 			</item>
 		</item>
 		<item>
@@ -590,11 +697,23 @@
 			<item>
 				<id>d7a94eba-efd6-471f-9c32-6ee9d3b8ab29</id>
 				<text>to assign the copyright to the project and grant a free license for all patents relevant to the contribution</text>
+				<link>
+					<url>https://www.gnu.org/prep/maintain/maintain.html#Copyright-Papers</url>
+					<type>related</type>
+					<title>Information for Maintainers of GNU Software: Copyright Papers</title>
+					<quotation>When copyright is assigned to the FSF, the FSF can act to stop GPL violations about the package. Otherwise, legal actions are up to the author(s).</quotation>
+				</link>
 			</item>
 		</item>
 		<item>
 			<id>e394c792-8294-4f15-a356-89cd0a7aa255</id>
 			<text>the project should record all accepted contributions and maintain a public list of all authors/contributors</text>
+			<link>
+				<url>https://www.gnu.org/prep/maintain/maintain.html#Recording-Contributors</url>
+				<type>compatible</type>
+				<title>Information for Maintainers of GNU Software: Recording Contributors</title>
+				<quotation>Keep correct records of which portions were written by whom.</quotation>
+			</link>
 		</item>
 		<item>
 			<id>b5a128a2-31d9-49df-890c-59a770f7afa9</id>