自由 ≠ 免费,开源 ≠ 自由!
“自由软件”和“开源”基本上指的是同一范围的程序。然而,出于不同的价值观,他们对这些程序的看法大相径庭。自由软件运动为用户的计算自由而战斗;这是一个为自由和公正而战的运动。相反,开源理念重视的是实用优势而不是原则利害。自由软件社区因此不赞同开源运动,也不使用开源这个词。
自由软件
“自由软件”尊重用户的自由,并且尊重整个社区。粗略来讲,一个软件如果是自由软件,这意味着用户可以自由地运行,拷贝,分发,学习,修改并改进该软件。因此,“自由软件”是关乎自由的问题,与价格无关。要理解这个概念,你要按照 Free Software 中的 “Free” 是指“自由言论(free speech)”中的自由,而非“免费午餐(free lunch)”的免费这一意项。为避免歧义,在使用英文时,也会借用法语或西班牙语的 “Libre Software” 来指自由软件,这样可以明确表示自由软件说得不是免费。
你可能花钱购买了自由软件的拷贝,也可能免费拿到。但是无论你如何获得你的拷贝,你都有自由复制和修改该软件,乃至出售[1]该软件的拷贝。
自由软件定义
如果一个软件是自由软件,那么它必须为用户提供以下四项基本自由:
Freedom 0:自由度 0,无论用户出于何种目的,必须可以按照用户意愿,自由地运行该软件。
Freedom 1:自由度 1,用户可以自由地学习并修改该软件,以此来帮助用户完成用户自己的计算。作为前提,用户必须可以访问到该软件的源代码。
Freedom 2:自由度 2,用户可以自由地分发该软件的拷贝,这样就可以助人。
Freedom 3:自由度 3,用户可以自由地分发该软件修改后的拷贝。借此,用户可以把改进后的软件分享给整个社区令他人也从中受益。作为前提,用户必须可以访问到该软件的源代码。
使用 0、1、2 和 3 排列这些自由有历史的原因。在 1990 年左右,列出来的自由是 1、2 和 3。后来意识到运行软件的自由也应该明确列出来。这个自由显然比另外 3 个自由更基本,所以应该列在前面。社区没有修改其他 3 个自由的序号,而是将运行软件的自由列为 0。
无论在什么情况下,只有所有用户使用的代码都满足了这四项基本自由,该程序才能被视作自由软件。否则,它就是非自由的。(例如:有两个程序,甲程序运行的时候会自动调用乙程序。发布甲程序意味着用户必须使用到乙程序,那么必须甲乙两个程序都是自由的,甲程序才是自由的。如果通过修改甲程序,使其不再依赖乙程序,那么仅仅以自由软件的形式发布甲程序即可。)
关于自由
在英语中,“自由软件”即 Free Software,这个词很容易被误解:Free 一词既有免费的意思,也有自由的意思。要说一个软件是“自由”的,这意味着它尊重用户的基本自由[2]:自由地运行这个软件,学习和修改它,以及重新发布它的原版或修改版。这是个关于自由权利的问题,而非价格高低。这里讨论的自由是如同自由言论般的权利,不是免费赠饮一样的大派送。
这些自由是至关重要的。之所以说它们重要,不仅仅因为它们可以讨好哪个用户,更是由于它们维系着整个社会的凝聚力(具体说来,就是分享与协作的精神)。随着我们的生活与文化日渐数字化,这样的自由精神也随之越来越可贵。在一个充斥着数字化音像与文字的世界中,自由软件日益重要,它本身已经成为关乎着我们基本自由的因素之一。
从 1983 年起,以维护计算机用户自由之名兴起了自由软件运动。在 1984 年,发起了开发自由操作系统的计划,并将此系统命名为 GNU[3]。借此系统,就不必依赖非自由的操作系统,不再坐视它们肆意剥夺用户的自由。在二十世纪八十年代,开发了系统的绝大多数组件。为了保护用户的自由,设计了 GNU 通用公共许可证[4](GNU GPL),并以该许可证发行大部分组件。
并非全部的自由软件用户和开发者都赞同自由软件运动的目标。1998年,自由软件阵营中的部分成员分裂出来,并以“开源”为名继续开展活动。一开始,由于“自由软件”(free software)一词可能引起歧义,这才提出开源这个说法。但是很快开源这词便开始异化,使得其背后的逻辑与自由软件运动的初衷相去甚远。
一些开源的支持者会认为,所谓开源,无非是用来“为自由软件做市场营销”的。具体说来,就是向那些商界人士展现自由软件的实际好处。同时避免谈及什么对错正误,因为商业大佬们普遍不太喜欢这调调。还有一些开源的支持者干脆就抛弃自由软件的道德观和社会价值。无论他们持哪种观点,一旦他们开始为开源营销的时候,自由软件运动所珍视的那些价值观就被抛诸脑后。于是,“开源”一词很快就单纯地和各种实用主义的价值观联系起来。比如说怎么能创造一个强大、稳定的软件。很多开源支持者从一开始就把这些价值观推崇至极,也难怪局外人会有如此联系。大多数“开源”的讨论都绝口不谈是非对错,而只是讨论流行与成功;请看一个具体的实例[5]。现在,少数开源的支持者也把自由作为一个问题来讨论,但是他们的影响好似沧海一粟。
开源软件和自由软件这两个词在很大程度上描述的是同一类软件,但是它们所基于的价值观却有着本质上的区别。对于自由软件运动而言,自由软件是一个道德底线,是对用户自由的基本尊重。开源软件则与此不同,开源哲学考虑的是怎么做把软件做得“更好”—仅仅从实用的角度。开源的哲学里,非自由软件之所以不好,是因为他们采用了一种劣等的开发方式。开源的支持者们把一个个用户拉入他们的阵营,而提醒用户维护自由的任务,则落到了自由软件支持者们的肩膀上(每当你把“开源软件”一词替换成“自由软件”的时候,你就是在支持自由软件的理念
)。
然而,对自由软件运动来说,非自由软件是一个社会问题,其解决方法是停止使用非自由软件并开始使用自由软件。
参考:
什么是自由软件?[6]
为什么开源错失了自由软件的重点[7]
开源定义
开源不仅仅意味着可以访问源代码。开源软件的分发条款必须符合以下标准:
1. 自由再分发
许可证不应限制任何一方将软件作为包含来自多个不同来源的程序的聚合软件分发进行销售或赠送。许可证不应要求出售费或其他费用。
2. 源代码
程序必须包含源代码,并且必须允许在源代码和编译形式下进行分发。如果某种形式的产品未与源代码一起分发,则必须有一种公开宣传的方法,可以获得源代码,而且不得超过合理的复制成本,最好是通过互联网免费下载。源代码必须是程序员修改程序的首选形式。不允许故意混淆的源代码。不允许中间形式,例如预处理器或翻译器的输出。
3. 衍生作品
许可证必须允许修改和衍生作品,并且必须允许按照原始软件的许可证将其分发。
4. 保持作者源代码的完整性
许可证可以限制仅以修改形式分发源代码,但是该许可证必须允许使用“补丁文件”分发源代码,以便在构建时修改程序。该许可证必须明确允许分发从修改的源代码构建的软件。该许可证可以要求衍生作品使用不同的名称或版本号。
5. 不歧视个人或群体
该许可证不得歧视任何个人或群体。
6. 不歧视努力领域
该许可证不得限制任何人在特定努力领域中使用该程序。例如,它不能限制将该程序用于商业或用于基因研究。
7. 发行许可证
与该程序重新分发的所有方都应享有相应权利,无需这些方执行其他许可证。
8. 许可证不得特定于产品
程序所附权利不得取决于该程序是特定软件分发的一部分。如果该程序从该分发中提取并在许可证条款内使用或分发,则所有该程序重新分发的方都应享有与原始软件分发相同的权利。
9. 许可证不得限制其他软件
许可证不得对与所许可的软件一起分发的其他软件施加限制。例如,许可证不得要求同一介质上分发的所有其他程序都必须是开源软件。
10. 许可证必须技术中立
许可证的任何条款都不得基于任何个别技术或界面样式。
查看原文:The Open Source Definition[8]
开放源代码定义最初是基于 Debian 自由软件准则(DFSG)[9]制定的。
版本 1.9,最后修改于 2007 年 3 月 22 日。
References
出售: https://www.gnu.org/philosophy/selling.html
[2]用户的基本自由: https://www.gnu.org/philosophy/free-sw.html
[3]GNU: https://www.gnu.org
[4]GNU 通用公共许可证: https://www.gnu.org/licenses/gpl.html
[5]一个具体的实例: https://www.linuxinsider.com/story/Open-Source-Is-Woven-Into-the-Latest-Hottest-Trends-78937.html
[6]什么是自由软件?: https://www.gnu.org/philosophy/free-sw.zh-cn.html
[7]为什么开源错失了自由软件的重点: https://www.gnu.org/philosophy/open-source-misses-the-point.html
[8]The Open Source Definition: https://opensource.org/osd
[9]Debian 自由软件准则(DFSG): https://www.debian.org/social_contract#guidelines