GPL 之殇

GNU 公共许可证(GPL)的诞生,正是为了与标准的专有许可证对抗。下面我们来看看 GPL 存在的一些问题。

什么是 GPL

GNU 通用公共许可证(GPL)是一系列软件许可证,用来“保证”最终用户拥有运行、研究、分发和修改软件的四项自由。

GPL 的主要目的,是禁止将基于 GPL 授权的软件纳入专有软件中。

一切对 GPL 授权软件所做的修改,都必须回馈给 GPL 社区;一切使用和链接了 GPL 源代码的应用程序,也必须遵循 GPL 授权。

GPL 相当复杂:

  • 你不能出售 GPL 授权的软件,但你可以对软件的分发、支持或文档收取任意费用。

  • 如果一款程序在编译时需要使用 GPL 授权的源代码,那么该程序也必须遵循 GPL。静态链接到 GPL 库的程序必须采用 GPL 授权。

由于 Linux 内核是基于 GPL 授权的,一切静态链接到 Linux 内核的代码也必须采用 GPL 授权。可以通过动态链接可加载内核模块来避免这一限制。这样公司就能分发二进制驱动程序,但缺点是它们仅适用于特定版本的 Linux 内核。

由于 GPL 的复杂性,其合法性在世界许多地区实际上被忽视了。

专有公司造成的损害

某些公司会改进开源软件,但从不共享这些改进;另一些公司则只是“利用”代码而不作任何修改,却可能从中赚取数百万美元。然而,这些行为并未真正损害自由软件。自由软件并不是为了赚钱而存在的,因此从这个意义上说,并没有什么损失。

真正受到损害的是整个社会。损害来自那些大型企业及其专有操作系统——它们不仅侵犯用户的自由(例如查看和修改源代码的自由、真正拥有应用程序的自由等),还侵犯了用户隐私,并限制使用权。此外,它们往往会添加恶意软件和间谍软件等。

无论是否存在 GPL 或其他自由软件许可证,贪婪始终在那。无论使用何种软件许可证,损害都会发生,而这一问题需要在政治层面上加以解决,而非软件开发领域。

同样值得指出的是,GPL 违规行为是个普遍存在的问题。世界各地都有把 GPL 软件当作“公共领域”对待的现象,在许多情况下,许可证几乎没能产生实际影响。这也是 gpl-violations.org 项目诞生的原因。

真正自由许可证的“灵魂”在于鼓励合作、帮助他人,从而也帮助那些由人组成、为了谋生而共同工作的公司。必须认识到,贪婪在实际上对任何人都没有好处,分享与互助要比让少数人的口袋越来越鼓更有意义。

当然,邪恶的人总是存在,有些人永远不会改变。但事实是,仅仅使用 GPL 并不能防止任何损害,我们真正需要做的,是教育人们,让他们能够做出更好的选择。

伪善

众所周知,GNU 项目自由软件基金会 (FSF) 为推广自由软件做了大量工作。在 FSF 网站上,我们可以看到关于“自由软件”的如下定义

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

我们支持软件用户的自由,因为我们坚信这是每个用户应得的。有了这些自由,软件用户,无论是个人还是集体,都可以掌控所运行的软件,并决定这些程序如何为自己服务。如果一个软件令用户失去了这种控制权,我们则称它为“非自由”的,或“专有”的程序。

然而,GNU 项目和 FSF 同时又大力推崇并广泛使用 GPL。根据上述定义,GPL 本身在某种意义上正是“非自由”的,因为它限制了用户对软件的使用方式。这里并不是在讨论哲学上的自由问题,也不是在讨论“真正的自由意味着没有限制”之类的抽象概念,而是指出:在实际执行层面上,GPL 违背了它最初要实现的目标。

GPL 所设下的各种限制,从实质上讲就是“不自由”。这并非哲学意义上的“非自由”,而是实践层面的。正因为这些限制,许多采用宽松许可证的开源项目无法被整合进 Linux。

这与一种宽松许可证形成鲜明对比。例如,OpenBSD 官方目标页面上写道:

我们希望提供让任何人都可以用于任何目的的源代码,不设任何限制。我们致力于让软件健壮、安全,并建议公司根据需要使用我们提供的任何内容。

关于“Linux 偷我们代码”的那回事

