Links
Comment on page

GPL 之殇

在我之前的文章《为什么你应该将所有东西从 Linux 迁移到 BSD》中,我在“许可证问题”部分简要提及了 GPL 许可证的一个问题。之后我收到了一些电子邮件,要求我对这个问题进行更详细的阐述,所以我将在这篇文章中试着解释一下这个问题。

什么是 GPL?

GNU 通用公共许可证(GPL)的创建目的是成为标准专有许可协议的“对立面”。任何对 GPL 许可的软件所做的修改都要被回馈给 GPL 社区,并且任何使用或链接到 GPL 源代码的应用程序都必须在 GPL 下发布。
GPL 的主要目的是禁止将 GPL 许可的软件纳入专有软件中。
GPL 相当地复杂:
  • 你不能出售 GPL 许可的软件,但你可以对分发、支持或文档软件收取任意费用。
  • 如果一个程序编译需要 GPL 许可的源代码,那么该程序也必须在 GPL 下发布。静态链接到 GPL 库需要该程序也要遵循 GPL 许可。
  • 因为 Linux 内核是在 GPL 下许可的,任何与 Linux 内核静态链接的代码本身也必须是 GPL 许可的。通过动态链接可加载内核模块,可以避免这个要求。这允许公司分发二进制驱动程序,但缺点是它们只能用于特定版本的 Linux 内核。
由于 GPL 的复杂性,大部分地区对于 Linux 及相关软件的合法性被忽略了。

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

GPL 及其模仿者施加了一个限制:所有与 GNU 版权代码有关的衍生作品必须分发或公开源代码。
虽然这看起来是一种高尚的策略,但对于商业软件的商业使用来说,这通常是不可接受的条件。在实践中,这通常会阻碍自由共享和代码重用,而非促进。
其中一个问题是,当一家公司无法完全控制如何共享其代码时,它们要么不使用该软件,要么试图通过政治操纵“劫持”该项目,就像我们之前在 Red Hat 的情况中所见。
在 1990 年初,将专有应用程序放到 Linux 上的压力变得压倒性。这些应用程序通常必须链接到系统库。这种压力产生了一个修改版的 GPL,称为 LGPL(“Library”,现已更名为“Lesser” GPL)。LGPL 允许专有代码链接到 GNU C 库(glibc)。你无需发布与 LGPL 许可的库动态链接的源代码。另一方面,如果将一个应用程序静态链接到 glibc 中,在嵌入式系统中经常需要这样做,那么你就不能保持该应用程序的专有性,也就是说,源代码必须公开。
这种限制有时会让一家公司陷入困境。他们试图通过雇佣一个或多个开发人员来影响上游项目,然后试图影响该项目以实现符合公司需求的更改。一旦这种政治操纵开始,它通常就会对自由软件社区产生非常有害的影响,因为它并不会止步于此。
Red Hat 试图摆脱 Linux 上的 /etc 配置目录就是一个明显的例子。
Red Hat 之所以希望进行这种更改,是因为在他们专门为嵌入式市场提供的特定商业产品中,/etc 目录会带来麻烦。让 Linux 作为操作系统不依赖于 /etc 对于 Red Hat 非常重要,这也是为什么他们在 systemd-resolved 网络应用中硬编码了来自 Google、Cloudflare 和 Quad9 的 DNS 服务器,以便它可以在不需要在 /etc 中进行任何设置的情况下运行。这也是为什么他们试图改变用户主目录的工作方式,而 systemd-homed 是朝着这个方向迈出的第一步。摆脱 /etc/passwd 和相关文件目前是 Red Hat 的重点项目之一,因为这将更容易地实现摆脱其他 /etc 内容。
事实上,Red Hat 的公司利益正是 systemd 存在的最初原因。这也是为什么 systemd 不仅仅是一个 init 系统,而是成为一堆相互依赖的构建模块,以构建更符合他们嵌入式市场和其他市场份额利益的“操作系统”。
Red Hat 需要这些重大改变成为主要 Linux 发行版的一部分,以便所有第三方软件都能在这个设置上运行,而不是在当前的设置上,Red Hat 必须解决许多问题,这既耗时又困难。
正如我在我的文章《systemd 背后真正的动机》中已经解释过的那样,Red Hat 联系了几个第三方项目,试图说服它们依赖 systemd,例如 Lennart Poettering 在 Gnome 邮件列表上所做的尝试,以及 Red Hat 开发者“keszybz”在 tmux 项目上所做的尝试。尽管这些尝试往往伪装成技术问题,但当你阅读 Gnome 邮件列表和其他地方的长篇电子邮件通信时,真正的意图变得非常明确。
另一个例子是 Red Hat 购买了 Cygnus,这是一家接管了 FSF 编译器工具开发的工程公司。 Cygnus 采用了一种销售 GNU 软件支持的商业模式。这使得他们能够雇佣约 50 名工程师,并通过提供大量修改来推动程序的发展方向。
虽然 Linux 内核和 Linux 发行版过去主要是由社区驱动的项目,但一些大型公司的公司利益已经改变了这一点。有些贡献对社区有益,但许多操作可能不会,目前 Linux 作为一个操作系统(而不仅仅是内核)正在经历重大变化,这些变化远远超出了内核和 GNU 工具的范围。
这种“劫持”和政治操控在像 BSD 或 MIT 这样的宽松许可证下从不会发生。
在宽松许可证下,公司可以做任何他们想做的事情。这种情况永远不会发生,即公司开始“劫持”上游项目或直接影响它们的方向。
相反,从宽松许可证中受益的公司通常会向项目贡献代码,因为这符合他们的利益,让他们的贡献在源代码中可用,同时他们保留“特定公司相关”的私有更改。
Clang 是根据宽松许可证发布的,最初是在 2005 年由 Apple 发起的项目,这是另一个与 GPL 相关的问题的很好例子。GCC 根据 GPL 第 3 版许可,要求分发 GCC 的扩展或修改版本的开发者发布其源代码,而 LLVM 作为 clang 后端则有类 BSD 的许可证,没有这个要求。
正因为如此,Apple 选择从头开始开发一个新的编译器前端,支持 C、Objective-C 和 C ++。然后,clang 项目在 2007 年开源,现在对 LLVM 和 clang 进行改进和更改的贡献者包括多个自由软件项目,如所有的 BSD 项目,还有包括 Microsoft、Google、ARM、Sony、Intel 和 AMD 在内的主要公司。
由于 GCC 源代码对于开发人员来说是一个庞大且复杂的系统,并且因为公司经常开发特定的扩展,他们不希望分享,因此 GCC 现在正在慢慢被抛弃,没有受益于任何重大改进,而是一个真正的自由替代品正在慢慢代替它。

