开源软件历史:从GPL到SSPL的许可证演变
从家酿计算机俱乐部、1976年《致业余爱好者的公开信》到GPL、1998年更名和SSPL,了解许可证如何塑造今天的自托管软件。
开源软件是什么,以及它的起源
开源软件的历史主要也是许可证的历史,因为许可证是唯一决定您可以如何使用他人编写的代码的文件。在有人将这些许可证正式写下来之前,代码早已被公开共享。代码成为产品后,公开共享就停止了;人们制定许可证,是为了让共享行为在法庭上具备法律效力。
这是简短版本。详细了解这段历史仍然很重要,因为您如今在服务器上运行的软件,依然带有这些决策留下的痕迹。其中一些决策制定于 1983 年。另一些制定于去年,它们导致我们的自托管指南中有些应用现在分别提供两个名称不同的版本。
软件在销售前可以自由共享
在 1950 年代和 1960 年代,软件随机器一起提供。IBM 随系统提供源代码,SHARE 等用户组则通过磁带相互分发程序。后来有两件事改变了这一情况。IBM 在 1969 年宣布将软件与硬件分开定价,由此形成了独立的软件市场。随后,法律也作出了相应调整。1980 年《计算机软件版权法》确认,程序在美国属于可受版权保护的作品。1980 年之后,默认情况下,您编写之外的代码都是闭源的,因此共享这些代码需要获得作者的书面许可。
家酿计算机俱乐部与《致业余爱好者的公开信》
家酿计算机俱乐部于1975年3月在加利福尼亚州门洛帕克的一间车库里举行了第一次会议。成员带来了硬件和纸带,复制软件也是会议的一部分。Bill Gates 和 Paul Allen 编写的 Altair BASIC 在房间里通过复制的纸带传阅。1976年2月,Gates 在俱乐部的时事通讯中发表了《致业余爱好者的公开信》。
正如大多数业余爱好者都应该知道的那样,你们中的大多数人都在盗用软件。
他写道,购买 BASIC 的 Altair 用户不足十分之一,而编写该软件所使用的计算机时间价值超过40,000美元。现代关于软件的争论,在这封信中已经完整呈现。复制软件不需要成本,并且能帮助所有进行复制的人。但编写软件仍然耗费了某个人一年的时间。下文介绍的每种许可证,都是试图同时回应这两个事实。
1983 年的 GNU 与作为法律创制的 GPL
Richard Stallman 于 1983 年 9 月在 Usenet 上宣布了 GNU。Usenet 是人们在 Web 出现之前使用的新闻组网络。GNU 代表“GNU's Not Unix”。该计划是构建一个完整且兼容 Unix 的系统,任何人都可以复制和修改它。
自今年感恩节开始,我将编写一个名为 GNU(即 Gnu's Not Unix)的完整 Unix 兼容软件系统,并将其免费提供给所有能够使用它的人。
自由软件基金会(FSF)于 1985 年成立。其《自由软件定义》列出了四项自由,编号从零开始:出于任何目的运行程序、研究和修改程序、重新发布副本,以及发布修改后的版本。自由 1 要求提供源代码,因为实际上没有人能够以实用方式研究二进制文件。这里的“自由”指的是 freedom,而不是价格。FSF 自己的表述是“言论自由意义上的 free”,而不是“免费啤酒意义上的 free”。
宣言不是创制。许可证才是。GNU 通用公共许可证(GPL)利用著作权要求共享,而不是利用著作权阻止共享。您获得这四项自由的条件是:您将软件传给的任何人也必须获得这些自由,并同时获得源代码。Stallman 将此称为 copyleft。它最初于 1985 年随 GNU Emacs 发布,1989 年成为 GPL version 1,并于 1991 年 6 月发布 version 2。
GPL 之所以有效,是因为它建立在著作权法之上,而不是对抗著作权法。没有许可证,您根本无权分发他人的代码。GPL 授予您这一权利,同时附加相应条件。因此,某个厂商将修改后的 GPL 代码随路由器一起发布,却拒绝提供源代码时,并不是违背了承诺,而是侵犯了著作权,著作权人可以将其诉诸法院。这正是 GPL 能够得到执行的原因。从 Harald Welte 在 2000 年代处理的 gpl-violations.org 案件,到 Software Freedom Conservancy 于 2021 年提起的针对 Vizio 的诉讼,都体现了这一点。后者主张,购买电视的用户也可以要求获得源代码。
Linux 完成了整个系统
到 1991 年,GNU 项目已经拥有编译器、C 库、shell 和大多数工具,但还没有可用的内核,因为 GNU 自己的内核 Hurd 的开发耗时远超计划。1991 年 8 月,一名赫尔辛基的学生在 comp.os.minix 新闻组发帖:
我正在开发一个(免费的)操作系统(只是个业余项目,不会像 GNU 那样庞大且专业),用于 386(486) AT 兼容机。
Linux 0.01 于 1991 年 9 月发布,使用的是 Linus Torvalds 自行编写的许可证,该许可证禁止销售 Linux。1992 年初,他将其改为 GPLv2,此后表示这是他做出的最佳决定之一。正是这一许可证让企业能够放心参与贡献:企业可以安排工程师参与内核开发,同时确保竞争对手不能将这些改进据为己有。
Berkeley 当时已经有一个自由 Unix。Linux 而不是 BSD(Berkeley Software Distribution,伯克利软件发行版)成为默认的自由 Unix,部分原因在于一场诉讼。Unix System Laboratories 于 1992 年起诉 Berkeley Software Design,案件一直持续到 1994 年初。在这两年中,BSD 系统面临法律风险,而 Linux 没有,因此用户就在这一时期开始转向 Linux。FSF 要求人们将这一完整系统称为 GNU/Linux,因为 Linux 是内核,而周边的大多数工具来自 GNU。大多数人称其为 Linux。两个名称都指向同一套软件。
1998:开源品牌重塑,以及始终未愈合的分歧
1998 年 1 月,Netscape 宣布将发布其浏览器的源代码。这是当时规模最大的、准备这样做的公司,也由此暴露出一个实际问题。“free software”在英语中的字面意思是“不收费的软件”,而企业高管听到的正是这个意思。1998 年 2 月,一群人在 Palo Alto 会面,试图找到更合适的术语。Christine Peterson 提出了“open source”。几周内,Eric Raymond 和 Bruce Perens 成立了 Open Source Initiative(OSI)。该组织采用了《开源定义》,其内容改编自 Perens 于 1997 年起草的《Debian 自由软件指南》。
《开源定义》包含 10 项标准。其中两项决定了现代争论的大部分内容:必须提供源代码,许可证不得限制谁可以使用该程序,也不得限制其用途。如果许可证规定“不得将本软件作为商业服务提供”,无论其他条款允许什么,它都不符合该定义。请记住这句话。这正是今天的 source-available 许可证越过的界线。
1998 年出现的分歧,争论的是理由,而不是哪些许可证可以接受。FSF 的立场具有伦理性质:无法修改程序的用户无法控制自己的计算机。Raymond 在《大教堂与集市》一文中向企业阐述的 OSI 立场则更注重实际效果:开放式开发能够产生更好的软件,公司可以据此采取行动。Stallman 的回应《为什么“开源”忽略了自由软件的要点》仍发布在 gnu.org 上,而他始终不接受这个新术语。Perens 曾参与创建 OSI,但在 1999 年辞去 OSI 董事会职务,并表示该运动已经偏离了自由软件。
需要准确理解实际差距有多小。FSF 的自由许可证列表与 OSI 的认可许可证列表几乎完全一致,其中包括 GPL、MIT、Apache 2.0 和 BSD。需要同时表达这两种含义的作者会使用 FOSS(free and open source software,自由和开源软件)或 FLOSS(free/libre and open source software,自由/ libre 和开源软件)。
企业如何学会发布代码
Red Hat 在 1999 年上市,表明支持服务和打包比销售软件副本更有利润。IBM 在 2001 年承诺投入 10 亿美元支持 Linux。微软首席执行官在 2001 年称 Linux 是“癌症”,但同一家公司在 2016 年加入 Linux Foundation,成为白金会员,随后又在 2018 年以 75 亿美元股票收购 GitHub。IBM 在 2019 年以 340 亿美元收购 Red Hat。这些都不是对许可证态度的改变,而是利润所在位置发生了变化。当操作系统是一项共享成本时,维护自有操作系统的成本很高,因此每个厂商都更愿意在其上层展开竞争。
企业所有权也可能带来相反的结果。Oracle 在 2010 年收购 Sun 时接手了 MySQL 和 OpenOffice.org,但这两个社区随后都离开了。MariaDB 源自 MySQL,LibreOffice 则于 2010 年 9 月从 OpenOffice.org 分叉而来。分叉是用户社区真正拥有的唯一表决方式,而许可证使这种表决成为可能。
为什么您现在自托管的一些应用出现了分支
从 2018 年起,一些公司修改了已经发布的软件的许可条款。每次情况都很相似。一家公司雇用了几乎所有开发者,而规模大得多的云服务商将同一软件作为托管服务销售。较小的公司因此认为,软件许可是其无法竞争的原因。
- MongoDB 于 2018 年 10 月采用 Server Side Public License(SSPL)。SSPL 规定,如果您将该软件作为服务提供给他人,就必须公开提供该服务所用一切内容的源代码。OSI 未接受该许可为开源许可,MongoDB 于 2019 年撤回了审查申请。
- Redis 于 2018 年和 2019 年对部分模块增加了使用限制,随后在 2024 年 3 月发布 7.4 版本时,将主服务器改为双重 source-available 条款。几天后,最后一个采用 BSD 许可的版本出现了分支 Valkey。Valkey 由 Linux Foundation 管理,并得到 Amazon、Google、Oracle 等公司的支持。2025 年 5 月,Redis 又为 Redis 8 增加了 Affero General Public License version 3(AGPLv3)作为第三种选项。该许可已获 OSI 批准。
- Elastic 于 2021 年 1 月将 Elasticsearch 和 Kibana 移出 Apache 2.0,改为同时采用 SSPL 和 Elastic License 条款。Amazon 创建了 OpenSearch 分支。Elastic 于 2024 年 8 月增加 AGPLv3 作为第三种选项。2024 年 9 月,OpenSearch 转入 Linux Foundation 旗下的 OpenSearch Software Foundation。
- HashiCorp 于 2023 年 8 月将 Terraform 及其他工具转为 Business Source License(BUSL)。BUSL 在生效期间不是开源许可,因为它禁止竞争性生产使用。每个版本都会在固定日期转为开放许可;Terraform 的转换日期为发布四年后。OpenTofu 在数周内创建了分支,现在同样由 Linux Foundation 管理。
这件事的双方都有充分理由,双方也都没有恶意。一家公司承担 50 份薪资,而规模大得多的公司转售其成果,这确实是善意无法解决的问题。用户依据 Apache 2.0 条款构建了系统,却在一觉醒来后面对新的条款,这同样是问题,而且没有人事先征求他们的意见。请注意其中两个案例后来发生了什么。分支站稳后,Elastic 和 Redis 都重新加入了强 copyleft 条款。Copyleft 解决了最初的争议,因为 AGPLv3 要求服务提供商公开其运行的修改内容。截至 2026 年 8 月,这两个项目及其两个分支仍然活跃。这正是这些许可旨在允许的结果。
谁有权更改许可证
只有一方控制项目全部内容的版权时,项目才能更换许可证。公司通常通过两种方式取得这种控制权。版权转让会将每项贡献的所有权转让给公司。贡献者许可协议(CLA)则让您保留所有权,但授予公司足够广泛的权利,使其可以为您的作品更换许可证。两种协议通常都通过点击机器人在您首次提交 pull request 时发布的链接来签署。
Linux 没有 CLA。贡献以 GPLv2 和 Developer Certificate of Origin 的形式提交,版权分散在数千名个人和公司手中。没有人能为 Linux 更换许可证,因为任何人都不可能收集所有这些签名。任何拥有大量独立版权持有者的项目都受到同样的保护。这种保护比承诺更强,因为它是关于各项内容归谁所有的客观事实。
因此,对于您计划依赖的软件,应该询问的问题不是它今天是否为开源软件,而是谁能够改变许可证,以及对方是否可以单独完成这件事。
基金会实际提供什么
基金会持有项目资产,并规定决策流程。Apache Software Foundation、Linux Foundation、其下属的 Cloud Native Computing Foundation,以及 Software Freedom Conservancy,都以不同方式承担这项工作。基金会并不会自动保持中立。成员需要为席位付费,而大型基金会项目中大多数全职工作人员都由成员公司出资。基金会提供的保障范围更明确,但仍然很有价值:商标和发布流程不属于单一厂商,因此任何一家公司都无法将项目变为私有项目。
人们容易忽视商标这一点。代码受许可证约束。名称属于商标,而商标不受代码许可证覆盖。您始终可以派生代码。通常不能继续使用原名称。这就是为什么本章提到的派生项目被命名为 Valkey、OpenSearch、OpenTofu 和 Forgejo。
维护者问题
现代基础设施依赖一些只有一两名无偿维护者的项目,而这些项目出现故障时,这一问题才会暴露出来。2014 年,OpenSSL 中的 Heartbleed 漏洞影响了一个承载全球大量加密 Web 流量的库,而该库几乎没有经费,仅由少数几个人维护。2021 年 12 月,Log4Shell 事件使全球的事件响应工作集中到 Apache Log4j 项目的一个小型志愿者团队。
2024 年 3 月发现的 XZ Utils 后门是最典型的例子,因为攻击目标不是代码,而是维护者。某个账户用了大约两年时间,为一个广泛用于各个 Linux 发行版的压缩库提交了确实有价值的贡献。其他账户向疲惫不堪的唯一维护者施压,要求其接受帮助。随后,新任共同维护者将后门植入发布归档文件,目标是那些 SSH(secure shell)daemon 链接到 liblzma 的系统。一名开发者在调查登录为何比预期多耗时约半秒时发现了这个后门。这是运气,而所有相关人员也都已公开如此表示。
资金已经开始流入:GitHub Sponsors 自 2019 年起提供资助,Open Collective 也提供资金,德国主权技术基金自 2022 年起提供支持,OpenSSF 的 Alpha-Omega 项目也参与其中。但资金分配并不均衡,而且通常会流向那些已经广为人知的项目。监管也开始实施。欧盟《网络弹性法案》于 2024 年 12 月生效,其中大部分义务将从 2027 年 12 月开始适用。早期草案原本会让无偿志愿者承担制造商责任,因此,在基金会和各发行版长期游说后,最终文本设立了一个责任较轻的类别,称为“开源软件管理者”。
开源软件的历史对 VPS 上软件的意义
我们的自托管指南中介绍的每个应用,都受到这些决策的影响。Nextcloud 的存在源于一次分叉:2016 年,ownCloud 的创始人和大部分团队成员离开,并基于 AGPLv3 重新启动项目。此后,这两个产品一直并行发展。这段历史是值得考虑的 Nextcloud 替代方案以及可自托管的 Dropbox 替代方案的背景;后者与前者都存在竞争关系。
Git 托管领域也遵循相同的模式。Gitea 本身于 2016 年从 Gogs 分叉而来。2022 年末,该项目的商标和域名转移到一家公司名下;同年 12 月,Codeberg 从 Gitea 分叉出 Forgejo;2024 年,Forgejo 在版本 9 中将许可证从 MIT 更改为 GPLv3。这两个项目都在可自托管的 Git 服务器选项中介绍,许可证差异是它们持续分化的重要原因。与此同时,大多数自由软件都在 GitHub 上开发。GitHub 是 Microsoft 拥有的闭源平台,围绕它的争论由来已久,双方都有充分理由:请参阅GitHub 的实际含义。
在将服务器交给某个项目之前,值得花 10 分钟完成以下 4 项检查。
- 阅读代码仓库中的 LICENSE 文件,不要只看宣传页面。即使该文件已经不再支持这种说法,页面仍可能继续声称项目是“开源”的。
- 查找 CLA 或版权转让协议。如果存在其中一种协议,单一所有者就可以更改未来版本的条款。
- 查明版权由谁持有:一家企业、许多贡献者,还是某个基金会。
- 统计活跃维护者的人数。维护者只有 1 人时,项目对这个人和对你一样都存在风险。
这并不意味着应当避开单一供应商的软件。其中许多软件非常优秀,而且能够获得收入往往正是它们得以持续维护的原因。这些检查可以让你了解自己面临的风险。在决定哪些软件值得自托管时,应将许可证与内存要求并列比较。
你可以在眼前的这台机器上阅读这段历史的一部分。Debian 或 Ubuntu 系统中的每个软件包都会附带自己的许可条款:
ls /usr/share/doc | wc -l
head -n 20 /usr/share/doc/bash/copyright第一个数字表示包含版权文件的已安装软件包数量;在小型 VPS 上通常是几百个。第二条命令会输出 bash 对应版权文件的开头,其中写明 GNU General Public License version 3。如果文件缺失,说明该软件包未按照 Debian policy 构建。这种情况很少见;在信任该软件包之前,值得进一步检查。
FAQ
自由软件与开源软件有什么区别?
它们涵盖的许可证几乎相同,但对这些许可证为何重要的解释不同。“自由软件”是更早的术语,由自由软件基金会于 1985 年提出,其核心观点具有伦理性质:如果用户无法修改程序,就无法控制计算机。“开源”一词于 1998 年 2 月提出,目的是让公司更容易理解这些相同的许可证,其核心观点更注重实际应用。GPL、MIT、BSD 和 Apache 2.0 许可证都同时列在两者的官方许可证列表中。希望同时表达这两层含义的作者会使用 FOSS 或 FLOSS。
源代码可用软件与开源软件相同吗?
不相同。源代码可用表示您可以阅读代码。根据 Open Source Definition,开源还意味着许可证不得限制软件的使用者,也不得限制软件的用途。SSPL 和 Business Source License 都限制竞争性商业使用,因此按照该定义,两者都不是开源许可证,尽管它们都会发布源代码。如果您只为自己自行托管,可能永远不会受到这些限制的影响。如果您希望基于该软件构建产品,应先仔细阅读许可证文本。
公司可以收回已经授予的开源许可证吗?
对于已经发布的代码,不可以。该版本仍受发布时附带的许可证约束。这正是 Valkey 和 OpenTofu 等分支项目能够从最后一个采用宽松许可证的提交开始的原因。公司可以做的是为未来版本采用新的条款,但前提是公司通过版权转让或贡献者许可协议,控制整个项目的版权。拥有许多独立版权持有者的项目(包括 Linux)无法由任何一方单独重新授权。
自行托管的软件应选择哪种许可证?
对于您自行运行且不转售的软件,GPL、AGPL、MIT 或 Apache 2.0 等任何 OSI 批准的许可证都能满足需求。更重要的是确认版权由谁持有,因为这决定了未来许可证条款是否可能发生变化。由基金会或许多独立贡献者持有版权的项目,无法在违背用户利益的情况下重新授权。签署了贡献者许可协议的单一供应商项目则可以。两类项目都可能是优质软件,但只有其中一类可以自行更改规则。