github编辑

systemd 背后的真正动机

在这篇文章中,我们将深入探讨 systemd 开发背后的真实动机,并展望 GNU/Linux 作为操作系统的一些未来前景。

2022-10-31 更新: 情况并未改善,这并不令人意外。随着微软在 systemd 开发中扮演主导角色,以及其全新的受信启动世界arrow-up-right的推进,再加上对大量开源基础设施的掌控,这正在慢慢演变为一种“暗中接管”Linux 世界的局面,而这是无人希望看到的。现在的确是回归社区驱动开发arrow-up-right的时候了。

引言

起初,systemd 只是一款新的 init 系统,我个人并不反感。然而,今天我对 systemd 的问题在于,它已经变成了一种类似特洛伊木马arrow-up-right的存在。它是红帽arrow-up-right(IBM)试图改变 Linux 世界以更好服务其公司利益的手段。

虽然最初 Linux 内核、GNU 工具以及不同主要独立的 Linux 发行版都是由社区驱动的项目,但如今 Linux 世界的大部分开发都受公司利益驱动,由坐在各大公司关键职位的开发者推动,例如英特尔、微软、红帽、谷歌、Facebook 等。

Linux 基金会arrow-up-right 目前赞助了 Linus Torvalds 让他全职工作于 Linux 内核,他依旧掌舵,但 Linux 基金会正慢慢变成“微软的影子”,就像开源倡议组织(OSI)arrow-up-right一样,大部分资金来源于微软。

微软开展“we love Linux(我们爱 Linux)”运动后,其一名董事会成员进入 Linux 基金会董事会。随后变为两名,现在是三名。基金会似乎在慢慢被暗中接管,真正的社区成员几乎不复存在,主要由公司员工组成。此外,微软在“Linux 基金会技术顾问委员会”也有重大影响,其现任董事试图将 Linux 外包到微软的 GitHub。

最初作为替代 init 系统,红帽发布了 systemd。随后它突然变成“提供 Linux 操作系统基础构建模块的软件套件”。红帽开始推动一场运动,影响其他主要 Linux 发行版,并施压它们让其采用 systemd。

采取的方法是,systemd 开发者针对多个第三方项目尝试说服其依赖 systemd,例如 Lennart Poettering 在GNOME 邮件列表arrow-up-right的尝试,以及红帽开发者 "keszybz" 在tmux 项目arrow-up-right的尝试。大部分尝试表面上看是技术问题,但 GNOME 邮件列表及其他地方的长篇邮件往来表明,事实并非如此。

在这个讨论串中,探讨了 GNOME 是否应该仅作为基于 Linux 的操作系统arrow-up-right,随后出现了一些重要的arrow-up-right反对意见arrow-up-right

红帽采取的其他策略包括从 GNOME 及其他 Linux 发行版(如 Debian)雇佣开发者,让他们推广 systemd。

所有这些导致开源 Linux 社区掀起轩然大波,Debian 开发者 Joey Hess、Debian 技术委员会成员 Russ Allbery 与 Ian Jackson,以及 systemd 软件包维护者 Tollef Fog Heen 纷纷辞职。他们在 Debian 公共邮件列表和个人博客中说明了原因:systemd 在 Debian 及开源社区的整合引发极高压力,使得日常维护几乎不可能。

2014 年 12 月,一位自称“资深 Unix 管理员”的团队宣布 Debian 分支 Devuan,旨在提供一款不含 systemd 的 Debian 衍生系统。Devuan 1.0.0 于 2017 年 5 月 26 日发布。

我们认为,这种情况也是 GNOME 项目议程接管 Debian 的长期过程的结果。考虑到这一影响的广泛性以及 Debian 作为通用操作系统和发行版基础系统的重要性,所涉及的是 GNU/Linux 的未来,可能面临所有基础发行版完全同质化和锁定的局面。

Lennart Poettering 最新发明的 systemd-homedarrow-up-right 被宣传为处理用户主目录的新方式,实际上只是向消除 /etc 更进一步,而这是红帽长期以来的目标。

观看 FOSSDEM 2020 视频arrow-up-right,Poettering 介绍 systemd-homed 时,他从 Linux 是多用户系统的角度批评全盘加密的处理方式,但同时他否认了 systemd-homed 所提出的至少五种挑战为“无关紧要”,理由是笔记本电脑实际上只有一个人使用。