私有公司造成的损害

一些公司在使用宽松许可证构建软件时可能会进行改进,但却从未分享这些改进,甚至可能会因此赚取数十亿美元。但实际上,这对自由软件的损害微乎其微。
受损的是整个社会,比如 Microsoft、Apple 和 Google 通过其专有间谍操作系统、版权许可和恶意软件所造成的损害。
但这种损害与自由软件毫无关系。这种损害是资本主义政治体制的结果,只要政治体制偏向利润而不是人民,这种损害将永远存在。
当然,资本主义政治体制造成的损害不仅限于软件或自由,它的贪婪触角延伸到生活的各个角落,造成毁灭性后果。只需看看当前全球的环境危机!或者全球极端贫困的崛起!或者对动物的可怕虐待!一切都是以追求利润为名!
无论 GPL 还是更自由的软件许可证是否存在,这种贪婪和由此造成的损害将永远存在。关键在于,GPL 并没有起到任何帮助作用。无论使用什么软件许可证,损害都会发生,这是一个需要在政治舞台上解决的问题,而不是在软件开发领域。
值得注意的是,GPL 违规是一个普遍存在的问题。在世界各地,GPL 软件被视为“公有领域”,在许多情况下几乎没有实际影响。这就是为什么成立了 gpl-violations.org 项目
真正自由许可证的“灵魂”是鼓励合作,帮助人们,从而也帮助公司(因为公司由一群人共同合作构成),让他们认识到贪婪没有任何好处,与其让个别人口袋变得越来越鼓,不如分享和互相帮助。
当然,邪恶的个体将永远存在,有些人永远不会改进,但事实是我们无法通过使用 GPL 来防止任何损害,我们需要做的是教育人们,让他们做出更好的选择。政治家们也需要醒悟过来,他们的贪婪和腐败正在损害他们自己、家人和子孙的未来--甚至腐败的政治家自己也不例外会受到企业利益的剥削。
最终,世界各国政府将不得不因涉及的风险而被迫采用和实施真正自由的软件。没有任何一个国家可以相信其他国家开发的软件,除非源代码完全开放和真正自由,即使是来自盟国的软件!间谍和破坏基础设施的风险太大了!顺便说一下,对于封闭硬件也是如此!

