什么是自由软件?

Copyright © 1996–2002,2004–2007, 2009–2015 自由软件基金会。此文最初于1996年发表在http://gnu.org

自由软件的定义

自由软件的定义给出了一个标准,即一个特定的软件是否有资格被称为自由软件。我们时不时修改这一定义,以的澄清和解决与之相关的各种细微问题。对于我们自由软件的定义所作的更改列表,请参阅“历史”部分,在http://gnu.org/philosophy/free-sw.html。

“自由软件”(Free Software)表示的是那些尊重用户和社群自由的软件。粗略的说,它表示用户有运行、拷贝、再发行、学习、修改并改进软件的自由。因此,“自由软件”是有关用户的自由权益(liberty),而不是指免费(free)的价格。为了理解这个概念,你需要将“free”一词理解成“言论自由”中的“自由”,而不是“免费啤酒”里的“免费”。有时我们会称之为“Libre Software”,以避免表示免费的意思。

我们争取这些自由,是因为每个人都应该拥有它。有了这些自由,用户(包括个体和团体)就可以控制程序为己所用。当用户无法控制程序时,我们称之为“非自由”(Nonfree)或“专有”程序。非自由的程序控制了用户,而开发者控制着程序:这就让程序成为了非正义权力的帮凶1

如果一个软件的用户拥有以下四项基本自由,那么该软件可以被称为自由软件:

  • 基于任何目的,按你的意愿运行软件的自由(自由之零)。

  • 学习软件如何工作的自由,按你的意愿修改软件以符合你的计算机的自由(自由之一)。可访问源代码是此项的先决条件。

  • 再发行软件副本的自由,因此你可以帮助你的邻居(自由之二)。

  • 将你修改过的软件版本再发行给其他人的自由(自由之三)。这样可以让整个社群有机会共享你对软件的改动。可访问源代码是此项的先决条件。

如果一个软件可以充分授予用户所有这些自由,它就是自由软件,否则就是非自由软件。即使我们可以依据它们与自由有多大的差异来区分不同的非自由发行方式,我们依然认为这些非自由软件是不道德的。

在任何情况下,这些自由都必须应用于我们计划使用的任何代码,或引导其他人使用之。例如,程序 A 会自动启动程序 B 来处理一些事情,如果我们独立发布 A 也意味着用户还需要 B,因此我们需要判断 A 和 B 是否都是自由的。如果我们修改了 A 使得它不再需要 B,那么只需要 A 是自由的,可以忽略 B。

本页余下的内容,将会澄清关于特定自由是否适用的一些关键点。

再发行软件的自由(自由之二和自由之三)表示你可以在任何地方发布软件的副本给任何人,无论是否有过修改,无论是免费或收取发行费用。自由地再发行意味着(排除其他因素)你不需要强制索要再发行许可或为此付费。

你应该有修改软件的自由并将其用于私人的工作或娱乐,甚至不需要提到你的修改。如果你发布了自己的修改版,你不应被要求通知特定的人或以特定的方式发布。

运行软件的自由,赋予任何个人或组织在任何计算机系统上,基于任何工作方式或任何目的运行软件的自由,而无需与任何开发者或特定实体沟通。在这个自由中,重要的只是用户的目的,而非开发者的的目的;作为用户你有基于任何目的运行软件的自由,如果你将软件发布给了其他人,则她也有按自己目的运行软件的自由,但你不能将自己的目的强加给她。

以你的意愿运行软件的自由也表示你不能被要求禁止或停止运行,它无关软件的功能,或对你来说它是否有用。

重新发布软件副本的自由必须包括该程序的二进制可执行格式,以及源代码,包括已修改和未修改版。(以可运行格式发布程序可以方便在自由的操作系统上安装)。对特定程序也可以不发布和产生二进制可执行格式(因为一些编程语言不支持这个特性),但你也有发布这些格式的自由,或开发一种方法来产生这些格式文件。

为了实现自由之一和自由之三(修改软件并发布修改版的自由),你必须能够访问程序的源代码,因此有权力访问程序的源代码对自由软件来说是一个必要条件。混淆的“源代码”不能算真正的源代码。

自由之一包括了用你修改的版本来替代原始的。如果一个程序从产品设计的角度发布只能用其他人修过的版本而不能用你的修改版——例如所谓的“tivo化”或“锁定”,或者(用行业内的话来说)就是“安全启动”(Secure Boot)——这样自由之一就被架空而无法实现,即便这些软件的二进制是从自由的源代码编译而来,也不能算是自由软件。

修改软件的一个重要方法是合并可用的自由子程序或模块。如果一个程序的许可证让你不能将一个按适当的许可证发布的现有模块融合进来——例如要求你成为你修改过代码的版权所有者,因此该许可证过于严苛以致不能被分类为自由的。

自由之三包括你可以以自由软件的方式发布修改版。一个自由许可证可能允许以其他形式发布;也就是说,这不一定是 copyleft 许可证。不过如果一个许可证要求以非自由的方式发布修改版,则是非自由的。

为了让这些自由得以实现,在你没有做错的情况下,这些条款必须是永久且不可撤销的。如果软件的开发者有权力撤销,或者添加限制性条款。在你没有做错的情况下,该软件就不是自由的。

然而,一些对自由软件发布方式的规则是可以接受的,前提是与核心自由不冲突。例如,copyleft(最简单的说)规定你不能在分发程序的时候添加限制性条款以拒绝其他人的核心自由。这一规则与核心自由并不冲突,反而是保护核心自由。

在 GNU 项目中,我们用 copyleft 合法保护每个人的四个自由,我们相信使用 copyleft 是非常重要的。然而非 copyleft 的许可证也是合乎道德的。有关“自由软件”、“copyleft 软件”和其他类型软件的话题可以参见《自由软件的分类》一文。