事实上,即使在内核开发中,Linux 世界的主要开发几乎已被大型公司完全接管。它已不再主要是社区驱动开发。Linux 已成为许多企业的巨大利益来源,他们希望尽可能控制开发进程。

下面让我们看一些无可争议的事实。

事实 1:systemd 来自红帽

Lennart Poettering 和 Kay Sievers 在 2010 年启动 systemd 项目时,二人均为红帽员工。最初,systemd 只是作为新的 init 系统发布,但它逐渐演变成 Poettering 所描述的“提供 Linux 操作系统基础构建模块的软件套件”。这是设计使然,而非偶然。

官方给出的 systemd 开发理由是:

他们希望改进表达依赖关系的软件框架,使系统启动期间更多的处理能够并发或并行执行,并减少 shell 的计算开销。

事实 2:开发 systemd 的主要原因是红帽在嵌入式设备上的商业利益

红帽的主要业务在嵌入式设备,而 systemd 从设计上关注的主要问题就是嵌入式设备,例如消除 /etc 的工作。

在与红帽 CEO Jim Whitehurst 的采访arrow-up-right中,他表示:

我们与全球最大的嵌入式供应商合作,尤其是电信和汽车行业,这些行业最关注的是稳定性和可靠性。他们很容易适应 systemd。

Mentor Automotive 发布了2015 年活动的演示文稿arrow-up-right,其中详细说明了 systemd 为嵌入式汽车市场带来的诸多好处。他们“轻松适应 systemd”的原因,是因为 systemd 是专门为满足这些需求而设计的。

自 2002 年以来,美国军方始终是红帽最大的客户arrow-up-right,也是红帽许多决策背后的主要动力来源之一。

2012 年,Lennart Poettering 将 systemd 的许可证从 GPL 改为 LGPL,以更好地适应嵌入式市场,具体提交记录arrow-up-right

事实 3:不,这不是传说,systemd 确实是个庞大的单体

在 2013 年 1 月,Lennart Poettering 在博客文章 The Biggest Mythsarrow-up-right(也可下载 PDFarrow-up-right)中,反对将 systemd 称为“单体”,这是许多人对它的看法。Lennart 表示:

一款包含 69 个独立二进制文件的软件包很难将之称为单体。然而,与以往解决方案不同的是,我们在单个 tar 包中发布了更多组件,并在单一仓库中维护这些组件,采用统一的发布周期。

然而事实上,许多所谓的独立二进制文件的功能脱离其他 systemd 组件是无法工作的。例如,在 systemd-networkd 的手册页中明确指出,如果将选项 UseDNS 设置为 true,则会使用 DHCP 服务器提供的 DNS 服务器并优先于任何静态配置的服务器。这对应于 /etc/resolv.conf 中的 nameserver 选项。但手册页未提及的是,这个设置(以及其他多个设置)在没有 systemd-resolved 的情况下将无法工作。systemd 的其他组件耦合得甚至更紧密。

事实 4:隐私问题

systemd-resolved 对 Cloudflare、Quad9 和谷歌配置了硬编码的备用 DNS 服务器。即使你关闭了这些服务器,也可能由于 Bug 而被使用(实际上曾经发生过一次)。

事实 5:红帽想成为下一个 Microsoft Windows

这是红帽的另一个主要动机,从 Lennart Poettering 在 FUDCON + GNOME Asia Beijing 2014arrow-up-right 的演示文稿中可以看出。查看第 15 页,慢慢翻到第 19 页,你会看到项目目标:

  • 将 Linux 从一个“碎片化系统”变为具有竞争力的通用操作系统。

  • 构建互联网的下一代操作系统。

  • 统一不同发行版之间无意义的差异。

  • 将创新带回核心操作系统。

结合后续幻灯片显示的红帽目标市场:

  • 桌面

  • 服务器

  • 容器

  • 嵌入式

  • 移动

  • 集群

大多数 systemd 模块所增加的功能,仅仅是为了让桌面系统(如 GNOME)像 Microsoft Windows 一样运作。

事实 6:红帽需要其他主要 Linux 发行版的配合