不去分享实际上是问题的根源

世界上邪恶的根本原因是贫困。人们需要分享和互助,因为这不仅会消除或限制贫困,而且还会在社会中树立一个贪婪会变得非常糟糕的先例。
有些人认为他们拥有的财富是他们应得的。他们不想分享,因为为什么他们要分享?他们已经努力工作来获得他们的财富,其他人也可以做同样的事情。但这是错误的。
无论你相信巧合、运气还是上帝,事实是你的辛勤工作或聪明的商业策略并不是你财富的原因。而是远远超出你控制范围的情况。你成长的地方,成长的方式,你的父母是谁,你认识的人,这些不同情况下出现的机会实际上都是你成功或失败的主要因素。而这些事情都与你的个人行为无关。这些事情都远远超出了你的控制范围。事实上,你的辛勤工作几乎毫无作用。你可以更加努力地工作,更加聪明地经营,但是仅仅把你移动几英寸,结果就完全不同了,在一个地方取得的巨大成功在另一个地方可能会彻底失败。
而这些事情正是你需要分享的原因,无论是软件还是财富。因为这些情况与你无关,你的财富不是你的天才所积累的,绝不是,不帮助他人,把财富留在自己手中,你为他人树立了一个非常糟糕的榜样,这是所有这一切中最具破坏性的部分。通过不去分享,你向年轻人和其他人展示了为了变得富有,他们需要像你一样! 这导致更少的人分享,更少的人互相帮助,对我们整个人类来说,没有什么比贪婪更具破坏性了。
通过分享和互助,我们鼓励良好行为和良好关系,只要我们大多数人继续这样做,“作恶”最终不仅没有好处,而且对最终结果造成的损害是如此巨大,以至于你必须克制自己。
我们无法通过使用 GPL 来阻止软件世界或世界上的邪恶。像 Microsoft 这样的公司无论如何都会做恶。他们将开发自己的软件无论如何。阻止他们使用你特定的软件并不会改变任何事情,实际上往往做的更多的是伤害而不是帮助。但是通过大规模地做好事并教育人们,最终的结果将是没有人会从邪恶的公司购买任何东西。
目前只有少数人理解这一点,也只有少数项目以这种方式运作,这就是为什么这是一个如此缓慢的过程。但是 GPL 压根没有起到任何帮助,当贪婪的公司“劫持”项目时,它只会让事情变得更糟。只需看看企业对 systemd 的兴趣对像 Debian 项目这样的项目造成的损害,仅仅作为一个例子。

GPL 是虚伪的

众所周知,GNU 项目和自由软件基金会正在大力推广自由软件。在 FSF 的网站上,我们找到了关于“自由软件”的以下定义:
“自由软件”意味着尊重用户的自由和社区。粗略地说,这意味着用户有权运行、复制、分发、研究、改变和改进软件。因此,“自由软件”是关于自由而不是价格的问题。要理解这个概念,你应该将“自由”理解为“言论自由”,而不是“免费的啤酒”。我们有时将其称为“libre 软件”——借用法语或西班牙语中表示“自由”的单词,以表明我们的意思并非软件是免费的。
我们为这些自由而奔波,因为每个人都应该拥有它们。有了这些自由,用户(无论是个人还是集体)都可以控制程序及其对他们的作用。当用户无法控制程序时,我们称其为“非自由”或“专有”程序。
与此同时,GNU 项目和 FSF 背书并大量使用 GPL,根据上述定义,由于它限制了你对软件的使用,这在本质上是“非自由”的。我不是在谈论关于自由的哲学讨论,或者真正的自由是指能够无限制地行动,这不是这篇文章的重点。这是关于事实,即 GPL 与其创建的目的相矛盾。
GPL 所设立的限制本质上是非自由的,并且这不是从哲学的角度而是从真正的实施角度来看的。GPL 是导致许多采用宽松许可证发布的开源项目无法集成到 Linux 的根本原因。
这与宽松许可证相悖,在 OpenBSD 的目标网站上,它声明:
我们希望提供源代码,任何人都可以出于任何目的使用,没有限制。我们努力使我们的软件强大和安全,并鼓励公司使用他们想要的任何部分。

