这是针对英文原版页面的中文翻译。

什么是自由软件?

“自由软件”尊重用户的自由,并且尊重整个社区。粗略来讲,一个软件如果是自由软件,这意味着用户可以自由地运行,拷贝,分发,学习,修改并改进该软件。因此,“自由软件”是关乎自由的问题,与价格无关。要理解这个概念,你要按照 Free Software 中的“Free”是指“自由言论(free speech)”中的自由,而非“免费午餐(free lunch)”的免费这一意项。为避免歧义,在使用英文时,我们也会借用法语或西班牙语的“Libre Software”来指自由软件,这样可以明确表示我们说得不是免费。

你可能花钱购买了自由软件的拷贝,也可能免费拿到。但是无论你如何获得你的拷贝,你都有自由复制和修改该软件,乃至 出售 该软件的拷贝。

我们支持软件用户的自由,因为我们坚信这是每个用户应得的。有了这些自由,软件用户,无论是个人还是集体,都可以掌控所运行的软件,并决定这些程序如何为自己服务。如果一个软件令用户失去了这种控制权,我们则称它为“非自由”的,或“专有”的程序。与自由软件相反,非自由软件会操控它的用户,而软件的开发者则掌控着软件。这使得非自由软件成为了非正义力量的帮凶

“开源”是另外一回事:它有基于不同价值观的非常不同的哲学。其实际定义也不同,但是几乎所有的开源程序事实上都是自由软件。我们在为什么“开源”错失了自由软件的重点一文中阐述了这些不同。

自由软件定义

此处给出自由软件的定义,用以衡量一款软件是否为自由软件。一直以来,我们不断改进这个定义,以此澄清并解决我们遇到的各种问题。参考下方的修改历史,我们详细列出了全部的影响自由软件定义的修改记录。

四项基本自由

如果一个软件是自由软件,那么它必须为用户提供以下四项基本自由:[1]

  • 自由度0:无论用户出于何种目的,必须可以按照用户意愿,自由地运行该软件。
  • 自由度1:用户可以自由地学习并修改该软件,以此来帮助用户完成用户自己的计算。作为前提,用户必须可以访问到该软件的源代码。
  • 自由度2:用户可以自由地分发该软件的拷贝,这样就可以助人。
  • 自由度3:用户可以自由地分发该软件修改后的拷贝。借此,用户可以把改进后的软件分享给整个社区令他人也从中受益。作为前提,用户必须可以访问到该软件的源代码。

一个软件只有提供了以上所有的自由给它的用户,才可以被成为自由软件。否则,它就是非自由的。尽管我们也可以比较非自由软件为其用户提供的自由度,但是我们认为,无论如何,非自由软件本身是不道德的。

无论在哪种情况下,只有所有用户使用的代码都满足了这四项基本自由,该程序才能被视作自由软件。例如,有两个程序,甲程序运行的时候会自动调用乙程序。发布甲程序意味着用户必须使用到乙程序,那么必须甲乙两个程序都是自由的,甲程序才是自由的。如果通过修改甲程序,使其不再依赖乙程序,那么仅仅以自由软件的形式发布甲程序即可。

自由软件 可以 是商业软件

“自由软件” 不表示 “非商业化”。与之相反,自由软件必须可以商用、可以商业开发、可以商业发布。这个政策非常重要—缺乏这样的政策,自由软件将无法实现自己的目标。

我们要邀请所有人使用 GNU 系统,包括商业机构及其员工。这就需要允许商用。我们期待许多程序的自由替代将来可以替换掉相应的专有程序,但是如果禁止商用就无法做到这些。我们期待商业产品包含有 GNU 系统的软件,并且成为商业发布定价的一部分。自由软件的商业开发不再那么不寻常;这些自由的商业软件非常重要。付费的、专业的自由软件技术支持填补了重要的需求空白。

因此,把商业使用、商业开发或商业发布排除在外会羁绊自由软件社区并阻碍其走向成功之路。我们一定要明确使用带有这种限制的许可证发布的软件不是自由软件。

假如获得自由软件拷贝的(潜在)用户遵守了先前发布的自由软件的许可证条款,那么该自由软件必须为获得软件的该(潜在)用户提供自由软件的四项基本自由。在自由方面对用户加以限制或者要求付费才能实践这些自由和不赋予用户自由没有什么两样,因此这样的程序不是自由软件。

澄清自由和非自由的边界

在本文的以下部分,我们会进一步准确地解释这些自由针对各种问题会如何扩展才能使软件自由。

