为什么Linux的Systemd在这么多年后仍然存在分歧

2020-06-19 02:42:18

systemd已经有10年的历史了,但是Linux社区对它的感觉并没有变得成熟-它现在和以前一样造成了分歧。尽管许多主要的Linux发行版都在使用它,但铁杆反对者并没有软化。

当您打开计算机电源时,硬件会启动,然后(根据计算机使用的引导扇区类型)执行主引导记录(MBR)或运行统一可扩展固件接口(UEFI)。这两个操作的最后一个动作是启动Linux内核。

内核被加载到内存中,自我解压缩,然后初始化。临时文件系统是在RAM中创建的,通常由名为initramfs或initrd的实用程序创建。这允许确定和加载所需的驱动程序。这进而允许用户空间文件系统加载并准备建立用户空间环境。

用户空间环境的创建由init进程处理,init进程是内核在用户空间中启动的第一个进程。它的初始进程ID(PID)为1。所有其他进程要么是init进程的直接子进程,要么是间接子进程。

在systemd之前,init进程的主流默认设置是对Unix system V init进行重新处理。还有其他可用的选择,但是system V init是大多数非Berkeley软件分发(BSD)派生的发行版的标准选项。因为它直接来自system V Unix-Linux的精神始祖-许多人认为它是做init的“官方方式”。

初始化过程从使操作系统以有意义的、交互的方式工作所需的所有守护程序和服务开始。这些守护进程处理诸如网络堆栈之类的事情,启用计算机内的其他硬件,并提供引导屏幕。

其中许多后台进程在启动后会继续运行。它们执行诸如记录事件信息、在您插入或移除设备时监视硬件更改以及管理用户登录等操作。不出所料,Init系统还包括管理服务的功能。

我们可以使用ps查看PID为1的进程。我们将使用ff(全格式列表)和p(PID)选项:

我们看到PID为1的进程是SYSTEM D。在Manjaro Linux上运行相同的命令会产生不同的结果。PID为1的进程被标识为/sbin/init。快速查看该文件会发现它是指向systemd的符号链接:

将PPID(父进程ID)选项与ps一起使用时,我们可以看到哪些进程是由systemd直接启动的:

正如您在下图中看到的,这是一个相当长的列表。

有几个项目已经尝试生成传统System V init的替代方案。其中一个主要问题是,使用system V init时,所有进程都是一个接一个地串行启动。为了提高引导序列的效率,许多替代项目使用并行性和异步方式启动进程。

暴发户:由Canonical开发,用于Ubuntu 9.10、Red Hat、Red Hat Enterprise Linux(RHEL)6、CentOS 6和Fedora 9。

Runit:它在FreeBSD和其他BSD衍生品、MacOS和Solaris以及Linux系统上运行。它也是void Linux上的默认init系统。

s6-linux-init:这个system V init的替代品被设计成紧跟Unix哲学,这通常被归结为“做一件事,做好它”。

还有许多不同功能和设计的其他产品。然而,他们中没有一个人创造了愤怒的系统。

systemd于2010年发布,并于2011年在Fedora中使用。从那时起,它被许多发行版采用。它是由RedHat的两位软件工程师Lennart Poetling和Kay Sievers开发的。

systemd不仅仅是init的替代品。相反,它是由大约70个二进制文件组成的套件,用于处理系统初始化、守护进程和服务、日志记录和许多其他功能,这些功能已经由Linux中的专用模块处理。其中大部分与系统初始化无关。

systemd-nspawn:可以在轻量级名称空间容器中启动命令或其他进程,从而提供类似于chroot的功能。

而这只是冰山一角,也是问题的症结所在。systemd早就超过了init系统的要求,根据其反对者的说法,init系统正是作用域爬行的定义。

Systemd的反对者指出,它包含了大量奇怪的功能组合。所有这些特性在Linux中都已存在,其中一些可能需要更新或采用新的方法。然而,要将所有这些功能捆绑到应该是init系统的系统中,在体系结构上是令人费解的。

对于太多的关键功能,systemd被称为单点故障,但这似乎是不合理的。诚然,它抛弃了Unix的哲学,即创建协同工作的小工具,而不是做任何事情的大软件。虽然systemd不是严格意义上的整体(它由许多二进制文件组成,而不是由单个巨大的二进制文件组成),但它确实在一个保护伞下包含了许多完全不同的管理工具和命令。

虽然它可能不是铁板一块,但它很大。为了了解规模,我们统计了内核5.6.15代码库和GitHub存储库的systemd主分支中的文本行。

这是一个相对粗糙的指标。它计算文本行,而不仅仅是代码行。因此,这包括评论、文档和其他所有内容。然而,这是一个相似的比较,给了我们一个简单的标准:

内核有近2800万行文本(确切地说,是27784,340行)。相比之下,Systemd的用户为1,349,969人,即近140万人。按照我们随心所欲的度量,systemd的大小大约是内核的5%,这太疯狂了!

作为另一个比较,Arch Linux发行版的system V init的现代实现的行数为1,721行。

Poetting显然没有考虑电气和电子工程师协会(IEEE)计算机协会,也没有考虑可移植操作系统接口(POSIX)标准。事实上,他一直鼓励开发者忽略POSIX:

“所以,给自己弄一份”Linux编程接口“,忽略它所说的关于POSIX兼容性的一切,砍掉你那令人惊叹的Linux软件。真让人松了一口气!“。

有人指责Systemd是一个只让RedHat受益的RedHat项目,但它却被强行馈送到更广泛的Linux世界。是的,它诞生于红帽内部,并由它来管理和驾驭。然而,在1321名贡献者中,只有一小部分人为红帽工作。

IBM总裁吉姆·怀特赫斯特(Jim Whitehurst)曾担任红帽(Red Hat)首席执行官,他说:

Red Hat考虑了许多可用选项,甚至将Canonical的UpStart用于Red Hat Enterprise Linux 6。最终,我们选择了systemd,因为它是提供可扩展性、简单性、可伸缩性和定义良好的接口的最佳体系结构,可以解决我们今天看到和预见到的未来问题。

怀特赫斯特还说,他们也看到了嵌入式系统的好处。红帽公司与“世界上最大的嵌入式供应商合作,特别是在稳定性和可靠性是头号问题的电信和汽车行业。”

从技术上讲,这些似乎都是合理的理由。你可以理解公司对可靠性的需求,红帽公司为自己的利益着想并不是没有道理,但其他所有人都应该效仿吗?

一些Systemd的反对者说,分发和人们只是盲目地追随红帽的领导并采用它。

然而,就像“喝酷爱”这句话一样,这并不完全正确。1978年,在邪教领袖吉姆·琼斯(Jim Jones)强迫他的900多名追随者喝了一种掺有氰化物的葡萄味液体自杀后,这个词被创造出来,这句话错误地让Kool-Aid蒙羞。这群人实际上喝的是Favor Aid,但从那以后酷爱就一直被那个刷子涂上了焦油。

另外,Linux发行版不是盲目追随RedHat;他们是经过认真考虑后才采用systemd的。这场争论在Debian邮件列表上进行了很长一段时间。然而,在2014年,社区投票决定采用systemd作为默认的init系统,但也支持替代系统。

Debian是一个重要的例子,因为它不是从RedHat、Fedora或CentOS派生出来的。红帽公司没有给Debian提供空乘服务。和PID 1一样,Debian也有很多后代,包括Ubuntu和它的许多衍生产品。

Debian社区做出的决定影响深远。他们也进行了激烈的辩论,并使用孔多塞的投票方法进行了投票。社区也不会轻易做出这样的选择。

它在2019年12月再次投票决定继续专注于systemd系统,并继续探索替代方案。与盲目追随相反,这实际上是民主和选择自由发挥作用的教科书例子。

通常,您无法选择是否在特定的Linux发行版中使用systemd。相反,发行版自己选择是否要使用它,您可以选择您喜欢的Linux发行版。也许您喜欢的某个Linux发行版切换到了systemd。就像一位最喜欢的音乐家改变流派一样,这可能会让人感到不和谐。

使用Debian、Fedora、CentOS、Ubuntu、Arch、Solus和TopenSUSE并反对采用systemd的人可能会觉得他们被排除在使用他们选择的发行版之外。如果他们对任何架构选择、范围蔓延或忽视POSIX感到足够强烈,他们可能会发现继续使用该发行版是站不住脚的。

当然,这是有光谱的。一端是不理解(甚至不关心)问题的人,另一端是热情的反对者。中间的某个地方是那些不喜欢改变,但又不会对此感到足够困扰而跳槽的人。但是分配难民怎么办呢?他们因为自己的喜好或原则而不能继续自己选择的分配方式。

不幸的是,这并不像安装您想要的任何初始系统那样简单。并不是每个人都有这样做的技术能力,更不用说当应用程序或桌面环境(如GNOME)依赖于systemd时出现的困难了。

换到另一家经销店怎么样?有些,比如De Devuan,看起来像是采用了systemd的非system分叉发行版(在本例中是Debian)。使用Devuan应该类似于父发行版,但并不是所有的非systemd fork都是这样。例如,如果您离开Fedora,搬到Antix、Gentoo或Slackware,您将会有非常不同的体验。

我喜欢一些系统d做的事情(简单和标准化的进程控制机制)。我不理解它所做的某些事情(二进制日志)的基本原理。我也不喜欢它做的一些事情(改造家庭文件夹-谁要求的?)。

像Debian这样的发行版正在做聪明的事情,并研究替代方案以保持其选择余地。然而,systemd是长期存在的。

如果您为其他人管理Linux计算机,那么除了了解system V init之外,还要学习systemd。这样,无论你遇到什么,你都能履行你的职责。

在家里只使用Linux吗?如果是这样的话,选择一个既能满足您的技术需求又能与您的Linux思想相辅相成的发行版。

戴夫·麦凯(Dave McKay)第一次使用电脑是在打孔纸带流行的时候,从那时起,他就一直在编程。在IT行业工作了30多年后,他现在是一名全职科技记者。在他的职业生涯中,他担任过自由职业程序员、国际软件开发团队经理、IT服务项目经理,最近还担任过数据保护官。Dave是Linux的布道者和开源倡导者。阅读完整的传记»