
上图精准地概括了 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 争议时间线
#mermaid-svg-WKjzTfHPLfdTrkcv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-WKjzTfHPLfdTrkcv .error-icon{fill:#552222;}#mermaid-svg-WKjzTfHPLfdTrkcv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WKjzTfHPLfdTrkcv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WKjzTfHPLfdTrkcv .marker.cross{stroke:#333333;}#mermaid-svg-WKjzTfHPLfdTrkcv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WKjzTfHPLfdTrkcv p{margin:0;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge{stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .section--1 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section--1 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section--1 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section--1 text{fill:#ffffff;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth--1{stroke-width:17;}#mermaid-svg-WKjzTfHPLfdTrkcv .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:#ffffff;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-0 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-0 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-0 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-0 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-0{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-0{stroke-width:14;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-1 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-1 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-1 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-1 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-1{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-1{stroke-width:11;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-2 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-2 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-2 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-2 text{fill:#ffffff;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-2{stroke-width:8;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:#ffffff;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-3 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-3 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-3 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-3 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-3{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-3{stroke-width:5;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-4 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-4 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-4 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-4 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-4{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-4{stroke-width:2;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-5 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-5 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-5 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-5 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-5{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-5{stroke-width:-1;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-6 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-6 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-6 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-6 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-6{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-6{stroke-width:-4;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-7 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-7 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-7 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-7 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-7{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-7{stroke-width:-7;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-8 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-8 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-8 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-8 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-8{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-8{stroke-width:-10;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-9 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-9 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-9 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-9 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-9{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-9{stroke-width:-13;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-10 rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-10 path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-10 circle,#mermaid-svg-WKjzTfHPLfdTrkcv .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-10 text{fill:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .node-icon-10{font-size:40px;color:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .edge-depth-10{stroke-width:-16;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-WKjzTfHPLfdTrkcv .lineWrapper line{stroke:black;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled circle,#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:lightgray;}#mermaid-svg-WKjzTfHPLfdTrkcv .disabled text{fill:#efefef;}#mermaid-svg-WKjzTfHPLfdTrkcv .section-root rect,#mermaid-svg-WKjzTfHPLfdTrkcv .section-root path,#mermaid-svg-WKjzTfHPLfdTrkcv .section-root circle{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-WKjzTfHPLfdTrkcv .section-root text{fill:#ffffff;}#mermaid-svg-WKjzTfHPLfdTrkcv .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-WKjzTfHPLfdTrkcv .edge{fill:none;}#mermaid-svg-WKjzTfHPLfdTrkcv .eventWrapper{filter:brightness(120%);}#mermaid-svg-WKjzTfHPLfdTrkcv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 诞生与早期 2010 Lennart Poettering在 Red Hat 启动systemd 项目 目标:替代SysVinit,解决并行启动和依赖管理问题 快速扩张 2012 Fedora 率先采用systemd 作为默认init 系统 Arch Linux跟进,引发社区首次大规模讨论 2013 openSUSE 采用systemd systemd 开始整合udev、logind、journald等组件 Debian 风波 2014 Debian技术委员会投票选择systemd 作为默认init 系统 Ian Jackson、JoeyHess等多位核心开发者辞职抗议 Mark Shuttleworth宣布 Ubuntu 将弃用Upstart 转投systemd Devuan项目诞生,承诺提供无systemd 的 Debian分支 全面普及 2015 systemd 开始提供login shell 2016 systemd v230强制用户登出时终止进程,引发新争议 2017 systemd-resolvedDNS 漏洞,PwnieAwards 授予Poettering"最差厂商回应奖" 新争议 2025 Artix Linux 因systemd-logind依赖彻底放弃GNOME 桌面支持 2026 systemd 引入可选birthDate 字段 引发"年龄验证"争议,开发者Dylan Taylor遭受骚扰和死亡威胁 Liberated systemd分支诞生,移除birthDate 字段 systemd 争议大事记
四、架构对比:GNU/Linux vs systemd/Linux
#mermaid-svg-2PtrflCCyVXcWI5h{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2PtrflCCyVXcWI5h .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2PtrflCCyVXcWI5h .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2PtrflCCyVXcWI5h .error-icon{fill:#552222;}#mermaid-svg-2PtrflCCyVXcWI5h .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2PtrflCCyVXcWI5h .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2PtrflCCyVXcWI5h .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2PtrflCCyVXcWI5h .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2PtrflCCyVXcWI5h .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2PtrflCCyVXcWI5h .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2PtrflCCyVXcWI5h .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2PtrflCCyVXcWI5h .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2PtrflCCyVXcWI5h .marker.cross{stroke:#333333;}#mermaid-svg-2PtrflCCyVXcWI5h svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2PtrflCCyVXcWI5h p{margin:0;}#mermaid-svg-2PtrflCCyVXcWI5h .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2PtrflCCyVXcWI5h .cluster-label text{fill:#333;}#mermaid-svg-2PtrflCCyVXcWI5h .cluster-label span{color:#333;}#mermaid-svg-2PtrflCCyVXcWI5h .cluster-label span p{background-color:transparent;}#mermaid-svg-2PtrflCCyVXcWI5h .label text,#mermaid-svg-2PtrflCCyVXcWI5h span{fill:#333;color:#333;}#mermaid-svg-2PtrflCCyVXcWI5h .node rect,#mermaid-svg-2PtrflCCyVXcWI5h .node circle,#mermaid-svg-2PtrflCCyVXcWI5h .node ellipse,#mermaid-svg-2PtrflCCyVXcWI5h .node polygon,#mermaid-svg-2PtrflCCyVXcWI5h .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2PtrflCCyVXcWI5h .rough-node .label text,#mermaid-svg-2PtrflCCyVXcWI5h .node .label text,#mermaid-svg-2PtrflCCyVXcWI5h .image-shape .label,#mermaid-svg-2PtrflCCyVXcWI5h .icon-shape .label{text-anchor:middle;}#mermaid-svg-2PtrflCCyVXcWI5h .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2PtrflCCyVXcWI5h .rough-node .label,#mermaid-svg-2PtrflCCyVXcWI5h .node .label,#mermaid-svg-2PtrflCCyVXcWI5h .image-shape .label,#mermaid-svg-2PtrflCCyVXcWI5h .icon-shape .label{text-align:center;}#mermaid-svg-2PtrflCCyVXcWI5h .node.clickable{cursor:pointer;}#mermaid-svg-2PtrflCCyVXcWI5h .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2PtrflCCyVXcWI5h .arrowheadPath{fill:#333333;}#mermaid-svg-2PtrflCCyVXcWI5h .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2PtrflCCyVXcWI5h .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2PtrflCCyVXcWI5h .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2PtrflCCyVXcWI5h .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2PtrflCCyVXcWI5h .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2PtrflCCyVXcWI5h .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2PtrflCCyVXcWI5h .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2PtrflCCyVXcWI5h .cluster text{fill:#333;}#mermaid-svg-2PtrflCCyVXcWI5h .cluster span{color:#333;}#mermaid-svg-2PtrflCCyVXcWI5h div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2PtrflCCyVXcWI5h .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2PtrflCCyVXcWI5h rect.text{fill:none;stroke-width:0;}#mermaid-svg-2PtrflCCyVXcWI5h .icon-shape,#mermaid-svg-2PtrflCCyVXcWI5h .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2PtrflCCyVXcWI5h .icon-shape p,#mermaid-svg-2PtrflCCyVXcWI5h .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2PtrflCCyVXcWI5h .icon-shape .label rect,#mermaid-svg-2PtrflCCyVXcWI5h .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2PtrflCCyVXcWI5h .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2PtrflCCyVXcWI5h .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2PtrflCCyVXcWI5h :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} systemd/Linux 架构
Kernel
systemd PID 1
journald 二进制日志
systemd-timers 替代 cron
systemd-udevd
systemd-networkd
systemd-logind
systemd-resolved DNS
systemd-nspawn 容器
journalctl 查询工具
传统 GNU/Linux 架构
Kernel
SysVinit / OpenRC / runit
syslog / rsyslog
cron / atd
udevd
inetd / xinetd
acpid
NetworkManager / dhcpcd
文本日志文件
五、Linux 发行版生态分裂
#mermaid-svg-266sx8RrCl8E0EMS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-266sx8RrCl8E0EMS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-266sx8RrCl8E0EMS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-266sx8RrCl8E0EMS .error-icon{fill:#552222;}#mermaid-svg-266sx8RrCl8E0EMS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-266sx8RrCl8E0EMS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-266sx8RrCl8E0EMS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-266sx8RrCl8E0EMS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-266sx8RrCl8E0EMS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-266sx8RrCl8E0EMS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-266sx8RrCl8E0EMS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-266sx8RrCl8E0EMS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-266sx8RrCl8E0EMS .marker.cross{stroke:#333333;}#mermaid-svg-266sx8RrCl8E0EMS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-266sx8RrCl8E0EMS p{margin:0;}#mermaid-svg-266sx8RrCl8E0EMS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-266sx8RrCl8E0EMS .cluster-label text{fill:#333;}#mermaid-svg-266sx8RrCl8E0EMS .cluster-label span{color:#333;}#mermaid-svg-266sx8RrCl8E0EMS .cluster-label span p{background-color:transparent;}#mermaid-svg-266sx8RrCl8E0EMS .label text,#mermaid-svg-266sx8RrCl8E0EMS span{fill:#333;color:#333;}#mermaid-svg-266sx8RrCl8E0EMS .node rect,#mermaid-svg-266sx8RrCl8E0EMS .node circle,#mermaid-svg-266sx8RrCl8E0EMS .node ellipse,#mermaid-svg-266sx8RrCl8E0EMS .node polygon,#mermaid-svg-266sx8RrCl8E0EMS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-266sx8RrCl8E0EMS .rough-node .label text,#mermaid-svg-266sx8RrCl8E0EMS .node .label text,#mermaid-svg-266sx8RrCl8E0EMS .image-shape .label,#mermaid-svg-266sx8RrCl8E0EMS .icon-shape .label{text-anchor:middle;}#mermaid-svg-266sx8RrCl8E0EMS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-266sx8RrCl8E0EMS .rough-node .label,#mermaid-svg-266sx8RrCl8E0EMS .node .label,#mermaid-svg-266sx8RrCl8E0EMS .image-shape .label,#mermaid-svg-266sx8RrCl8E0EMS .icon-shape .label{text-align:center;}#mermaid-svg-266sx8RrCl8E0EMS .node.clickable{cursor:pointer;}#mermaid-svg-266sx8RrCl8E0EMS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-266sx8RrCl8E0EMS .arrowheadPath{fill:#333333;}#mermaid-svg-266sx8RrCl8E0EMS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-266sx8RrCl8E0EMS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-266sx8RrCl8E0EMS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-266sx8RrCl8E0EMS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-266sx8RrCl8E0EMS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-266sx8RrCl8E0EMS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-266sx8RrCl8E0EMS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-266sx8RrCl8E0EMS .cluster text{fill:#333;}#mermaid-svg-266sx8RrCl8E0EMS .cluster span{color:#333;}#mermaid-svg-266sx8RrCl8E0EMS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-266sx8RrCl8E0EMS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-266sx8RrCl8E0EMS rect.text{fill:none;stroke-width:0;}#mermaid-svg-266sx8RrCl8E0EMS .icon-shape,#mermaid-svg-266sx8RrCl8E0EMS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-266sx8RrCl8E0EMS .icon-shape p,#mermaid-svg-266sx8RrCl8E0EMS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-266sx8RrCl8E0EMS .icon-shape .label rect,#mermaid-svg-266sx8RrCl8E0EMS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-266sx8RrCl8E0EMS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-266sx8RrCl8E0EMS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-266sx8RrCl8E0EMS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 争议核心
Linux 发行版生态
冲突
冲突
冲突
systemd 阵营
Debian/Ubuntu
Fedora/RHEL
Arch Linux
openSUSE
CentOS/Rocky/Alma
Gentoo 可选
非 systemd 阵营
Devuan SysVinit
Alpine Linux OpenRC
Void Linux runit
Artix Linux OpenRC/runit
Slackware SysVinit
BSD 系列 OpenRC
Unix 哲学
做一件事并做好
systemd 哲学
统一整合管理
模块化可替换
一体化生态锁定
文本日志可审计
二进制日志高效查询
六、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 的争论,也改变了开源社区自身------关于如何治理、如何妥协、如何在企业利益与社区价值观之间寻找平衡。
那张图上的角马不会真的回来。但角马的缺席,本身就是开源世界最持久、最深刻的注脚。