FreeBSD 16 摘掉最后一行 GPL 代码:一个四十年的许可证路线走到终点

FreeBSD 16 摘掉最后一行 GPL 代码:一个四十年的许可证路线走到终点

FreeBSDGPLBSD开源许可证操作系统自由软件

数据源:HN + Lobsters

7 月 14 日,Phoronix 的 Michael Larabel 报道了 FreeBSD 开发分支上的一个合并提交:GNU dialog 从 base system 源代码树中被移除。这不是某个大型重构的一部分,也不是一次安全更新——它标志着 FreeBSD 基础系统中最后一款 GPL 许可的软件正式退役。随 dialog 一起消失的,是 FreeBSD 代码仓库里那个名为「GNU sub-tree」的目录。从这一刻起,FreeBSD base 不再包含任何 GPL 代码。

Lobsters 上 61△、10 条评论,Hacker News 上 92 分、54 条评论。对 FreeBSD 项目来说,这个里程碑酝酿了超过二十年。

FreeBSD 项目 logo——此次 GPL 清理标志着基础系统中所有 GNU 代码的移除

最后一块拼图:从 dialog 到 bsddialog

最后一款留在 FreeBSD base 里的 GPL 软件是 dialog——一个基于 ncurses(LGPL 许可)的命令行界面工具,用于在终端里绘制菜单、表单、消息框和输入提示。FreeBSD 安装程序曾经依赖它来提供交互式 UI。

替代品 came in the form of bsddialog,一个 BSD 许可的 dialog 兼容实现。安装程序本身在更早的版本中就已经切换到了 bsddialog,但还有一个叫 dpv(dialog progress view)的工具仍然链接着 dialog 库。随着 dpv 在 FreeBSD 16 中被标记为退役,最后一条对 GNU dialog 的依赖链也断了。

Phabricator 上的 D55424 号 diff 记录了这个过程。提交者做了两件事:从源码树中移除 dialog 本身,然后删掉整个 gnu/ 子目录。diff 不算大——几百行删除——但它关掉了一个跨越 FreeBSD 4.x 时代延续至今的历史章节。

Phoronix 报道截图:FreeBSD 代码树中 GNU 子目录被移除

为什么这件事值得关注

BSD 许可证和 GPL 的分歧不是秘密,但直到这一次代码清理完成,FreeBSD 才算是把自己「BSD 优先」的立场真正走完了。FreeBSD 官方 Wiki 的 GPLinBase 页面对此说得很直白:

「由于 GPL 软件在商业使用中可能产生的额外复杂性,在合理可行的情况下,我们更倾向于采用更宽松的 BSD 许可证提交的软件。」

这个立场背后的逻辑是务实的工程决策。BSD 许可证允许下游使用者在闭源产品中自由使用、修改和分发代码——Steve Jobs 用 FreeBSD 的用户态工具链构建了 NeXTSTEP,后来演化成了 macOS 的基础。Apple 的 Darwin 内核同样大量借用了 FreeBSD 代码。如果这些代码是 GPL 许可的,这条路就堵死了。

换句话说,BSD 社区理解的「软件自由」包含一个 FSF 并不认可的维度:把代码变成专有软件的自由。从 BSD 视角看,这正是许可设计有意保留的权利。

一条走了四十年的路

FreeBSD base 里的 GNU 组件从来不是计划好的——它们是历史遗留。当 FreeBSD 在 1993 年从 386BSD 分叉出来时,GCC 是当时唯一可用且足够成熟的开源 C 编译器,GNU C Library 和 GNU coreutils 是标准配置。那个年代没有 clang,没有 musl,没有 busybox。吃下 GPL 是务实的选择,不是因为认同。

随着替代品的出现,FreeBSD 项目开始有计划地替换这些组件。按时间线梳理:

  • GCC → Clang:这是最大的一次切换。FreeBSD 在 2009 年前后开始引入 LLVM/Clang 作为备选编译器,到 FreeBSD 10(2014 年发布)Clang 已成为默认编译器。GCC 从 base 中完全移除发生在 FreeBSD 10 周期内。GCC 切换到 GPLv3 是这件事的催化剂——BSD 社区普遍认为 GPLv3 的限制条款和 BSD 的哲学不兼容。
  • GNU C Library → FreeBSD libc:FreeBSD 一直有自己的 libc 实现,所以这方面没有依赖。
  • GNU grep、GNU diff、GNU diff3:这些用户态工具逐一被 BSD 许可的替代品替换。其中 GNU diff3 是最晚被替换的之一——FreeBSD 论坛在 2026 年 2 月还在讨论它。
  • GNU dialog → bsddialog:2026 年 7 月完成,标志着整个 GNU sub-tree 的清零。