下面是一封 Theo de RaadtOpenBSD 项目的创始人)在 2007 年 8 月写下的邮件。当时,一群 Linux 开发者试图修改双重授权的 ath5k 驱动的许可证。

我在最近的争议中停止了公开发表声明,因为 Eben Moglen 开始在幕后努力“改进”Linux 人在许可证方面的错误,并要求我给他调停,以便他的团队可以工作。老实说,我对这种情况感到非常困扰,因为即使像 Alan Cox 这样的人也在给其他 Linux 开发人员提出违法建议。而且,不同社区之间的互动可能存在更大的潜在风险。

记录一下,我是正确的,Linux 开发人员不能以任何那些 diff 中提出的方式修改许可证,或者在那次对话中(<http://lkml.org/lkml/2007/8/28/157>)。

修改许可证是非法的,除非你是所有者或作者,因为它是一份法律文件。如果有多个所有者或作者,他们必须全都同意。收到双重许可证的人可以以任何一种方式使用该文件……但是,如果他们分发该文件(修改或未修改!),他们必须将其与现有许可证一起分发,因为我们所有人使用的许可证中都有声明,称许可证不得删除。

可能看起来许可证允许以任何一种许可证来“分发”它,但这种对许可证的解释是错误的——依然非法地拆分、切割或修改他人的法律文件,且不能被另一个许可证替换,因为它不能被删除。因此,双重许可证的文件在每次分发时始终保持双重许可证。

现在,我已经够善意,给了 Eben 和他的团队几天时间在 Linux 社区内部进行沟通,以说服他们所提出和讨论的东西在法律层面上是错误的。我认为 Eben 也同意我的看法,在伦理和社区层面上,这引起了严重的担忧(某种程度上,Linux 开发人员需要有一种共同的伦理与 *BSD 开发人员合作)。而且撰写应用程序的更大开源社区也可能面临类似问题。

到目前为止,Eben 还选择不发表公开声明,但由于时间正在消磨人们的记忆,我现在发表一个(声明)。而且,我觉得很多 Linux 的“重新许可”舆论攻击我非常不公平,所以我不会等 Eben 公开发表关于这个问题的声明。

在 <http://lkml.org/lkml/2007/8/29/183> 中,Alan Cox 成功地总结了 Jiri Slaby 和 Luis Rodriguez 试图通过修改未经所有作者同意的双许可证文件所提出的内容。Alan 问:“所以问题是什么?”嗯,Alan,我必须警告你——你的帖子正在建议人们违法。

我将尝试简单地描述,基于我所学到的知识,如何处理这样的许可证:

- 如果你收到双许可证的代码,你不能删除你不喜欢的许可证然后再分发它。它必须保留,因为你不能编辑他人的许可证——这是一份由三部分组成的法律文件(例如:版权声明、BSD 许可证,后跟 GPL)。
- 如果你收到 ISC 或 BSD 许可证的代码,你不能删除许可证。原理相同,因为声明是如此。这是法律。真的。
- 如果你向代码添加了“大量的原创内容”,这些内容本身在版权保护范围内,你可以选择在现有许可证上方放置一个不同且独立(必须不冲突……)的许可证。
  (警告:随着许可证组合意义的变得不那么明确——这也涉及道德陷阱)。
- 如果你希望每个人保持友好,你应该还代码。

这意味着(在某种伦理或友好的层面上),你可能不想在 BSD 或 ISC 文件的顶部放置 GPL,因为这将告诉编写 BSD 或 ISC 文件的人:

“感谢你写的东西,但这是单行道,你给我们代码,我们拿走,我们不给你任何东西。滚开。”

无论哪种情况,我认为在 BSD 世界中我们得到了一堂有价值的课——有很多很多喜欢 GPL 的人会尝试找到任何办法来不给予回馈和分享(我将提及一个名字:Luis Rodriguez 一直狂热地推动我们使用双许可证,我觉得他应该对这个特定问题负责)。许多同样的人多年来一直在说 BSD 代码可以被窃取,这就是为什么人们应该将代码 GPL 化。

好吧,他们真正教给我们的教训是,他们认为 GPL 是他们从我们这里拿走东西的最好工具!

GPL 的拥护者说,我们将面临的巨大问题是公司将拿走我们的 BSD 代码,对其进行修改,然后不给予回馈。不,我们面临

的真正问题是,人们将 GPL 包装在我们的代码周围,并以与这些所谓的公司相同的方式锁定我们。就像 Linux 社区一样,我们有许多公司一直在不断地给我们回馈代码。但是一旦代码被 GPL 化,我们就无法将其拿回。

这具有讽刺意味。

我希望 GPL 社区中的一些人能好好考虑一下。你的许可证可能对你有利,但你可能会失去所需的朋友。GPL 用户有机会“发展社区”,保持共享伦理活跃。

如果 Linux 开发人员在我们辛勤工作的代码周围加上 GPL,那肯定不会被视为社区发展。

感谢你考虑这个问题。

[我请求确保有个副本发到 Linux 内核邮件列表上]

GPL 偏离了初衷

当人们使用 GPL 时,他们大多是为了防止某些公司拿走他们的软件、进行改进或修改,然后将其作为专有产品出售。但他们真正想要达成的是什么呢?是为了与专有软件竞争吗?还是为了阻止别人谋生?如果是这样,他们算在做“自由软件”吗?

引用 Richard Stallman 的话:

使用自由软件意味着做出政治和伦理选择,主张学习的权利,并将我们所学分享给他人。自由软件已成为学习型社会的基础,我们以一种他人可以在其上继续建设和享受的方式分享知识。

目前,许多人使用的专有软件剥夺了用户这些自由和利益。如果我们复制软件并给朋友,如果我们尝试弄清楚程序如何工作,如果我们在自家多台电脑上安装同一份软件,我们可能会被罚款或监禁。这就是专有软件许可证条款中隐藏的内容。

这是一种高度复杂且存在若干矛盾的解释。

我认为应当做到:

  • 不使用妨碍你将其拷贝给朋友的专有软件。

  • 不使用监视你或限制你硬件使用的专有软件。

  • 教育大众使用真正的自由软件,但不要伪善——不要一边反对限制自由的许可证,一边又限制真正的软件自由。

GPL 鼓励“劫持”和政治操纵

GPL 的另一个问题是,当公司无法完全控制代码的共享方式时,它们要么不使用该软件,要么通过政治操纵或直接收购项目,努力“劫持”项目以满足自身利益。

在 1990 年代初,向 Linux 上引入专有应用的压力非常大。这类应用通常需要链接系统库。压力之大,导致出现了 GPL 的一个修改版本——LGPL(“Library”,后来称为 “Lesser”)。“Lesser GPL”能让专有代码链接到 GNU C 库(glibc)。通过动态链接 LGPL 授权的库,你无需公开源代码;但如果静态链接(嵌入应用中),通常在嵌入式系统中如需这么做,那么应用必须公开源代码,不能保持专有。

这些限制不仅损害了使用更开放许可证的项目(如 BSD 许可证),还会让公司处于困难境地。为了避免发布源代码,公司可能会通过雇佣上游开发者来影响项目,从而在上游实施有利于公司的修改。一旦这种政治操纵开始,往往会对自由软件社区产生负面影响。

systemd 背后的真实动机,以及将其整合到主要 Linux 发行版的努力,就是政治操纵的一个典型案例。这次操纵源于红帽(IBM)的商业利益,尤其是在嵌入式设备市场。比如,他们在 systemd-resolved 网络应用中硬编码了谷歌、Cloudflare 和 Quad9 的 DNS 服务器,使其无需在 /etc 中进行任何设置即可运行。红帽当前的重点之一是逐步淘汰 /etc/passwd 等文件,以便更容易移除 /etc 其他内容,这也是 systemd-homed 的目标所在。这也解释了为什么 systemd 不再只是一个 init 系统,而成为一个庞大且相互依赖的构建模块集合,用于构建“操作系统”。红帽需要这些重大变更,使其成为主流 Linux 发行版的一体化部分,从而让第三方软件能在此环境中运行,而无需为现有环境绕过大量问题,这既耗时又困难。

曾经,Linux 内核和发行版主要由社区驱动,但一些大公司的企业利益已经显著改变了这一格局。一些贡献确实对社区有益,但众多政治操纵对社区并无益处。目前 Linux(作为操作系统,而非仅内核)正在经历重大变革,其影响远超内核和 GNU 工具本身。

在宽松许可证下,公司能自由行动,很少会出现“劫持”上游项目的情况。即从宽松许可证中获益的公司通常会将代码贡献回项目,因为将贡献纳入源代码对他们有利,同时可以保持“公司特定”修改的私密性。

Clang,最初由苹果在 2005 年启动,采用宽松许可证发布。相比之下,GCC 使用 GPL 第三版,要求分发 GCC 扩展或修改版本的开发者必须公开源代码,而 LLVM(Clang 的后端)采用类似 BSD 的许可证,不受此限制。因此苹果选择从零开发新的编译器前端,以支持 C、Objective-C 和 C++。Clang 项目于 2007 年开源,现在对 LLVM 和 Clang 进行改进的贡献者包括多项自由软件项目(如所有 BSD 项目)以及主要公司,如微软、谷歌、ARM、索尼、英特尔和 AMD。

由于 GCC 源代码庞大且复杂,公司往往开发不愿共享的专有扩展,因此 GCC 正逐渐被放弃,未能从重大改进中受益;与此同时,一个真正自由的替代方案正在慢慢取代它。

那为什么公司使用 Linux 而不是 BSD?

首先,他们确实在使用 BSD,而且有些公司也在为 BSD 做贡献。

其次,Linux 只是一个内核,而不同的 BSD 系统是完整的操作系统。

1990 年,AT&T 因 BSD 相关的许可证问题起诉加州大学伯克利分校(UCB),这场诉讼后来被称为 Unix 战争。UCB 发现 AT&T 在其产品中未经承认或支付费用地使用了 BSD 的多项改进,由此引发了一场以 AT&T 与 UCB 为主的漫长诉讼。在此期间,一些 UCB 程序员开始重写与 BSD 相关的 AT&T 代码,这个项目最终产生了 BSD 4.4-lite 系统,并成为后续各 BSD 操作系统的基石。

1993 年 3 月,法院驳回了 AT&T 的大部分诉讼请求,但法律纠纷仍持续,当时加州大学提出反诉。直到 1994 年初,由于 Novell 已收购 Unix 权利,这些法律纠纷才通过和解完全解决。

这场法律风波给 BSD 操作系统的推广造成了阻碍,让人们对 BSD 的法律前景产生怀疑。因此,Linux 内核不仅获得了发展空间,还积累了庞大的用户群。

结语

我想大家都能认同,为了生计而开发软件、养家糊口没有错。我们不喜欢的是,当人和公司因此变得贪婪时的情况。

1969 年,美国司法部指控 IBM 通过将自由软件捆绑在 IBM 硬件中,破坏了其他企业。结果是 IBM 将软件从硬件中分离出来,使软件成为独立于硬件的产品。1968 年,一家公司名为 Informatics 推出了首个商业软件应用,并确立了“软件产品”的概念及高额回报率。Informatics 开发了永久许可证(perpetual license),这一模式现已成为计算机行业的标准,其中软件所有权从不转移给客户。

问题的核心——就是贪婪!

认为你购买了某样东西却依然不拥有它,这种想法本身就违反理性。它矛盾到常人无法接受,只有在最高层级存在腐败,才可能接受这种荒谬并通过法律强制执行。这也是为什么所谓的软件盗版永远无法根除,并且有人说:

如果购买不是拥有,那么盗版就不是偷窃!

我们可以说,GPL 是基于人性自私且邪恶、不会主动回馈除非被迫的假设而制定的,但它并没有真正解决问题,也没有带来帮助。我们真正需要的是:一种基于人性本善、很多人会因原则和善意回馈的许可证。然后,我们要教育大众、树立好榜样、避免并抵制贪婪。我坚信,使用比 GPL 更宽松的许可证,效果会更好。

最后补充一点,我理解 GPL 的历史背景及其制定原因,并对此深表尊重。我并不认为 GPL 是邪恶的,只是我认为它并未实现最初设定的目标,反而可能带来更多损害。我也不认为通过强制非自由可以鼓励自由与分享——这是双重标准。

我们必须记住,公司由人组成,这些人主要是为了生计而努力,我们面对的只是人,而不是软件本身。

我认为,我们可以把贪婪的公司放在一边,把 Richard Stallman 及极端反企业组织放在另一边。这两个极端,都无法真正带来任何实质性的好处。

进一步阅读

最后更新于

这有帮助吗?