1.2 GNU 操作系统和自由软件运动
GNU 操作系统与自由软件运动
要理解 GNU 与自由软件运动,可以从 Linux 内核文档的相关内容入手。根据 Linux Kernel Documentation. 1. Introduction — The Linux Kernel documentation[EB/OL]. [2026-03-26]. https://www.kernel.org/doc/html/latest/process/1.Intro.html.(另见 Linux Kernel Documentation. Linux kernel licensing rules — The Linux Kernel documentation[EB/OL]. [2026-03-26]. https://www.kernel.org/doc/html/latest/process/license-rules.html.):
Code is contributed to the Linux kernel under a number of licenses, but all code must be compatible with version 2 of the GNU General Public License (GPLv2), which is the license covering the kernel distribution as a whole. In practice, that means that all code contributions are covered either by GPLv2 (with, optionally, language allowing distribution under later versions of the GPL) or the three-clause BSD license. Any contributions which are not covered by a compatible license will not be accepted into the kernel.(Linux 内核中的代码是在多种许可证之下被贡献的,但所有代码都必须与 GNU 通用公共许可证第 2 版(GPLv2)兼容,而该许可证覆盖了所有内核发行文件。实际上,这意味着所有对代码的贡献要么受 GPLv2 约束(可选地包含允许在 GPL 后续版本下发布的条款),要么受三条款 BSD 许可证约束。任何未被兼容许可证覆盖的贡献都不会被接纳进内核)
了解 GPL 许可证的历史背景有助于理解其设计初衷。
UNIX 在后期发展中逐渐呈现封闭化趋势:从最初开放的研究项目转变为商业产品,普通用户无法自由获取和修改其源代码,许可证价格高昂且使用权受到商业公司的严格限制。理查德·马修·斯托曼(Richard Matthew Stallman,RMS)希望创造一款自由且与 UNIX 兼容的操作系统,这一愿景直接触发了自由软件运动的兴起。
1983 年,RMS 发表 GNU 项目初始公告;1985 年,RMS 撰写了 GNU 宣言(Stallman R. The GNU Manifesto[EB/OL]. [2026-03-26]. https://www.gnu.org/gnu/manifesto.html.)其中 GNU 即“GNU's Not Unix”(GNU 不是 Unix)的递归缩写。GNU 是一款旨在完全替代 UNIX 的操作系统。
1984 年,创建 GNU 项目。
1985 年,RMS 创建自由软件基金会(Free Software Foundation,FSF)。
1989 年,FSF 发布 GPLv1。
1991 年,FSF 发布 GPLv2。
2007 年,FSF 发布 GPLv3。
在项目初期,RMS 为 UNIX 开发了大量实用程序(用户空间组件),然而 GNU 的目标操作系统始终未能形成一个稳定的内核。GNU Hurd 是 GNU 项目的内核,采用微内核架构设计,其开发始于 1990 年。即使到 2026 年,GNU Hurd 项目仍处于未完成状态。Linux 内核的诞生打破了这一技术僵局。
Linux 作为一个由 Linux 内核与 GNU 软件组合而成的操作系统,在发展过程中不断融入 GNU 理念,最终形成了 GNU/Linux。尽管 GNU 在此过程中贡献巨大,其作用却常被忽视。这主要是因为 Linux 内核的开发由林纳斯·托瓦兹(Linus Torvalds)主导,而他本人对自由软件基金会(FSF)和理查德·马修·斯托曼(RMS)的理念并不完全认同。因此,Linux 内核项目与自由软件运动乃至严格的开源理念之间,存在一定的分歧(例如,Linux 内核包含了一些不符合自由软件或严格开源定义的二进制固件模块,参见 Linux-libre,一款由拉丁美洲自由软件基金会(FSFLA)维护的去除所有二进制固件的 Linux 内核变体 Linux-libre[EB/OL]. [2026-03-26]. https://www.fsfla.org/ikiwiki/selibre/linux-libre/)此外,Linux 内核采用的是 GPLv2 许可证,而非 GNU 所推荐的 GPLv3。
Linux 诞生之前的这段时期通常被称为“自由软件运动”(代表人物为 RMS)。Linux 的流行促成了另一种理念的兴起,即“开源运动”——代表人物包括开放源代码促进会(Open Source Initiative,OSI)的创始人、《UNIX 编程艺术》与《大教堂与集市》的作者埃里克·斯蒂芬·雷蒙德(Eric S. Raymond),以及 Debian 项目前领导人布鲁斯·佩伦斯(Bruce Perens)。值得思考的是,下文提及的开源定义源自 Debian 自由软件指导方针(Debian Free Software Guidelines,DFSG)。
自由软件运动并未停止,但公众对开源的误解却日益加深。
自由软件运动与开源运动之间的张力
自由软件运动与开源运动之间存在一定的理念差异。RMS 在私人通信中强调,GNU 与自由软件运动并不强调“开源”(甚至是反对使用这一术语),而是强调“Free”所代表的自由。有些人可能认为“开源”仅仅是由 OSI 定义(Open Source Initiative. The Open Source Definition[EB/OL]. (2024-02-16)[2026-03-26]. https://opensource.org/osd)的那样,这是一种不全面的观点。
以下为私人通信引用,不涉及隐私话题。
致所有阅读我邮件的美国国家安全局(National Security Agency,NSA)和联邦调查局(Federal Bureau of Investigation,FBI)特工:请考虑一下,捍卫美国宪法以抵御一切敌人,无论是外国的还是本国的,是否需要你效仿爱德华·斯诺登(Edward Snowden)的做法。
但是我有点困惑:GNU 项目是否强制要求开发必须开源?因为 GNU 通用公共许可证(GPL)强制开源。
GNU 项目并不倡导“开源”。我们从不用这个词,除非是为了表达与它的分歧。我们代表的是自由软件(Free Software)——自由如同自由的言论。我们致力于在计算中为用户争取自由。
请参见:free-software-even-more-important[EB/OL]. [2026-03-26]. https://gnu.org/philosophy/free-software-even-more-important.html
“开源”这个词是一些反对自由软件运动的人发明的——他们与我们意见相左。他们想谈论同样的软件,却又掩盖自由的理念。
关于自由软件与开源的区别,请参见:open-source-misses-the-point[EB/OL]. [2026-03-26]. https://gnu.org/philosophy/open-source-misses-the-point.html
另请阅读叶夫根尼·莫罗佐夫(Evgeny Morozov)的文章:https://thebaffler.com/salvos/the-meme-hustler,他在文中也探讨了这一点。
所以请不要问我们关于“开源”或“开放”某些东西的问题。我们不是那样思考的。你真正应该问我们的是:我们如何以自由软件的方式做事情。
它属于 GNU 项目,那么 GNU 项目是否也会强制他人……
我不太确定你所说的“强制”是什么意思,这里可能存在误解。通常我们会告诉人们我们认为什么是对的,什么是错的,但我们无法命令他们做什么。
唯一的例外是他们使用了 GPL 许可的软件代码。在这种情况下,GNU GPL 本身是一种法律上的约束,规定了他们如何使用这些代码。它要求他们在再发布代码时,尊重其他用户的自由。
这正是著佐权(Copyleft)的意义所在。
如果你还有更多问题,请写信至 [email protected]。
附录:自由软件与开源软件的常见误解辨析
在讨论自由软件与开源软件时,常常会出现各种误解和混淆。首先需要明确自由软件和开源协议的定义,这里引用自由软件基金会. 什么是自由软件?[EB/OL]. [2026-03-26]. https://www.gnu.org/philosophy/free-sw.zh-cn.html. 的相关内容来定义自由软件的自由。
厘清“营利”和“盈利”
这两个词语的含义和用法都不同。
“盈利”:名词,扣除成本后获得的利润,也作赢利。引自中国社会科学院语言研究所词典编辑室. 现代汉语词典[M]. 第 7 版. 北京:商务印书馆, 2016:1572. ISBN: 978-7-100-12450-8.
“营利”:动词,谋求利润。引自中国社会科学院语言研究所词典编辑室. 现代汉语词典[M]. 第 7 版. 北京:商务印书馆, 2016:1572. ISBN: 978-7-100-12450-8.
自由软件定义:四项基本自由
如果一款软件是自由软件,那么它必须为用户提供以下四项基本自由:
自由度 0:无论用户出于何种目的,必须可以按照用户意愿,自由地运行该软件。
自由度 1:用户可以自由地学习并修改该软件,以此来帮助用户完成用户自己的计算。作为前提,用户必须可以访问到该软件的源代码。
自由度 2:用户可以自由地分发该软件的拷贝,这样就可以助人。
自由度 3:用户可以自由地分发该软件修改后的拷贝。借此,用户可以将改进后的软件分享给整个社区,令他人也从中受益。作为前提,用户必须可以访问到该软件的源代码。
即:“用户可以自由地运行、复制、分发、学习、修改并改进该软件。”
推论 1:如果商业用户为了营利(自由度 0)而修改(自由度 1)再分发(自由度 2),只要修改后仍然开源(自由度 3),商业用户的行为是完全合规的。这说明他们完全有权自由使用、修改、分发及通过该软件营利。任何自由度均未限制 营利 行为。引证 1:自由软件可以是商业软件。
开源协议定义与开源软件定义
为了坚持开源定义(Open Source Definition,OSD),并防范开源运动原则的滥用而成立的开放源代码促进会(OSI)对开源协议是这么定义的(基于 Debian. Debian Social Contract[EB/OL]. (2022-10-01)[2026-03-26]. https://www.debian.org/social_contract#guidelines. DFSG),开源软件的分发条款必须符合以下核心标准:
自由再分发:许可证不得限制任何一方出售或赠送该软件,不得要求对此类销售收取版税或其他费用。
源代码:程序必须包含源代码,并允许以源代码以及编译形式分发。
衍生作品:许可证必须允许修改和衍生作品,并允许按照与原始软件许可证相同的条款进行分发。
作者源代码的完整性:许可证可以限制以修改形式分发源代码,仅当允许分发带有源代码的“补丁文件”。
不得歧视个人或群体:许可证不得歧视任何个人或群体。
不得歧视应用领域:许可证不得限制任何人在特定应用领域中使用该程序。
许可证的分发:附加到程序的权利必须适用于所有重新分发程序的人。
许可证不得特定于产品:附加到程序的权利不得取决于程序是否为特定软件分发包的一部分。
许可证不得限制其他软件:许可证不得对与许可软件一起分发的其他软件施加限制。
许可证必须保持技术中立:许可证的任何条款都不得基于任何个人技术或界面风格。
OSI 基于开源定义(OSD)的开放认证许可证,已成为全球公认的开放软件判定标准,并通过国际组织、产业界与政府政策的采纳而确立其权威性。参见 Open Source Initiative. International Authority & Recognition - Open Source Initiative[EB/OL]. (2025-06-03)[2026-03-26]. https://opensource.org/about/authority.
受 OSI 认可的开源协议有:Open Source Initiative. Licenses - Open Source Initiative[EB/OL]. [2026-03-26]. https://opensource.org/licenses. 严格意义上讲,只有列表中的许可证才属于开源许可证。
关于各种软件的定义
根据自由软件基金会. 自由与非自由软件的分类[EB/OL]. (2025-12-28)[2026-03-26]. https://www.gnu.org/philosophy/categories.zh-cn.html. 我们定义如下:
自由软件:符合上述四项基本自由定义的软件即称为自由软件。推论:商业软件可以是自由软件,商业不等于非自由。引证 1:自由软件基金会. 什么是自由软件?[EB/OL]. [2026-03-26]. https://www.gnu.org/philosophy/free-sw.zh-cn.html. 引证 2:Free Software Foundation. Words to Avoid (or Use with Care) Because They Are Loaded or Confusing[EB/OL]. [2026-03-26]. https://www.gnu.org/philosophy/words-to-avoid.html. “Commercial”部分。
开源软件:使用上述开源协议授权的软件。所有自由软件都是开源软件,但是所有开源软件不一定是自由软件。二者的定义和理念都有一定的差异。自由软件是开源软件的充分不必要条件。
专有软件/私有软件(Proprietary Software):即真正意义上的“非自由软件”,大部分商业软件属此类型。这是 GNU 宣言最初的目标。
免费软件:定义模糊。其他类别的软件均可能是“免费”的,但并不一定。
商业软件:商业软件是由企业作为其业务的一部分所开发的软件。
推论
推论 1:商业软件可以是开源软件或自由软件。反之,开源软件或自由软件也可以是商业软件。
推论 2:商业软件形式的开源软件或自由软件可以营利(无论项目作者是否参与此商业软件),且合规。例如,常见的行为是电商平台商户利用开源许可的软件营利。在遵守许可的前提下,此类营利是合乎伦理的。现实中对此类商家的指责,多源于公众对所采用的开源协议缺乏理解。
推论 3:商业软件不一定是私有软件或专有软件。反之,私有软件或专有软件也不一定是商业软件(如将个人项目无营利目的地闭源分发给朋友)。
自由/开源软件与免费
根据“自由度 2:用户可以自由地分发该软件的拷贝”,事实上只要阅读过 GPLv2/v3 等相关开源协议,就会知道协议并未限制开源软件的营利行为。红帽公司(Red Hat)就是一个典型的例子。
开源软件/自由软件不等于免费。
开源不等于无版权
很多人会混淆开源与无版权,认为开源即无版权。这种想法在实际中存在逻辑问题:如果不持有版权,便无法要求他人遵守开源协议。部分人会将版权转交给 FSF,但版权在事实上依然存在。
在司法实践中,许多开源软件项目作者仍然被追究了法律责任。如果是无版权,则无法确定责任主体。
在各国版权法中,版权的所有权利通常不可完全转让,只能让渡部分权利。以《中华人民共和国著作权法》为例,发表权、署名权、修改权、保护作品完整权等权利是无法让渡的。
在实例中,作者通常不受开源协议本身的限制(除非引用了他人的项目),协议是用来约束他人的。
CC-BY-NC 与 CC-BY-ND 既不自由也不开源
根据各类许可证及其评论(自由软件基金会. 自由与非自由软件的分类[EB/OL]. [2026-03-26]. https://www.gnu.org/philosophy/categories.zh-cn.html.),结合 Open Source Initiative. Licenses - Open Source Initiative[EB/OL]. [2026-03-26]. https://opensource.org/licenses. 知识共享署名-非商业性使用协议(Creative Commons Attribution-NonCommercial,CC-BY-NC)与知识共享署名-禁止演绎协议(Creative Commons Attribution-NoDerivs,CC-BY-ND)等均不属于开源软件许可证或自由软件许可证。
原因在于,上述协议限制了商业用户的使用,剥夺了商业用户的“自由”。此外,前述 CC 协议也不符合自由软件精神,其要求的冗长署名与声明增加了项目复用时的合规成本。
可以获取源代码不等于开源或自由
根据微软(Microsoft)的企业源代码许可计划(Enterprise Source Licensing Program,ESLP)或微软参考源代码许可证(Microsoft Reference Source License,Ms-RSL),商业用户在满足一定条件后即可获取对应的源代码。
虽然可以获取源代码,且在某些情况下允许修改(如神州网信政府版 Windows 10),但此类协议并不属于开源协议。本质上,CC-BY-NC 与 CC-BY-ND 与此类许可协议并无根本区别。
课后习题
查找 GNU Hurd 项目的源代码与构建指南,尝试在 QEMU 中启动一个基本的 GNU Hurd 系统,记录其启动流程与 Linux 的差异。
最后更新于