Lobsters 上用户 thomas0 翻出了 FreeBSD Wiki 里的项目目标页面,指出这句话已经在那里放了相当长时间。这与其说是一个突然的决定,不如说是一个长期路线图的终点。

技术细节:移除的不只是代码

dialog 的移除看起来是个小动作——一个终端 UI 工具而已——但它触发了连锁反应。dialog 依赖 ncurses(LGPL),ncurses 留在 base 里本是为了支撑 dialog。dialog 一移除,ncurses 在 base 中的存在意义也消失了。FreeBSD 项目目前仍然在 base 中保留 ncurses,因为它被其他组件使用,但方向已经明确:继续减少许可证依赖的复杂性。

GNU sub-tree 的移除还带来了一个附带收益:FreeBSD 的构建系统和发布流程得到了简化。过去发布一个 FreeBSD 发行版,base system 包含的许可证清单里必须区分 BSD、MIT、ISC、LGPL、GPL 等不同条款。现在只剩 BSD 及其兼容许可证,合规审查的工作量大幅下降。

社区的反应

Hacker News 上的讨论呈现出两种典型立场。

支持 BSD 路线的一方认为,这是 FreeBSD 在追求许可证一致性上的自然终点。「FreeBSD 虽然名字里有 Free,但它从来不是自由软件运动的一部分,」用户 riedel 写道。「在自己的许可证上保持一致性是好事——尤其和 Linux 不同,FreeBSD 是一套完整的发行版,包含 userland。」他还提到了 FreeBSD 作为设备操作系统(防火墙、NAS)的独特生态位——在这些场景下,BSD 许可的「拿走就用」特性是货真价实的竞争优势。

对 GPL 式微感到惋惜的一方则认为这是一个信号。用户 matheusmoreira 写道:「从自由软件运动的角度看,这挺悲哀的。看看 GNU 这些年的影响力缩水了多少。」但他也承认:「不过话说回来,尝试给 GNU 贡献代码的体验确实不太愉快。也许这样更好。」

Lobsters 用户的讨论则更偏实用主义。用户 vegebond 最初不理解动机,看到 Wiki 上的解释后自己给出了答案:「当然!BSD 有自己的许可证,自然希望基础系统只用自己许可证下的代码。我居然问出这个问题,太傻了。」

一个值得注意的细节是,多条评论都提到了 FreeBSD 使用 Phabricator 作为代码评审平台——而非 GitHub、GitLab 或 SourceHut。这恰好也体现了 BSD 社区一贯的选择:用自己觉得对的工具,不跟风。

这对 FreeBSD 意味着什么

从实用角度看,这次清理对 FreeBSD 用户几乎没有直接影响。bsddialog 已经跑了足够久,功能和兼容性都没有问题。普通用户装系统时根本感受不到变化。

真正的影响在生态层面。一个完全不包含 GPL 代码的 base system 意味着:

  1. 商业采用的门槛进一步降低。嵌入 FreeBSD 的产品——从 Juniper 路由器到 Netflix 的 Open Connect 设备再到 PlayStation——不需要担心 base system 内的 GPL 传染风险。当然,ports 和 packages 里仍然有大量 GPL 软件,但那是用户自主选择安装的,和 base system 的许可证范围无关。

  2. FreeBSD 的许可证立场终于自洽。过去强调「BSD 优先」但 base 里还嵌着 GNU 代码,在哲学上总有一丝尴尬。现在这条路走完了。

  3. 为 FreeBSD 16.0 发布扫清了最后一个历史包袱。FreeBSD 16.0 预计在 2027 年 12 月发布。去掉这个最后的许可证遗留问题,开发团队可以专注于更重要的工程目标。

最后值得一提的是,这个里程碑的达成方式本身就很「BSD」:没有宣言,没有新闻稿,没有道德批判。只有一个合并提交,一个关闭的 ticket,和一个被删除的目录。

参考链接

  • Phoronix 报道: phoronix.com/news/FreeBSD-16-Goes-GPL-Free
  • FossForce 分析: fossforce.com/2026/07/freebsd-16-cleans-house-no-gpl-left-in-the-base-system/
  • FreeBSD Wiki GPLinBase: wiki.freebsd.org/GPLinBase
  • Phabricator diff D55424: reviews.freebsd.org/D55424
  • Hacker News 讨论: news.ycombinator.com/item?id=48923363
  • Lobsters 讨论: lobste.rs/s/n1cwdh

本文的素材来自公开信息和社区讨论。如果你对这个话题有更深入的一手经验,欢迎指出文中的不足。