关于“Linux 窃取我们的代码”事件

以下是 OpenBSD 项目创始人 Theo de Raadt 在 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)的话:
“使用自由软件意味着做出一种政治和道德选择,主张学习的权利,并与他人分享我们所学到的知识。自由软件已成为一个学习社会的基础,在这个社会中,我们以一种他人可以建立和享受的方式分享我们的知识。”
目前,许多人使用剥夺用户这些自由和好处的专有软件。如果我们复制并将其给朋友,如果我们试图弄清楚程序的工作原理,如果我们在自己的家中的多台计算机上放置副本,我们可能会被抓住并罚款或入狱。这是你在使用专有软件时接受的许可协议的细则中所写的。
这是一个高度混乱的解释,其中存在几个矛盾之处。
我认为:不要使用阻止你将副本分享给朋友的专有软件。不要使用会监视你或限制你对硬件使用的专有软件。教育大众使用真正自由的软件,但不要做伪善,反对限制自由的许可证,同时限制真正的软件自由。

贪婪的人和政治腐败

我想我们都可以认同,人们通过构建软件来谋生并为家人解决温饱没有任何问题。我们不喜欢的是当人们,以及相应的公司,变得过于贪婪。
在 1969 年(我称之为腐败的)美国司法部指控 IBM 通过将免费软件与 IBM 硬件捆绑在一起来破坏其他企业。其结果是 IBM 解除了硬件和软件的捆绑,软件从硬件中独立出来成为独立于硬件的产品。在 1968 年,一家名为 Informatics 的公司推出了第一个商业软件应用,并设法确立了“软件产品”的概念和非常高的回报率。Informatics 开发了永久许可证,现在已成为计算机行业的标准,其中所有权永远不会转移给客户。
这就是问题的本质——贪婪!
认为当你购买某物时,它仍然不属于你,这与理性的基础相矛盾。这种自相矛盾的想法无论如何都不会被正常人接受,真的需要最高层次的腐败来接受这种胡说八道并通过法律来强制执行!这也是所谓的软件盗版永远不会停止的原因。分享和帮助同胞是人性的本质!只有最贪婪和腐败的人才会反对这一点。
这就是资本主义的核心问题,它完全是由金融利益驱动的!
尽管我们可以说 GPL 是基于人们普遍自私和邪恶的前提而创建的,他们永远不会出于原则和善意而回馈,但它并未解决问题,也无助于解决问题。我们需要的是一种许可证,基于人们通常是善良的,并且许多人会出于原则和善意而回馈。然后我们需要教育和树立良好的榜样,避免和回避贪婪,我坚信通过使用比 GPL 更宽松的许可证,我们将获得最佳结果。

最后一点评论

作为最后一点评论。我理解 GPL 的历史背景,我真诚而深刻地尊重 GPL 背后的原因。并不是我认为 GPL 是邪恶的,只是我认为它在当今的软件世界中造成的伤害比好处多。我还相信通过强制非自由的方式来鼓励自由和共享是行不通的,不论从哪个角度看,这都是一个双重标准。
我们还必须记住并关注这样一个事实,即公司由人组成,主要是人们在努力谋生。我们只真正与人打交道,而不是软件。
我还相信,理查德·斯托曼和极端的反公司组织的一些观点是极端和误导的,通过宣扬双重标准是永远无法影响到人们的。
我认为,我们可以将贪婪和极端公司放在一边,将理查德·斯托曼和极端反公司的组织放在另一边。这两个极端都不会对我们产生任何好处。
FreeBSD 中文社区