如果红帽想在长期计划中成功开发“互联网的下一代操作系统”,他们必须影响其他主要 Linux 发行版。原因在于,如果 Debian、Ubuntu、Arch Linux 等主要发行版拒绝 systemd,红帽的计划就无法推进,因为太多第三方项目根本不会关心红帽希望的运作方式。

这一点非常重要,因为许多开源项目开发时都考虑 POSIXarrow-up-right 兼容性。他们尽力确保项目能在多个类 UNIX 系统上编译和运行。这并不符合红帽的利益。只要你必须考虑其他操作系统,如 Solarisarrow-up-rightFreeBSDarrow-up-rightOpenBSDarrow-up-rightNetBSDarrow-up-right,Linux 在功能上就会被“拖后腿”,无法与 Microsoft Windows 相比。功能如自动挂载和卸载、简单权限提升等。

另一个问题是,如果其他主要 Linux 发行版拒绝 systemd,红帽就更难将 systemd 相关的更改和代码推送到内核中。但当其他主要发行版也采用 systemd 时,这一过程就容易得多。

后果

从政治角度来看,systemd 的主要问题之一是其持续开发由公司利益驱动,而非自由开源 Linux 社区的利益。

从技术角度来看,systemd 已经深深渗透到许多开源项目中,逐渐成为硬依赖(忽略其他开源操作系统的存在)。结果是,许多应用程序无法在脱离 systemd 的情况下运行。这不仅使在 FreeBSD 等操作系统上运行这些软件变得非常困难,也严重影响了仍保留“init 自由”的 Linux 发行版——即维护 PID1 的合理方法,尊重可移植性、多样性和自由选择。

因此,systemd 破坏了可移植性,忽视向后兼容性,并替换了现有服务。许多 Linux 发行版为了获得可用的操作系统,放弃了原先的 init 系统而采用 systemd。systemd 拥有逾 130 万行代码,可能带来大量安全问题或 bug。相比之下,sinitarrow-up-right 仅不到 200 行代码,仅完成一个功能,而且运行良好。

另一个重大问题是前面提到的 systemd-resolved 的硬编码 DNS 服务器。

Lennart Poettering 解释arrow-up-right 这些硬编码值用于配置文件灾难性损坏或网络缺少 DHCP 的情况(DNS 备用可更改,但需要重新编译)。然而,这是“嵌入式开发者”的角度。如果应用程序中出现 bug 导致这些 DNS 服务器在你已禁用的情况下仍被使用,或者出现 竞争条件 bugarrow-up-right,就可能产生严重的隐私问题。此外,将 Cloudflare、Quad9 和谷歌的 DNS 服务器硬编码在 systemd 代码中非常不妥,因为这些公司不仅以侵犯用户隐私闻名,而且 NSA 曾经渗透 Google 数据中心(由 斯诺登文件arrow-up-right披露)。这样的设置不应为“必须记得手动移除”的默认选项,而应为用户主动选择(opt-in),绝不应默认启用。

通常处理这些问题的方式,以及 Lennart Poettering 极端傲慢的态度,显示出他对用户隐私和开源 Linux 社区利益的完全漠视。

最后评论

让我感到惊讶的是,Debian 邮件列表上的最初讨论居然只集中在 SysVinit、Upstart 和 systemd 上。没人认真关注过 runitarrow-up-rights6arrow-up-right。这些系统不仅更符合 Unix 哲学,而且更加安全且易于理解。

Casper Ti. Vectors 在 Gentoo 论坛上的帖子,s6/s6-rc vs systemd, or why you probably do not need systemdarrow-up-right,也表明 s6 在很多方面比 systemd 更好、更优。

许多人误以为 systemd 的每个组件都是独立的,但事实并非如此。查看其代码和文档,就会发现这些所谓模块之间存在紧密耦合arrow-up-right

企业政治、操作手段和操控不应在 Linux 世界存在。虽然允许公司使用开源代码、贡献代码,并用盈利为项目提供资金支持,但绝不应允许像红帽等公司现在在 Linux 世界拥有如此庞大的控制权。

感谢真正独立的社区驱动项目,否则我们就只能面对像 Microsoft Windows 这样的垃圾系统。在这一点上,可以看看以下内容:

最后更新于