第 19.8 节 重提 FreeBSD 与大败局
首先不知道何为 FreeBSD 大败局的建议阅读下以上 2 篇文章,当然当初我很快给出了我粗浅的回应:
文不加点,当时写得很快,不到两个小时就写完了,而且并没有动什么脑子。可能就是意气用事,为了反驳而反驳吧。当然我也没打算说他在现在就是正确的了。我只是觉得现在更加值得花时间来在文档和代码之外来谈论一下这些更加吸引人的东西。
看过上一篇文章《还有人记得 Linux 之前,那个理想又骄傲的 BSD 吗?》的读者都知道, BSD 是 Unix 最重要的一个开源分支,这一本该坐上 “开源头把交椅” 的操作系统家族承受了一场足以记载史册的浩劫。时间倒回三十年前。1993 年,那时候 BSD 正处于水深火热,Linux 刚诞生没多久,Meta 杂志 问 Linus Torvalds:能不能推测一下 Linux 在市场上对 Unix 的影响?当时,Linus 的回答是:I have gotten various mails and seen some newsgroup messages about persons who have switched over already or would like to switch over once Linux is able to run commercial binaries, but at least so far, I doubt Linux has dented the real Unix market very much.尽管我已经看到一些人已经或者想要切换到 Linux,用于运行商业二进制文件。但目前为止,我不认为 Linux 已经严重削弱了 Unix 的市场。彼时,Linux 初出茅庐,尽管锋芒毕露,但谁也不知道以后到底会发生什么。须臾三十年,形势调转,Linux 现在的地位有目共睹。另一边,BSD “灾后重建” 且大受欢迎的 386BSD 因为内部意见不同出现问题,其中三个补丁包协调员 Nate Williams、Rod Grimes 和 Jordan Hubbard 另起炉灶,于 1993 年创建了 FreeBSD。尽管还有 NetBSD 和 OpenBSD,但后来的事实证明,FreeBSD 发展最好、走得最远,是 BSD 世界里的 “扛把子”。
在之后的日子里,FreeBSD 没能重现 BSD 的往日荣光,反而一直生活在 Linux 的阴影之下。“Linuxism” 成为 FreeBSD 内部常常挂在嘴边的一个词,其中透露出酸酸的比较之味。一方面,FreeBSD 坚定地沿袭 Unix 的一些传统,坚决地想要与 GNU/Linux 保持距离;另一方面,FreeBSD 也在积极地寻求更长足的发展,想要至少在某些方面保持优势。世事如棋局,得势者得天下。以势定夺,怎么看 FreeBSD 领到的剧本都是一个 “大败局”。
Linuxism(Linux 主义/歧视)真的只是一种 FreeBSD 吃不到葡萄就说葡萄酸的牢骚话吗?光阴荏苒,时光如梭,自由软件运动持续了半个世纪有余,能够留存至今并真正意义上具有使用价值和能力的操作系统寥寥无几,更遑论开源操作系统了。自由软件运动所推崇的操作系统或者说内核(实际上是微内核) GNU Hurd,反正我是没用过……
如果你使用了 systemd 还实现了所有的 Linux ABI,并且用了一 大堆的 GNU 软件,而且你的内核也实现了所有的 Linux 特性,只有包管理器不一样,那么你究竟是 Linux 呢还是你自己的操作系统呢?这看上去是一个忒休斯问题。实则并不难回答。
而今几乎所有的 GPL 软件都使用 Linux 作为自己的开发测试平台,并且结合了越来越多的 Linux 特性,乃至于让 Eclipse IDE 这种 java 软件都失去了可移植性。他们只会说你的系统我们并不关心,你自己打补丁就是了,因为我们只用 Linux。他们与 Linux 内核的某个特性紧密结合,并且死死捆绑。仿佛这些软件不依赖 systemd 就活不下去一样,比如 todesk——他们认为“(todesk)没必要兼容 init,反正我用的 systemd,谁还在用那玩意”,他们官方 Linux 版本 QQ 群里的管理员就是这么说的。
FreeBSD 恪守古老的 UNIX 法则,坚持其 BSD 开源哲学,坚持基本系统去 GNU 化。这意味着你不会遇到用包管理器就卸载了所有内核或者 glibc(C 库)这种蠢事。基本系统的软件都由 FreeBSD 项目统一维护,Linux 则没有基本系统这个概念,或者说 Linux 系统就是由一个个软件包拼凑起来的,如果你用过 LFS/Gentoo/ArchLinux 就会有明确的体验。一切命令/二进制文件都是由软件包或者 shell 提供的,也就都可以用包管理器来管理,比如说卸载……所以不难理解包管理器卸载内核这件荒唐事。
FreeBSD 去 GNU 化是贯彻其 BSD 哲学的实践。FreeBSD 项目认为基本系统中的 GNU 软件(很多常见的比如 grub vim nano tar 等)都会阻碍人们对 FreeBSD 的充分利用,因为人们被迫接受了 GPL 这一强制性开源的协议,不利于其更加自由的使用。这是出于 BSD 与 GPL 观念上的不同——GPL 强制开源(虽然也有很多方法隔离污染,比如 Android 所做的),而 BSD 则允许闭源(比如 Chromium)。但是这并不意味着 BSD 强制性的要求用户不能使用 GNU 软件,它只是基本系统(你安装好的系统)中去 GNU 化。你完全可以自己替换(实际上也不难,用包管理器一个个安上就是了),毕竟 FreeBSD 完全是自由的。
事实上,并非是 FreeBSD 在去 GNU 化,而是 Linux 本身在 GNU 化, 同时这也阻碍了 FreeBSD 的现有技术优势的组件无法进入 Linux 内核,比如 ZFS。
但是我看不出 FreeBSD 能有何出处了,这也是现实——引以为豪的 TCP/IP 远远落后于 Linux,BBR 移植了数年仍然性能低下;驱动问题更是难以解决,甚至放弃了对自己的英特尔驱动的维护,转而使用了 linux drm;zfs 更是已经被引入了使用人数最多的 Ubuntu,不再是 FreeBSD 等少数系统的专属了。
或许 FreeBSD 真是一个败局吧?
01 成也 BSDL,败也 BSDL正是我们的许可证,使得我们独一无二。与 GPL 尤其是 GPLv3 相比,BSDL(BSD 许可证)对很多厂商来说是非常重要的。他说得没错。许可证是 BSD 一族与 GNU/Linux 最显著的不同,它彰显了 FreeBSD 所继承的、与 RMS 提倡的 “Free” 完全不同的 “Libre” 哲学态度,使得以 FreeBSD 为代表的这些开源软件自成一派。在 GNU 理念里,软件本该自由,专有软件不应该存在。因此,GPL 被设计得具有传 染性,并且要求所有修改后的代码都要返回上游,当初 Linus 选择 GPL 正是看重后面这一点。而 BSDL 则更接近于 “公共领域”(公共领域的作品属于公有文化遗产,任何人可以不受限制地使用和加工它们),几乎给了使用者最大权限的自由,不但可以自由地使用、修改源代码,不需要返回任何修改,还可以将修改后的代码作为开源或者专有软件再发布。我们并不认可 GPL,它是一种政治宣言。我们想要将我们的许可证与政治分开。 GPL 会吓跑很多潜在用户,这只会适得其反。—— FreeBSD 创建者之一 Jordan HubbardFreeBSD 的这种身份主张无可厚非,但从现实层面来考量这两个许可证,就是另一码事了。当程序员放弃代码的版权,或者选择 BSD 许可证,他可能认为自己做出了世界上最无私的行为。很大程度上,事实确实如此。但是,我们要知道,这个世界是一个商业利益占主导的世界。一旦发生像甲骨文拥有 MySQL 这一类的事情,你的代码的价值将大大削弱,大公司先是免费利用它们,然后再设法推出取代它们的私有产品。你以为自己奉献了爱心,但是实质上变成了为大公司无偿打工。从这个角度看,GPL 是更好的开源许可证。它保证了自由始终是自由,既无法被剥夺,也不是一种圈套或陷阱。
实际上,该博客的这篇文章是有一些问题存在的。
作者阮一峰指出:
即使 mysql 闭源一定会有其他人接手,继续推出 MySQL 的后续版本…但是只要代码完全兼容…
如果闭源了并推出新产品,那么如何还能做到代码完全兼容?就拿如今红帽 RHEL 的代码授权来说,红帽把开源的代码水平降级到了 CentOS stream,你即使有 rockylinux、欧拉、阿里龙蜥等一堆系统,你的兼容级别也是次于 RHEL 的。
第二种情况:甲骨文公司决定,MySQL 的后续版本不再开源,或者整体并入 Oracle 数据库,会怎么样?答案更简单,不可能发生这种情况。因为根据 GPL 许可证,只要发布基于原代码的新产品,就一定必须开源。
GPL 不是用来限制作者或者版权方自己的,否则按照这个逻辑,没必要 fork 出来 MariaDB。版权持有者完全可以决定后续版本的开源与否。
严格来说,GPL 是由开发者对其他人发布的的许可证,用于这些人使用、发布和改变该程序。开发者本人并不受到许可证的限制,所以无论开发者做什么,这都不是“违反”GPL。见 https://www.gnu.org/licenses/gpl-faq.html#DeveloperViolate
让我 们再来假想一下,如果 MySQL 的源码处于公共领域,或者 BSD 许可证之下,那会怎样?那样的话,许多站长恐怕都会感到大难临头了。他们不得不做出选择,将来到底是升级到第三方小公司推出的、质量没有保证、支持力量薄弱、互相不兼容的基于 MySQL 5.x 版本的各种衍生数据库,还是升级到甲骨文公司推出的、与 Oracle 兼容的、号称具备各种新功能和最佳性能、并且广告满天飞的 MySQL 6.0 版本。
在类似 BSD 许可与 MIT 许可的 PostgreSQL 许可下发行的 PostgreSQL 为什么没有发生作者博客所提到的问题呢?反而实用性更超 MySQL。
GPL 是更好的开源许可证。它保证了自由始终是自由,既无法被剥夺,也不是一种圈套或陷阱。
那么问题来了,GPL 究竟保障的是人们的消极自由还是积极自由呢?见仁见智。此外,绕过 GPL 的事情以及技术手段不在少数。作者阮一峰博客底下评论的 Android 就是一例。而且根据已逝 VIM 作者 Bram Moolenaar 的话“它(GPL)事实上是通过限制自由来实行自由的”,也即 GPL 是一种“伪式开源”,并非真实的开源。
FreeBSD 的贡献者就常常被调侃为 Apple 公司的无薪员工。Apple 将社区工作都纳入了 FreeBSD,在其基础上进行了一些更改,就变成了一个专有的、非自由的操作系统。糟糕的是,Apple 还对内核和其他部分进行了分叉,并将其命名为 Darwin,这一系统基本就远离了 FreeBSD 的传统。而且,由于 Apple 支付了版税,他们可以合法地将其称为 Unix,但这笔钱也没有流向 FreeBSD。
实际上有不少 Apple 开发者同时是 BSD 开发者。Apple 也是 FreeBSD 基金会的赞助商之一。
更过分的是,相较于 Netflix 等,同样是 FreeBSD 受益者,Apple 为上游做贡献的积极性也不足(因为 BSDL,贡献上游这事就全凭自觉了)。但 FreeBSD 的人对此倒也看得开:“我不会因此而责怪他们。FreeBSD 是一个 BSD 许可的项目,而不是 GPL。”John Baldwin 表示。BSD 许可证就是一个复制中心,可以为所欲为,但我们不在乎。—— Marshall Kirk McKusick ,他亲身参与了 4.3BSD 和 4.4BSD 的开发和发行,后来又深度参与了 FreeBSD因为 GPL,这种事永远不会发生在 Linux 身上。在 GPL 许可下,任何人都可以使用 Linux,但是有一个强制要求,如果修改后的版本要出售或者提供给他人,则必须根据相同的 GPL 许可把完整源代码对外发布。如此一来,GPL 可以确保 Linux 永远不会成为专有产品,所有开发者做出的贡献最终会回到社区,Linux 可以得到更好的发展。
实际上并非如此,比如 Ubuntu 很多情况下都在重复造轮子。Linux Kernel TTY 中文补丁一直不被接受。开发者只会按照自己的意图改造软件,面对用户的需求往往充耳不闻。Linux 是不是会成为专有软件我不知道,但是我知道他离改名叫 Systemd OS 那一天不远了。也早已经放弃了自己以往的 UNIX 哲学。
另外关于开源,源代码是可以以售出方式开源的。
Linux Kernel 的开发相当地封闭,你如果有内核补丁要提交必须挨个按照脚本上给出的邮件地址去询问,看看谁愿意接受你的补丁。而 FreeBSD 则是真正任何人都可以参与开发。
在 Linus 眼里,GPL 就是他想要的,而不是 BSDL。许可证是 Linux 成功的决定性因素之一,因为它强制你必须回馈。如果你真的想创造更大的东西,如果你想围绕它创建一个社区,BSD 许可证不一定是很好的许可证。它(BSDL)会让开发人员觉得大公司在利用他们的工作。
BSD 认为开源的最大目的并非是出于所谓自由,而是让代码尽可能地被复用,以产生尽可能大的社会效用。而不受任何限制。
02 “好东 西都给 Linux 了” Linux 赶上了好时候。Internet 开始风行之际,Linux 的开发者及爱好者正好能透过 Internet 实时地发布新闻、想法、提问、讨论、递送程序代码及进行错误回报。这种由 Internet 连接起来的分布式合作方式带给了 Linux 惊人的活力。这种生命力直接将 Linux 送上了可以与 BSD 分庭抗礼的位置。与此同时,在 Linux 现身之时,刚好是人们开始买得起个人计算机时。那是还没从诉讼中缓过劲的 BSD 对于当时的个人计算机所使用的 80386 硬件的支持度非常不好,Linux 几乎成为当时大众的第一选择。这一波路人缘,Linux 收割得很漂亮。BSD 缺位,Linux 趁机发展,刚从灰烬里重生的 FreeBSD 碰上的局面就很残酷:Linux 占据主导地位之后,已经形成马太效应,之后的态势呈现出强者愈强、弱者愈弱的趋势。
硬件方面,Linux 可以在许多不同的平台上运行,而 FreeBSD 则不行。硬件设备制造商更愿意为 Windows、Linux 等主流的操作系统提供驱动程序,IBM、戴尔和惠普直接支持在其服务器上运行 Linux,但处于主流之外的 FreeBSD 可能不在它们的考虑范围内。
FreeBSD 支持的架构难道很少吗?那不如试试 NetBSD 吧。
此外,Linux 的开发者数量比 FreeBSD 多出数倍,这意味着 Linux 拥有更多的贡献者和测试新硬件的机会。长期下来,最终导致 FreeBSD 的兼容性和硬件支持远远不如 Linux。比如,用户需要定期更新图形驱动程序,Linux 可以更早、更快地提供支持。软件上,Linux 软件包存储库的数量远超过 FreeBSD ,具有更大的灵活性和可用性,虽然 FreeBSD 也提供了预编译的软件包,但它仍然无法与 Linux 可用的资源进行比较。其实,这都是互为因果关系的 —— 因为 FreeBSD 市占率比 Linux 低多了,开发者少,很多软件对其的支持度就不如 Linux,这又反过来加剧了其市占率的下降 —— 一个 死循环。
FreeBSD 有 Linux 兼容层,所以理论上软件数量应该远超 Linux。另外上边已经讨论过,专属依赖于 Linux 的软件越来越多,这并非一件好事,这会导致所有软件丧失独立性和可移植性,出现共同的故障点。自由软件运动如果再这么进行下去,那想必所谓“开源”开不开已经没有多大意义了,因为离开了 Linux 或者 Systemd 软件根本跑不起来,也无法移植。
有人评论很是贴切:“所有的好东西都给了 Linux”。看着 FreeBSD 如今的现状,用户都着急了。2020 年 3 月,一些用户开始在推特上催促 FreeBSD 基金会尽快赞助 FreeBSD,以推进对 802.11ac 支持的开发工作。要知道这个时候, Windows 和 Linux 都提供了对 802.11ac("WiFi 5")的良好支持,并且已经开始将重心放在 802.11ax ("WiFi 6"