“自由软件”并不意味着“非商业”。一个自由软件能够商业使用,商业开发以及商业发布。自由软件的商业开发已经不是一件特殊的事情。这对自由软件是非常重要的,你也许需要为获取自由软件的副本而付费,也可能不需要付费。但是无论如何获得副本,你都有复制并修改软件的自由,甚至有自由重新销售。

对程序的改动是不是改进只是一个主观判断。如果你对软件的修改权实际上仅限于作出被他人认作改进的修改,该程序并不自由。

不过,规范修改版打包行为的条款是可以接受的,如果他们实质上没有限制你发布修改版的自由,或者私下使用的自由。因此,许可证要求你改变修改版的名字,移除 LOGO,或者修改版为你自己所有是可以接受的。只要这些要求不那么繁冗以至于影响了正常发布,都是可以接受的。既然你都已经做过一些修改,也就无所谓再多做一些了。

“如果你的版本在这种方式下可用,也必须能够在另一种方式下可用”,类似这样的条款也是可以接受的。同样的,比如有规则要求如果你发布了修改版,也必须给前一个开发者发送一份,也是可以接受的。(注意这样的条款仍然让你有自由选择是否发布的权力)。要求你为用户发布公开发布版的源代码,也是可以接受的。

有个特殊问题是一个许可要求改变一个程序用来被其他程序调用的名字。这样实际上是阻碍了你的修改版的发布,以便通过修改名字来取代原始版。这种情况仅当通过一种别名机制来标示原始程序名是修改版的别名时可被接受。

有时政府的出口管制或者贸易制裁会压抑你国际性地分发软件的自由。软件的开发者没有权力消除或覆盖这些限制,但他们可以做的是拒绝强制要求使用程序时接受这些条件。这样,这些限制就不会影响到政府管辖以外的国家和人民的活动。因此自由软件许可证为了行使这些必要的自由,不能要求服从任何这些出口限制条款。

仅仅只是提到这些出口限制条款,而没有将这些条款作为软件许可证的条件,因为这样并没有限制用户所以也是可以接受的。如果该出口限制条款对自由软件并不重要,将其作为需要的条件也不是一个问题。然而这会产生一个潜在问题,出口限制法规若之后有一定修改,可能会让软件变成非自由的。

自由的许可证不能要求遵守非自由程序的许可证。所以,比如,如果一个许可证要求你必须遵守“你使用的所有程序”的许可证,运行非自由程序的用户在这种情况下会需要遵守非自由程序的许可证,那么这将使得该许可证变成非自由的。

自由的许可证里可以指定适用的法律范围或诉讼时必须做的事情,亦可兼而有之。

大多数自由软件许可证是基于版权的,而何种要求能通过版权施加是有限制的。如果一个基于版权的许可证尊重如上文所说的自由,那么也就不会发生我们意料之外的问题(尽管这也许会发生)。然而有些自由软件许可证是基于合同的,而合同可以增加更大范围的限制。这样就有更大可能性使得该许可证出现无法接受的限制或非自由。

我们无法将这些可能的情形一一列出。如果一个基于合同的许可证以不同于基于版权许可证的方式限制了用户,此处也没有表明其为合法,那么我们需要考察这个许可证,并且很可能会将之视为非自由的。

在谈到自由软件的时候,尽量不要用“白给”(Give Away)或“免费”(For Free),因为这些词都是暗示免费价格而非自由的。一些常用语比如“盗版”也体现了一些我们希望你不会认同的意见。相关请详见《避免使用容易混淆的词语》一文。我们同时还根据不同语言列出了“自由软件”(Free Software)一词的翻译,请见附录B

最后,这些有关自由软件的标准需要谨慎的解读。判断一个软件许可证是否是自由软件,标准就是看它是否符合自由软件精神以及用语是否精确。如果一个许可证包含了不合理的限制,我们会拒绝它,即便是此文中我们没有预料的问题。有些时候一个许可证会带来新的问题和思考,这需要我们与律师咨询以后,共同判断和思考。当我们最终得出结论,会更新这份标准以使其能更容易体现特定的许可证是否符合标准。

如果你对特定的许可证感兴趣,可以看我们的许可证列表。如果里面没有列出你所关心的,可以发邮件询问我们:licensing@gnu.org

如果你打算写一个新的许可证,请首先向通过上面这个邮件联系自由软件基金会。不同的自由软件许可证意味着用户需要花费更多精力来理解;我们也许可以帮你从现有的自由软件许可证里找到符合你需要的。

如果这样依然不行,如果真的需要一张新的许可证,有了我们的帮助也可以确保许可证符合自由软件标准并避免一些现实问题。

软件之外

软件手册必须是自由的2,就如同软件必须是自由的一样,因为手册会对软件产生一部分影响。

同理可证其他领域——也就是说,任何体现知识可用性的——也应该如此,比如教育资源和参考资料。维基百科(Wikipedia)就是最著名的例子。

任何领域的作品都可以是自由的,对自由软件的定义已经扩展为了对自由文化的定义,可应用于任何领域的作品3

开放源代码?

另一些用户使用“开放源代码”(“开源”,Open Source)一词来表示与“自由软件”相近(但不尽相同)的意思。我们倾向于使用“自由软件”一词,因为一旦你理解它表示自由而不是价格,这么称呼可以表达自由。“开放”(Open)一词并不能表达自由之要义4


  1. 可参见《自由软件更加重要了》一文。 

  2. 可参加《为什么自由软件需要自由文档》一文 

  3. 可参见 http://freedomdefined.org 

  4. 可参见《为什么开源软件没有抓住自由软件的要点》一文