自由度0:无论用户出于何种目的,必须可以按照用户意愿自由地运行该软件。

“自由地运行程序”(自由度0)意味着任何人或组织可以在任何(支持的)计算机系统上,出于任何目的去运行该程序,并且没有义务通知软件的开发者或任何个人或团体。此处,用户的目的是重点,而非开发者的目的。如果你是该程序的用户,那么你就可以自由地运行该程序。同理,如果你把程序发布给别人,那么此人也成了软件的用户,他也可以出于自己的任何目的运行该软件。然而,你作为软件的发布者,不可将自己的目的强加于你的用户。

“自由地运行程序”意味着没有人可以禁止或阻止用户运行该程序。这和该程序的功能特性没有关系,既不考虑该程序在特定环境下的可用性,也不考虑该程序对特定计算的有效性。

例如,如果代码随意地拒绝某些有意义的输入——或者甚至无条件地失效——这就可能使该程序不那么有用,甚至可能完全无用,但是这并不妨碍用户运行该程序的自由,因此,这和自由之零并无矛盾。如果该程序是自由的,那么其用户可以克服这些无用之处,因为自由之一和自由之三允许用户和社区修改和发表不带有随意代码的改进版本。

“按照你的意愿” 可以包含、可选择地包含、“完全不包含”(如果你希望如此)。所以没有必要再有一个单独的 “不运行程序的自由”。

学习和更改程序源代码的自由

自由度1和3(自由地修改软件;自由地发布修改后的软件)意味着用户必须有权访问程序的源代码。由此,访问源代码是成为自由软件的必要条件。混编(Obfuscated)后的“源代码”不是真正的源代码,不能被算作此处讨论的源代码。

源代码的定义是人们进行修改时首选使用的程序形式。因此,开发者开发程序的形式就是开发者眼中的源代码。

自由度1(自由地运行程序)包括自由地运行自己修改后的程序以替代原版程序。如果程序是跑在某种设备上,该设备可以运行别人修改的软件但不运行你修改的软件—这个方法叫做“tivoization”或者 “锁死”,或者(用其发明者的术语)叫做“安全启动”—自由度1将被视为无法满足。该设备中的程序也将不被视为自由软件,即使它们的源代码是自由的。

倘若要修改某个程序,一种很重要的方法就是从别的程序中拿来现成的函数或模块来使用。如果某个程序的许可证中禁止你使用其他合理授权的软件的代码来修改该程序—比如,如果某个程序的许可证要求你只能使用你拥有版权的代码—那么这个程序的许可证将不被视为自由软件许可证。

对软件的修改可能是出于各种目的。某个特定的修改究竟是好是坏,这本身是个非常主观的事情。自由软件许可证不能对用户修改软件做任何限制,例如,不能仅仅因为某人觉得哪处修改不够好,就禁止用户自己做这个改动。

自由之一有一个特殊的案例就是删除程序的代码让它不执行任何动作,或者让它直接调用另外的程序。因此,自由之一包含有 “删除程序的自由”。

自由度2:用户可以自由地分发该软件的拷贝。

自由分发(自由度2和3)意味着你(即,软件用户)可以把软件原版或修改版再发布给其他用户。你可以免费发布,也可以收取费用。软件可以发布给任何地方的任何人。所谓“自由”,意味着你的这些行为(发布软件原版或修改版给其他用户;或其他自由度中提及的行为)不必事先征得任何人的许可,也不必为此额外支付任何费用。

用户可以自由地运行该程序或对程序进行修改。如果仅仅私下自己修改或运行该程序,那么你没有义务将该行为公开给任何人。如果你发布了自己修改后的程序,那么你也没有任何义务将该修改行为告知给哪个或哪些指定的人或组织。

自由度 3 允许用户自由地发布软件的修改版。自由软件不一定要求修改版必须继续采用自由软件许可证。换句话说,自由软件许可证可以不必是 copyleft 许可证。但是,如果一个软件许可证要求修改后的软件必须以非自由软件的形式发布,那么该许可证则不被视为自由软件许可证。

“自由地分发软件的拷贝”意味着必须允许用户自由地发布软件的原版或用户自己的修改版。无论那个版本,用户都可以选择发布程序的二进制或可执行文件,也可以发布程序的源代码。(以可执行文件的形式发布程序可以让人方便安装,这一点对于推广自由软件也至关重要。)对于某些程序,也许无法或者不必发布二进制或可执行文件(一些编程语言的实现可能并不支持,例如某些脚本语言),但是用户必须有权利以任何方式生成二进制或可执行文件,并且发布这些生成的软件。

