This translation may not reflect the changes made since 2015-12-31 in the English original. You should take a look at those changes. Please see the Translations README for information on maintaining translations of this article.
什么是自由软件?
This page is maintained by the Free Software Foundation's Licensing and Compliance Lab. You can support our efforts by making a donation to the FSF. Have a question not answered here? Check out some of our other licensing resources or contact the Compliance Lab at licensing@fsf.org.
自由软件定义
此处给出自由软件的定义,用以衡量一款软件是否为自由软件。一直以来,我们不断改进这个定义,以此澄清并解决我们遇到的各种问题。参考下方的修改历史,详细列出了全部的影响自由软件定义的修改记录。
“自由软件” 尊重用户的自由,并且尊重整个社区。粗略来讲,一个软件如果是自由软件,这意味着用户可以自由地运行,拷贝,分发,学习,修改并改进该软件。因此,“ 自由软件 ” 是关乎自由的问题,与价格无关,软件如何定价并不影响它是否被归类为自由软件。英文中,我们使用Free Software。由于Free一词既有自由,也有免费的意思。而Free Software中的Free是指 “ 自由言论 ” 中的自由,而非 “ 免费 ” 这一意项。为避免歧义,在使用英文时,我们也会在用“Libre Software” 来指自由软件。
我们支持软件用户的自由,因为我们坚信这是每个用户应得的。有了这些自由,软件用户,无论是个人还是集体,都可以掌控所运行的软件,并决定这些程序如何为自己服务。如果一个软件令用户失去了这种控制权,我们则称它为 “ 非自由 ” 的,或 “ 专有 ” 的程序。与自由软件相反,非自由软件会操控它的用户,而软件的开发者则掌控着软件。 这使得非自由软件成为了 非正义力量的帮凶。
我们说,如果一个软件是自由软件,那么它必须为用户提供以下四项基本自由:
- 自由度0:无论用户出于何种目的,必须可以按照用户意愿,可以随时随处自由地运行该软件。
- 自由度1:用户可以自由地学习并修改该软件,以此来帮助用户完成用户自己的计算。作为前提,用户必须可以访问到该软件的源代码。
- 自由度2:用户可以自由地分发该软件的拷贝。
- 自由度3:用户可以自由地分发该软件修改后的拷贝。借此,用户可以把改进后的软件分享给整个社区令他人也从中受益。作为前提,用户必须可以访问到该软件的源代码。
一个软件只有提供了以上所有的自由给它的用户,才可以被成为自由软件。否则,它就是非自由的。尽管我们也可以比较非自由软件为其用户提供的自由度,但是我们认为,无论如何,非自由软件本身是不道德的。
无论在哪种情况下,只有所有用户使用的代码都满足了这四项基本自由,该程序才能被视作自由软件。例如,有两个程序,甲程序运行的时候会自动调用乙程序。发布甲程序意味着用户必须使用到乙程序,那么必须甲乙两个程序都是自由的,甲程序才是自由的。如果通过修改甲程序,使其不再依赖乙程序,那么仅仅以自由软件的形式发布甲程序即可。
本文着重介绍在哪些情况下,软件会被认为提供了或剥夺了某个自由度。
自由分发(自由度2和3)意味着你(即,软件用户)可以把软件原版或修改版再发布给其他用户。你可以免费发布,也可以收取费用。软件可以发布给任何地方的任何人。所谓“自由”,意味着你的这些行为(发布软件原版或修改版给其他用户;或其他自由度中提及的行为)不必事先征得任何人的许可,也不必为此额外支付任何费用。
用户可以自由地运行该程序或对程序进行修改。如果仅仅私下自己修改或运行该程序,那么你没有义务将该行为公开给任何人。如果你发布了自己修改后的程序,那么你也没有任何义务将该修改行为告知给哪个或哪些指定的人或组织。
“自由地运行程序”(自由度0)意味着任何人或组织可以在任何(支持的)计算机系统上,出于任何目的去运行该程序,并且没有义务通知软件的开发者或任何个人或团体。此处,用户的目的是重点,而非开发者的目的。如果你是该程序的用户,那么你就可以自由地运行该程序。同理,如果你把程序发布给别人,那么此人也成了软件的用户,他也可以出于自己的任何目的运行该软件。然而,你作为软件的发布者,不可将自己的目的强加于你的用户。
“自由地运行程序”意味着没有人可以阻止用户使用该程序做任何事情。它并没有规定该程序必须提供哪些功能特性,也并不意味着软件必须迎合用户的所有需求。
“自由地分发软件的拷贝”意味着必须允许用户自由地发布软件的原版或用户自己的修改版。无论那个版本,用户都可以选择发布程序的二进制或可执行文件,也可以发布程序的源代码。(以可执行文件的形式发布程序可以让人方便安装,这一点对于推广自由软件也至关重要。)对于某些程序,也许无法或者不必发布二进制或可执行文件(一些编程语言的实现可能并不支持,例如某些脚本语言),但是用户必须有权利以任何方式生成二进制或可执行文件,并且发布这些生成的软件。
自由度1和3(自由地修改软件;自由地发布修改后的软件)意味着用户必须有权访问程序的源代码。由此,访问源代码是成为自由软件的必要条件。混编(Obfuscated)后的 “ 源代码 ” 不能被算作此处讨论的源代码。
自由度1(自由地运行程序)包括自由地运行自己修改后的程序以替代原版程序。如果程序是跑在某种设备上,并且时随设备一起出售的,那么该设备必须给出一个方法,让用户可以将设备上的原有程序替换成用户自己的程序。否则,自由度1将被视为无法满足,那些被 “ 锁死 ” 在设备中的程序也将不被视为自由软件。这种将程序锁死在设备中,禁止用户修改设备中的程序的做法,我们也称其为 “ tivozation ”。
倘若要修改某个程序,一种很重要的方法就是从别的程序中拿来现成的函数,或模块来使用。如果某个程序的许可证中禁止你使用其他合理授权的软件的代码来修改该程序 — 比如,如果某个程序的许可证要求你只能使用你拥有版权的代码 — 那么这个程序的许可证将不被视为自由软件许可证。
自由度3允许用户自由地发布软件的修改版。自由软件不一定要求修改版必须继续采用自由软件许可证。换句话说,自由软件许可证可以不必是copyleft许可证。但是,如果一个软件许可证要求修改后的软件必须以非自由软件的形式发布,那么该许可证则不被视为自由软件许可证。
要让落实这些自由度,只要用户遵守许可证上的要求,那么这些自由度就必须是长久的,不可更改的。如果软件的开发者有权利修改已发布软件的许可证,那么该软件也不被视为自由软件。
当然,只要不违背这些核心自由,自由软件许可证也可以额外添加一些要求,限制软件的分发步骤。例如,copyleft就是常见的一种限制。简言之,copyleft要求软件的修改版必须同样以自由软件的形式发布。这条限制与核心自由并不冲突,相反,copyleft可以用来很好地保护软件用户的自由。
在GNU项目中,我们使用copyleft这一规则来保护软件用户的四大自由。我们相信Copyleft是更好的选择。然而,非copyleft的自由软件也同样是合乎道义的。参见自由软件分类来了解更多关于 “ 自由软件 ” , “ copyleft软件 ” 以及其他分类和它们之间的关系。
“ 自由软件 ” 不等于 “ 非商业软件 ” 。一个自由软件必须允许商业用户,商业开发,和商业发布。商业开发自由软件早就司空见惯了,这样的自由软件非常重要。你可能需要花钱购买自由软件的拷贝,也可能免费拿到。但是无论你如何获得你的拷贝,作为用户,你的四大自由都会被保证,你可以自由地运行,修改,发布甚至出售你拿到的自由软件。
对软件的修改可能是出于各种目的。某个特定的修改究竟是好是坏,这本身是个非常主观的事情。自由软件许可证不能对用户修改软件做任何限制,例如,不能仅仅因为某人觉得哪处修改不够好,就禁止用户自己做这个改动。
不过,自由软件可以对修改版的打包或分发方式做一定的限制。这些限制不得与前面提到的四大自由相矛盾,不得直接或间接地限制用户运行,修改或发布软件。例如,某些自由软件可以要求修改版不得使用软件的原有名字发布;不能使用软件的原有商标;必须标明软件来自谁的修改等等。只要这些限制不会明显地限制用户再发布软件的修改版,那么它们就是可以接受的。既然已经对软件修改了,那么你估计也就不会在乎这些额外的小限制了。
同理,自由软件也可以要求用户 “ 如果以这种方式发布,那么用户必须也可以从另外某一渠道获得 ” 。比如,某个自由软件可能会要求如果发布了修改版,那么必须也要给原作者一份修改后的拷贝。(注意:此处前提是软件必须发布,用户可以私下修改软件而不发布,这样也就不必把修改版发给开发者了。)另外还有一些规则也不会与自由软件原则冲突,比如软件可以要求修改后的版本发布时需要附带相应的原版软件的代码。
有一些特例需要额外讨论:如果某软件许可证要求修改后的软件必须修改可执行文件的名字,那么必须保证软件运行的环境允许修改文件名或具备某种别名机制,否则该要求将被视作与自由软件原则相背。因为软件的可执行文件可能会被其他第三方软件调用,而文件名则是这种调用的基础。别名机制可以保证用户在遵守该要求的前提下,顺利将原版软件替换成修改版,并且不会影响依赖该软件的第三方程序。
一些政府的出口限制或贸易制裁可能会影响到软件用户在国际范围内发布软件的自由。软件开发者也许没有能力去改变这些现实,但是我们可以拒绝自我审查。自由软件的开发者不得在软件许可证中要求用户遵守哪条特定法律,因为开发者无法保证用户所在国度或地区具备该法律条款。这样,自由软件许可证就不会给用户在法律之外添加额外的违反基本自由的限制。
当然,自由软件可以仅仅在许可证中提及某条出口条例或相关法律,而不强制要求用户遵守。这样做只是为用户提供了信息而没有实际限制用户。如果某条出口限制法律是普遍存在,全部用户所在的地区都做出该限制的,那么在许可证中要求用户遵守该条例也不会被视为限制用户的自由。然而,这会存在潜在问题:一旦该条出口限制法律在某个用户的所在地区做了修改,那么该许可证也就不被视作自由的。
自由软件许可证不得要求用户额外遵守哪些非自由软件的许可证。例如,自由软件许可证不得要求用户必须遵守 “ 所有使用的软件的许可证 ” 。因为用户可能使用非自由软件,而要求用户遵守全部使用的软件的许可证则意味着需要遵守非自由软件许可证,这要的要求将被视作非自由的。
自由软件许可证可以指定与软件相关的诉讼需要遵守哪个地区的法律,或需要在哪里提起诉讼。
绝大部分自由软件许可证是基于版权的,基于版权,能采取的限制往往相对有限。如果一个许可证基于版权并且遵照上述的自由软件原则,那么它很可能被视作是自由软件许可证。当然,我们也见过一些例外,不过这些还很少见。然而有些自由软件许可证是基于合同的。合同可能会有更多的额外要求。这就意味着基于合同的许可证可能会在很多不经意的地方违背自由软件原则,导致软件不被视作自由软件。
很遗憾,我们无法列出所有可能的意外情况。如果一份基于合同的许可证对用户做出了一些额外限制,并且这些限制是不可能包含在一份基于版权的许可证中的,那么我们就需要再三考虑它是否可以被视作自由许可证。很多情况下,这些许可证都是非自由的。
在讨论自由软件的时候,尽量避免使用 “ 赠送 ” 或 “ 免费 ” 一类的词汇。因为这会让人们联想到价格,而非自由。一些常见的词汇,例如 “ 盗版 ” ,其中包含了或褒或贬的感情色彩,而这些感情体现的价值观并不被我们接受。参见歧义词汇列表,里面列举了我们不推荐使用的词汇以及相关的讨论。我们还有一个列表,包含了 “ 自由软件 ” 一词在不同语言中的推荐翻译。
最后请注意,在实践中,本文中提及的各种关于自由软件的界定标准都需要仔细思考后再做出解释。在决定一个软件许可证是否是自由软件的时候,我们会仔细查看该许可证的内涵和行文是否符合本文中涉及的原则,由此决定许可证是否为自由软件许可证。如果许可证中包含了一些不合理的限制,哪怕这些限制没有在本文中提及,我们也会拒绝承认它是自由的。有时候,某个许可证可能会引起一场大讨论,甚至需要专业律师参与。这时候,我们往往需要仔细定夺之后才能给出结论。遇到这样的许可证,在做出结论之后,我们很可能会更新本文,把之前没有考虑到的因素添加进来。
如果你想知道哪些许可证是自由软件许可证,可以参见我们的许可证列表。如果你关注的许可证没有在这个列表中提及,你也可以给我们发邮件来单独询问。我们的邮箱是:<licensing@gnu.org>。
如果你打算起草一份新的自由软件许可证,那么请先不要给上述邮箱发邮件。希望您能先考虑联系自由软件基金会。太多的自由软件许可证会增加用户的选择难度,我们也许可以按照您的要求,帮您找到一份现有的许可证,而不必您亲自操刀起草一份新许可证。
如果您真的需要自己创造一个新许可证,那么我们会尽力帮助您。在我们的帮助下,我们会保证您的许可证是自由的,并且帮助您避免一些常见的问题。
软件之外
基于同样的原则,自由软件的手册也必须是自由的,因为手册本身也应该被视作软件的一部分。
同理,相同的原则也适用于其他的具有实用功能的作品中 — 所谓实用功能的作品,是指作品中包含实用的知识,例如教育材料或参考材料。维基百科就是其中一个广为人知的例子。
任何作品都可以是自由的,自由软件的定义也可以延伸到其他作品上。关于这方面的材料,请参见自由文化作品。
开源?
现在还有另外一伙人,使用 “ 开源 ” 一词来表达与 “ 自由软件 ” 类似,但不完全相同的概念。我们更倾向于使用 “ 自由软件 ” 这个词。因为一旦你看到自由二字,就明白了它所要表达的意思。而 “ 开放 ” 却并不意味着自由。
本文修改历史
随着时间的发展,我们也在不断对本文做出改进。此处列出历次的主要改动,并给出链接详细显示出哪里做出了修改。
- Version 1.141: 澄清了哪部分的代码需要是自由的。
- Version 1.135:强调自由度0是用户可以出于任何目的而运行软件。
- Version 1.134: 声明自由度0与软件功能无关。
- Version 1.131: 自由的许可证不得要求用户必须遵守另外一个程序的非自由许可证。
- Version 1.129: 明确重申法律纠纷的起诉地可以由自由软件所有者指定。(这一直都是我们的原则。)
- Version 1.122: 出口限制要求在一些特殊情况下可能会生出麻烦。但是大部分的时候它只是个潜在问题。
- Version 1.118: 澄清修改不等于改进。
- Version 1.111: 阐明自由软件许可证不得允许版权所有者在软件发布之后对用户增加更多限制。版权所有者完全可以在事后给用户更多权利。
- Version 1.105: 在对自由度1的描述中,强调用户使用自己修改后的版本进行计算。
- Version 1.92: 阐明混淆(obfuscated)后的代码不被视作源代码。
- Version 1.90: 阐明自由度3是指用户有权利去发布自己的修改版本,而不是有权利参与别人的开发。
- Version 1.89: 自由度3包括了用户有权利以自由软件的形式发布修改后的版本。
- Version 1.80: 自由度1必须是可以实施的,而不仅仅停留在理论上。因此如果出售的硬件包括了自由软件,那么该硬件必须提供一种方法让用户可以运行自己修改后的软件。否则该硬件所携带的软件将不被视作自由软件。
- Version 1.77: 声明已经发布给用户的软件,其许可证将不得修改。
- Version
1.74: 此次修改重点强调四个要点:
- "改进"并不意味着许可证可以限制用户只能做哪些方面的修改。自由度3允许用户再发布修改后的完整软件,而非仅仅是修改的部分。
- 用户有权利在自由软件中使用第三方的代码,但是前提是第三方代码的许可证与该自由软件的许可证兼容。
- 明确陈述关于出口限制的问题。
- 强调替换已经发布的软件的许可证也被视作撤销许可证。如果许可证允许该行为,那么将不被视作自由软件许可证。
- Version 1.57: 加入 " 软件之外 " 一节。
- Version 1.46: 关于自由运行软件的权利,用户的意图才是更重要的。
- Version 1.41: 针对基于合同的许可证,修改了一些措辞。
- Version 1.40: 自由软件许可证必须允许用户使用第三方自由软件的代码来做出自己的修改。
- Version 1.39: 如果用户发布了某个自由软件,那么自由软件的许可证有权利要求软件的发布者提供源代码——哪怕该发布者不是软件的原作者。
- Version 1.31: 自由软件的许可证有权利要求软件的修改者在发布修改版本时提供自己的个人信息。其他几处也做了小修改。
- Version 1.23: 讨论了基于合同的自由软件许可证可能存在的潜在问题。
- Version 1.16: 解释了为什么发布二进制可执行文件很重要。
- Version 1.11: 自由软件许可证可以要求软件发布者给原作者提供一份发布的拷贝。该发布者可以是发布原软件,也可能是发布修改后的版本。
该列表并非包括全部修改记录,而仅仅是包含了一些重要修正。比如,本列表不会包括对拼写错误,错别字等小问题的修改。如果想要看到全部的修改里时,请参见CVS日志。