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 驱动的许可证。

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 及极端反企业组织放在另一边。这两个极端,都无法真正带来任何实质性的好处。

进一步阅读

最后更新于

这有帮助吗?