下一节:与非自由软件的互操作,上一节:不应接受的补丁 [目录][索引]
请不要编写或安装在 GNU 系统上功能较差、功能较少(或根本没有功能)的特性代码,而这些特性在某些非 GNU 系统上却表现良好。
任何 GNU 程序的主要目的是增强 GNU 系统为用户提供自由的能力,因此 GNU 软件包的每个特性都应该在 GNU 操作系统的自由发行版上可用且有用(https://gnu.ac.cn/distros/)。为此,“特性”是指对用户来说具有实质性用途的操作,而不是实现的技术细节。我们将在下面进一步解释这一点。
仅在某些非 GNU 操作系统上运行或在这些操作系统上运行得更好的特性会破坏该主要目的;更糟糕的是,它会以 GNU 为代价来推广该非 GNU 系统。这种情况会直接与将用户从这些系统中解放出来的目标背道而驰,即使从“开源”理念来看,安装创建这种情况的特性会被认为是可取的。
由于计算机使用的自由是最终目的,我们需要明确地以自由为目标。我们需要通过我们的实际决策以及对这些决策的解释来表明,我们正在为比“更好的软件”和“更方便”更深刻、更重要的东西而努力。这将使用户有机会反思我们采取与大多数程序员不同的道路的原因。请参阅 https://gnu.ac.cn/philosophy/open-source-misses-the-point.html。
因此,当您作为 GNU 维护者收到在 GNU 系统上无法正常工作的特性贡献时,请解释此规则以及其必要性。解释说,我们需要 GNU 软件包中的所有特性在 GNU 系统上正常工作,以便它们相互增强并使 GNU 系统更好。因此,更改不应以目前的形式安装。
这并不意味着该更改永远不能安装。如果 GNU 系统上对同一特性的同等良好支持可以同时安装,则可以稍后安装。解释这一点是要求人们帮助编写在 GNU 上支持该特性的代码的好机会。还要告知贡献者有关如何在 GNU 上支持此特性的资源,以便他们可以考虑完成该工作,或者招募其他人来帮忙。
如果代码的某些部分是与系统无关的,并且将部分完成在 GNU 系统上支持该特性的工作,则您可以立即安装它们。或者,您可以将它们放在软件包存储库中,而无需实际安装它们,放在一个 ‘wip-name’ 分支中。将它们放在存储库中可能有助于和鼓励人们完成在 GNU 上实现该特性的工作。
如果您认为它非常重要,您可以自己实现对 GNU 系统上该特性的支持。如果您认为在 GNU 上拥有该特性是非常理想的,您可以做出特殊安排,将非 GNU 系统特定的代码放在软件包存储库中但不安装它 — 请参阅 存储库中未安装的代码。
如果该特性在 GNU 上的运行至少与在非 GNU 系统上一样好,即使在不同系统上的实现方式不同,在其实现中使用不同的系统设施,或者在某些细节上对用户看起来不同,也可以为非 GNU 系统实现或支持该特性。可以在每个系统上以方便或传统的方式实现这些小细节,以使特性正常工作。关键是程序和特性应该“在 GNU 上运行最佳”。
如果某些其他系统上的系统设施在没有任何特殊的应用程序代码的情况下提供了 GNU 上不可用的特性,则无需进行任何工作来阻止其正常运行。在这种情况下,我们应该努力在 GNU 中实现该特性。
我们不认为控制或配置特定操作的接口的细微细节,或者实现操作的细节是“特性”。同样,系统设施(包括系统附带的库)是实现特性的手段,但使用该设施本身不是特性。
例如,编程平台通常提供一个接口,用于在低级别控制计算机或操作系统。如果该软件包也在 GNU 系统上支持相同的功能,即使调用该特性的细节因系统而异,也可以支持在非 GNU 系统上进行低级别控制的特性。但是,请务必使跨系统调用此特性保持一致,以便在多个系统上支持特定操作。
主要用于与其他用户计算机通信,或在未设置为紧密耦合使用的一组计算机之间通信的特性,则完全是另一回事。只有当通信特性与 GNU 系统的自由发行版互操作时,它才真正与 GNU 上的“相同特性”相同,例如 TCP/IP。用于非 GNU 系统的不可移植、系统特定的通信设施是对社区的滥用,因此不要安装对它们的支持。如果需要在不相关的计算机之间移动这些文件,这一点也适用于程序之间用于通信的文件格式。(例外:如果您可以做到,编写代码从这样的文件中提取用户的数据是值得称赞的。)
最后,请注意不要让为非 GNU 系统安装或支持系统特定代码占用您自己的太多时间。请参阅 GNU 编码标准中的 GNU 编码标准。
假设人们要求在某些非 GNU 系统上支持特性 F,而特性 F 在 GNU 上确实有效。如果愿意,您可以说是,但您没有义务编写或维护该代码。您可以告诉他们,编写和维护它是他们的责任。如果他们为此编写了好的干净代码,您可以批准其安装,但这并不意味着您或其他人有义务支持它。如果有一天代码遭受位腐烂,如果用户不修复它,您可以删除它。
请参阅 建议的回应,其中包含您可以使用的或改编的文本(如果您愿意),以便对这些补丁说不。其目的是邀请他们在新的特性中同样很好地支持 GNU 系统。如果没有任何希望,只需说“不,谢谢”就足够了。
下一节:与非自由软件的互操作,上一节:不应接受的补丁 [目录][索引]