Copyleft

当然,只要不违背这些核心自由,自由软件许可证也可以额外添加一些要求,限制软件的分发步骤。例如,copyleft 就是常见的一种限制。简言之,copyleft 要求软件的修改版必须同样以自由软件的形式发布。这条限制与核心自由并不冲突,相反,copyleft 可以用来很好地保护软件用户的自由。

在GNU项目中,我们使用copyleft这一规则来保护软件用户的四大自由。我们相信Copyleft是更好的选择。然而,非copyleft的自由软件也同样是合乎道义的。参见自由软件分类来了解更多关于“自由软件”、“copyleft软件”以及其他分类和它们之间的关系。

打包和发行的详细规则

自由软件可以对修改版的打包或分发方式做一定的限制。这些限制不得与前面提到的四大自由相矛盾,不得直接或间接地限制用户运行,修改或发布软件。例如,某些自由软件可以要求修改版不得使用软件的原有名字发布;不能使用软件的原有商标;必须标明软件来自谁的修改等等。只要这些限制不会明显地限制用户再发布软件的修改版,那么它们就是可以接受的。既然已经对软件修改了,那么你估计也就不会在乎针对这些额外的小限制再做一点修改了。

同理,自由软件也可以要求用户“如果以这种方式发布,那么用户必须也可以从另外某一渠道获得”。比如,某个自由软件可能会要求如果发布了修改版,那么必须也要给原作者一份修改后的拷贝。(注意:此处前提是软件必须发布,用户可以私下修改软件而不发布,这样也就不必把修改版发给开发者了。)另外还有一些规则也不会与自由软件原则冲突,比如软件可以要求修改后的版本发布时需要附带相应的原版软件的代码。

有一些特例需要额外讨论:如果某软件许可证要求修改后的软件必须修改可执行文件的名字,那么必须保证软件运行的环境允许修改文件名或具备某种别名机制,否则该要求将被视作与自由软件原则相背。因为软件的可执行文件可能会被其他第三方软件调用,而文件名则是这种调用的基础。别名机制可以保证用户在遵守该要求的前提下,顺利将原版软件替换成修改版,并且不会影响依赖该软件的第三方程序。

出口条例

一些政府的出口限制或贸易制裁可能会影响到软件用户在国际范围内发布软件的自由。软件开发者也许没有能力去改变这些现实,但是我们可以拒绝自我审查。自由软件的开发者不得在软件许可证中要求用户遵守哪条特定法律,因为开发者无法保证用户所在国度或地区具备该法律条款。这样,自由软件许可证就不会给用户在法律之外添加额外的违反基本自由的限制。

当然,自由软件可以仅仅在许可证中提及某条出口条例或相关法律,而不强制要求用户遵守。这样做只是为用户提供了信息而没有实际限制用户。如果某条出口限制法律是普遍存在,全部用户所在的地区都做出该限制的,那么在许可证中要求用户遵守该条例也不会被视为限制用户的自由。然而,这会存在潜在问题:一旦该条出口限制法律在某个用户的所在地区做了修改,那么该许可证也就不被视作自由的。

要落实这些自由度,就应该保证:如果用户遵守许可证上的要求,那么这些自由度就必须是长久的,不可更改的。如果软件的开发者有权利随意修改已发布软件的许可证,那么该软件也不被视为自由软件。

自由软件许可证不得要求用户额外遵守哪些非自由软件的许可证。例如,自由软件许可证不得要求用户必须遵守“所有使用的软件的许可证”。因为用户可能使用非自由软件,而要求用户遵守全部使用的软件的许可证则意味着需要遵守非自由软件许可证,这样的要求将被视作非自由的。

自由软件许可证可以指定与软件相关的诉讼需要遵守哪个地区的法律,或需要在哪里提起诉讼。

基于合同的许可证

绝大部分自由软件许可证是基于版权的。基于版权,能采取的限制往往相对有限。如果一个许可证基于版权并且遵照上述的自由软件原则,那么它很可能被视作是自由软件许可证。当然,我们也见过一些例外,不过这些还很少见。然而有些自由软件许可证是基于合同的。合同可能会有更多的额外要求。这就意味着基于合同的许可证可能会在很多不经意的地方违背自由软件原则,导致软件不被视作自由软件。

