
上图精准地概括了 Linux 社区过去十余年来最持久、最激烈的争论之一。左边是经典的 GNU/Linux —— GNU 项目(以角马为标志)与 Linux 内核(以企鹅 Tux 为标志)并肩而立;右边则是 systemd/Linux —— systemd 的标志性 [●◄] Logo 与 Tux 站在一起,GNU 的角马却消失了。
这张图不是简单的技术梗图,它背后是一场关于 Unix 哲学、开源治理、企业影响力和社区文化的深层冲突。
一、systemd 是什么?它解决了什么问题?
systemd 是由 Lennart Poettering 于 2010 年在 Red Hat 发起的一个 init 系统项目,旨在替代传统的 SysVinit。
传统的 SysVinit 使用顺序启动脚本(/etc/init.d/ 下的 shell 脚本),存在以下痛点:
- 启动慢:服务按编号顺序串行启动,无法利用现代多核 CPU 和 SSD 的并行 I/O 能力
- 依赖管理混乱:脚本之间的依赖关系靠编号和
sleep拼凑,经常出现竞争条件 - 缺乏统一的服务监控:进程崩溃后不会自动重启
- 日志分散:syslog、daemon 自有日志、内核日志各自为政
systemd 的核心创新包括:
- 并行启动:通过依赖图(dependency graph)让无依赖的服务同时启动,将启动时间从 30 秒缩短到 3 秒
- unit 文件:用声明式配置文件(
.service)替代脆弱的 shell 脚本 - socket 激活:服务仅在需要时才启动,节省资源
- cgroups 集成:利用 Linux 内核的 cgroups 进行进程隔离和资源控制
- 统一日志:journald 提供结构化、可查询的日志系统
支持者认为,systemd 将 Linux 从一个“用胶带和 shell 脚本拼凑的系统”变成了真正现代化的操作系统平台。
二、争议的五大核心论点
尽管 systemd 在技术上有诸多改进,反对者的批评从未停止。这些批评可以归纳为五个层面:
1. 违背 Unix 哲学
Unix 哲学的核心信条是:“做一件事,并做好它”(Write programs that do one thing and do it well)。
systemd 从最初的 init 系统,逐步吞噬了越来越多的系统组件:
udev→systemd-udevdsyslog→journaldcron/atd→systemd-timersinetd→systemd-socketacpid→systemd-logindNetworkManager→systemd-networkd- DNS 解析 →
systemd-resolved - 容器管理 →
systemd-nspawn
反对者认为,一个 init 系统不应该管理 DNS、网络配置、登录会话、时间同步和设备事件。systemd-free.org 的宣言直言:“一个 init 系统应该启动进程、监督它们、停止它们。而不是在一个拥有 140 万行代码的单一二进制文件中管理所有这些。”
2. PID 1 的复杂性与安全风险
在 Unix 系统中,PID 1(第一个用户空间进程)具有特殊地位——如果它崩溃,整个系统就会崩溃。传统 Unix 刻意保持 PID 1 的极简,正是出于这一考虑。
systemd 的 PID 1 却极其复杂,包含大量代码路径。2016 年,安全研究者发现 systemd 允许任何非特权用户对其发起拒绝服务攻击。musl 开发者 Rich Felker 称这暴露了“重大的系统设计缺陷”。2017 年,Pwnie Awards(安全界的“金酸梅奖”)甚至授予 Poettering “最差厂商回应奖”,以讽刺其对漏洞的处理态度。
更宏观的风险在于单一文化(monoculture):systemd 运行在几乎所有主流 Linux 发行版上,一旦 PID 1 出现关键漏洞,整个 Linux 生态都会受到冲击。
3. 二进制日志与可审计性
journald 将日志存储为二进制格式,无法直接用 grep、awk、sed 等经典 Unix 工具处理,必须使用 journalctl。当 journal 数据库损坏时,所有日志可能一并丢失,且没有文本备份。
对于系统管理员和安全审计人员来说,这被视为对可审计性和透明性的破坏。
4. 不可移植性与生态锁定
systemd 深度依赖 Linux 特有的内核 API(cgroups、namespaces、signalfd、timerfd 等),这意味着依赖 systemd 的软件无法在 BSD、Solaris 或其他 Unix 系统上运行。
更严重的是桌面环境的锁定:GNOME 现在要求 systemd-logind(或其兼容层 elogind)。这意味着选择桌面环境就限制了 init 系统的选择。2025 年,Artix Linux 彻底放弃了 GNOME 支持,正是因为这种依赖越来越难以剥离。
5. 企业控制与社区信任
systemd 的开发主要由 Red Hat(现 IBM 旗下)资助。批评者认为,一家单一企业不应该控制 Linux 如此关键的基础设施。支持者则反驳 systemd 采用 LGPL 许可证,在开放环境下开发,有数百名贡献者参与。
这场争论在 2014 年 Debian 技术委员会投票时达到白热化——当 systemd 被选为默认 init 系统后,委员会成员 Ian Jackson、核心开发者 Joey Hess 等人辞职抗议,称“systemd 的整合压力使正常维护工作几乎不可能进行”。这直接催生了 Devuan 项目,一个承诺永远不使用 systemd 的 Debian 分支。
三、systemd 争议时间线
timeline
title systemd 争议大事记
section 诞生与早期
2010 : Lennart Poettering 在 Red Hat 启动 systemd 项目
: 目标:替代 SysVinit,解决并行启动和依赖管理问题
section 快速扩张
2012 : Fedora 率先采用 systemd 作为默认 init 系统
: Arch Linux 跟进,引发社区首次大规模讨论
2013 : openSUSE 采用 systemd
: systemd 开始整合 udev、logind、journald 等组件
section Debian 风波
2014 : Debian 技术委员会投票选择 systemd 作为默认 init 系统
: Ian Jackson、Joey Hess 等多位核心开发者辞职抗议
: Mark Shuttleworth 宣布 Ubuntu 将弃用 Upstart 转投 systemd
: Devuan 项目诞生,承诺提供无 systemd 的 Debian 分支
section 全面普及
2015 : systemd 开始提供 login shell
2016 : systemd v230 强制用户登出时终止进程,引发新争议
2017 : systemd-resolved DNS 漏洞,Pwnie Awards 授予 Poettering "最差厂商回应奖"
section 新争议
2025 : Artix Linux 因 systemd-logind 依赖彻底放弃 GNOME 桌面支持
2026 : systemd 引入可选 birthDate 字段
: 引发"年龄验证"争议,开发者 Dylan Taylor 遭受骚扰和死亡威胁
: Liberated systemd 分支诞生,移除 birthDate 字段
四、架构对比:GNU/Linux vs systemd/Linux
graph TD
subgraph "传统 GNU/Linux 架构"
A1[Kernel] --> A2[SysVinit / OpenRC / runit]
A2 --> A3[syslog / rsyslog]
A2 --> A4[cron / atd]
A2 --> A5[udevd]
A2 --> A6[inetd / xinetd]
A2 --> A7[acpid]
A2 --> A8[NetworkManager / dhcpcd]
A3 --> A9[文本日志文件]
end
subgraph "systemd/Linux 架构"
B1[Kernel] --> B2[systemd PID 1]
B2 --> B3[journald 二进制日志]
B2 --> B4[systemd-timers 替代 cron]
B2 --> B5[systemd-udevd]
B2 --> B6[systemd-networkd]
B2 --> B7[systemd-logind]
B2 --> B8[systemd-resolved DNS]
B2 --> B9[systemd-nspawn 容器]
B3 --> B10[journalctl 查询工具]
end
style A2 fill:#90EE90
style B2 fill:#FFB6C1
五、Linux 发行版生态分裂
graph LR
subgraph "Linux 发行版生态"
direction TB
S[systemd 阵营] --> S1[Debian/Ubuntu]
S --> S2[Fedora/RHEL]
S --> S3[Arch Linux]
S --> S4[openSUSE]
S --> S5[CentOS/Rocky/Alma]
S --> S6[Gentoo 可选]
N[非 systemd 阵营] --> N1[Devuan SysVinit]
N --> N2[Alpine Linux OpenRC]
N --> N3[Void Linux runit]
N --> N4[Artix Linux OpenRC/runit]
N --> N5[Slackware SysVinit]
N --> N6[BSD 系列 OpenRC]
end
subgraph "争议核心"
C1[Unix 哲学<br/>做一件事并做好] -.冲突.-> C2[systemd 哲学<br/>统一整合管理]
C3[模块化可替换] -.冲突.-> C4[一体化生态锁定]
C5[文本日志可审计] -.冲突.-> C6[二进制日志高效查询]
end
S --- C2
N --- C1
六、2026 年的新火药桶:birthDate 字段
2026 年,systemd 引入了一个看似微不足道的改动——在 systemd 用户数据库中增加一个可选的 birthDate 字段,用于存储用户的出生日期。
开发者 Dylan Taylor 的初衷是为 Linux 发行版提供一个标准化的元数据字段,以便遵守美国各州新兴的年龄验证法律。但社区反应极为激烈:
- 批评者认为这是在 Linux 中植入政府监控的楔子,是对隐私和自由理念的背叛
- 支持者强调该字段完全可选,用户可以填任意值(包括 1900 年 1 月 1 日),不涉及 ID 验证或人脸识别
- 争论迅速失控,Dylan Taylor 遭遇了人肉搜索、骚扰、死亡威胁,被迫关闭 GitHub 仓库的 Issues 和 PR 页面
- Void Linux、Garuda Linux 明确拒绝该功能;Fedora 探索类似 Apple 的 API 折中方案
- 抗议分支 Liberated systemd 诞生,专门移除了 birthDate 字段
这场争议再次证明:在 Linux 社区,技术决策从来不只是技术决策,而是价值观的碰撞。
七、支持与反对:双方的核心论据
| 反对 systemd 的论点 | 支持 systemd 的论点 |
|---|---|
| PID 1 应该保持简单,复杂化带来崩溃风险 | SysVinit 已经坏了,而且没人修 |
| 违背 Unix “做一件事并做好” 的哲学 | 被取代的组件本身也是碎片化的,整合降低了整体复杂度 |
| 二进制日志不可审计、不可恢复 | journalctl -u nginx --since "1h ago" 比 grep 日志高效得多 |
| 单一文化风险,一个漏洞影响整个生态 | 替代方案(Upstart、OpenRC、runit、s6)都曾有机会,但 systemd 凭实力胜出 |
| 企业控制(Red Hat/IBM)令人不安 | LGPL 开源,数百名贡献者,开发过程完全透明 |
| 不可移植,破坏 Unix 生态多样性 | Linux 本来就不是 Unix,利用 Linux 特有 API 是合理选择 |
| 生态锁定,GNOME 等桌面强依赖 systemd | 集成带来功能,如 cgroup 隔离、socket 激活、容器管理 |
八、更深层的冲突:Unix 哲学 vs 现代操作系统
InfoWorld 在 2014 年提出了一个有趣的观察:systemd 之争可能是一场代际冲突。老一辈 Unix 用户深谙 1998 年之前的 Unix 设计哲学——那时 Unix 是为服务器和工作站设计的,不是为桌面和笔记本。而新一代开发者和用户从未经历过那个时代,对他们来说,systemd 的整合和便利是理所当然的进步。
一位评论者写道:
“那些不理解 Unix 的人,注定要重新发明它——而且造得很烂。” 这句话过去常被用来嘲笑 Windows。令人不安的是,现在它被用来形容 Linux 了。
但也有人反问:Unix 哲学本身是否还能支撑现代系统的复杂度?
systemd 的整合确实解决了许多真实存在的问题:嵌入式设备上的启动顺序、容器化环境中的进程隔离、多服务系统的依赖追踪。当一位管理员可以用 systemctl status 一眼看清所有服务状态时,这究竟是“违背哲学”还是“务实的进化”?
正如一位曾经的反对者后来反思的:
“真正的问题不是 systemd 是否打破了 Unix 哲学,而是旧的 Unix 哲学是否还能支撑现代系统的复杂度。”
九、结语:GNU 去哪儿了?
回到文章开篇的那幅图。GNU 的角马消失了,systemd 的 [●◄] 取而代之。
Richard Stallman 和 GNU 项目当年坚持将系统称为 GNU/Linux,是为了强调操作系统不仅仅是内核,还包括编译器、Shell、核心工具链等 GNU 项目的贡献。如今,systemd 已经替代了 GNU 项目中越来越多的组件——从 init 到设备管理,从日志到网络配置。
这张图既是技术现实的写照,也是社区情绪的缩影。
systemd 已经赢了市场份额——Debian、Ubuntu、Fedora、Arch、openSUSE、RHEL 及其衍生版全部默认使用 systemd。但反对者从未消失,Devuan、Alpine、Void、Artix 等项目仍在坚守。
这场争论的本质,或许正如 Solus 论坛一位用户所说:
“这不是 systemd 好不好的问题。这是关于 Linux 是否还有空间容纳多样性。systemd 的到来迫使社区直面自己的成熟——你不能再把 Linux 当作一个松散的组件联邦;它在实践中已经成为一个统一的操作系统,即便哲学上仍然拒绝承认这一点。”
无论站在哪一边,有一点是确定的:systemd 改变了 Linux,而 Linux 社区关于 systemd 的争论,也改变了开源社区自身——关于如何治理、如何妥协、如何在企业利益与社区价值观之间寻找平衡。
那张图上的角马不会真的回来。但角马的缺席,本身就是开源世界最持久、最深刻的注脚。
原文 https://blog.csdn.net/2301_79518550/article/details/162527287