很遗憾,我们无法列出所有可能的意外情况。如果一份基于合同的许可证对用户做出了一些额外限制,并且这些限制是不可能包含在一份基于版权的许可证中的,那么我们就需要再三考虑它是否可以被视作自由许可证。很多情况下,这些许可证都是非自由的。

自由软件定义的实际操作

我们如何诠释这些标准

最后请注意,在实践中,本文中提及的各种关于自由软件的界定标准都需要仔细思考后再做出解释。在决定一个软件许可证是否是自由软件的时候,我们会仔细查看该许可证的内涵和行文是否符合本文中涉及的原则,由此决定许可证是否为自由软件许可证。如果许可证中包含了一些不合理的限制,哪怕这些限制没有在本文中提及,我们也会拒绝承认它是自由的。有时候,某个许可证可能会引起一场大讨论,甚至需要专业律师参与。这时候,我们往往需要仔细定夺之后才能给出结论。遇到这样的许可证,在做出结论之后,我们很可能会更新本文,把之前没有考虑到的因素添加进来。

获得关于自由许可证的帮助

如果你想知道哪些许可证是自由软件许可证,可以参见我们的许可证列表。如果你关注的许可证没有在这个列表中提及,你也可以给我们发邮件来单独询问。我们的邮箱是:<licensing@gnu.org>

如果你打算起草一份新的自由软件许可证,那么请先不要给上述邮箱发邮件。希望您能先考虑联系自由软件基金会。太多的自由软件许可证会增加用户的选择难度,我们也许可以按照您的要求,帮您找到一份现有的许可证,而不必您亲自操刀起草一份新许可证。

如果您真的需要自己创造一个新许可证,那么我们会尽力帮助您。在我们的帮助下,我们会保证您的许可证是自由的,并且帮助您避免一些常见的问题。

在谈论自由软件时使用正确的词汇

在讨论自由软件的时候,尽量避免使用“赠送”或“免费”一类的词汇。因为这会让人们联想到价格,而非自由。一些常见的词汇,例如“盗版”,其中包含了或褒或贬的感情色彩,而这些感情体现的价值观并不被我们接受。参见歧义词汇列表,里面列举了我们不推荐使用的词汇以及相关的讨论。我们还有一个列表,包含了“自由软件”一词在不同语言中的推荐翻译。

现在还有另外一伙人,使用 “开源” 一词来表达与 “自由软件” 类似,但不完全相同的概念。我们更倾向于使用 “自由软件” 这个词。因为一旦你看到自由二字,就明白了它所要表达的意思。而 “开放” 却从来不意味着自由。

软件之外

基于同样的原则,自由软件的手册也必须是自由的,因为手册本身也应该被视作软件的一部分。

同理,相同的原则也适用于其他的具有实用功能的作品中——所谓实用功能的作品,是指作品中包含实用的知识,例如教育材料或参考材料。维基百科 就是其中一个广为人知的例子。

任何作品都可以是自由的,自由软件的定义也可以延伸到其他作品上。关于这方面的材料,请参见自由文化作品

本文修改历史

随着时间的发展,我们也在不断对本文做出改进。此处列出历次的主要改动,并给出链接,详细显示出哪里做出了修改。

  • 版本 1.169:更清楚地解释为什么四个自由必须对商业活动也适用。解释为什么四个自由隐含有不运行程序的自由和删除程序的自由,因此没有必要再单独陈述这些自由。
  • Version 1.165:澄清程序中的随意代码并没有否认用户的自由之零,进而自由之一和自由之三使用户可以克服这些随意代码。
  • Version 1.153:强调运行软件的自由是不能有任何情况来防止用户运行软件。
  • 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的描述中(如版本 1.80 所述),强调用户使用自己修改后的版本进行计算。
  • Version 1.92:阐明混淆(obfuscated)后的代码不被视作源代码。
  • Version 1.90:阐明自由度3是指用户有权利去发布自己的修改版本,而不是有权利参与别人的开发。
  • Version 1.89:自由度3包括了用户有权利以自由软件的形式发布修改后的版本。
  • Version 1.80:自由度1必须是可以实施的,而不仅仅停留在理论上,比如,不能是 tivoization。
  • 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日志

脚注

  1. 使用0、1、2和3排列这些自由有历史的原因。在1990年左右,列出来的自由是1、2和3。然后,我们意识到运行软件的自由也应该明确列出来。这个自由显然比另外3个自由更基本,所以应该列在前面。我们没有修改其他3个自由的序号,而是将运行软件的自由列为 0。