The JetBrains Blog

How Ubuntu Is Using Rust to Rebuild Core System Tools

8.5内容质量
How Ubuntu Is Using Rust to Rebuild Core System Tools

TL;DR · AI 摘要

Ubuntu通过Rust重构核心系统工具,以提升内存安全和系统稳定性,Canonical将其视为长期平台战略而非简单重写。

核心要点

  • Ubuntu转向Rust主要因内存安全和系统可靠性需求,减少崩溃与攻击面。
  • Canonical将Rust采纳视为长期平台决策,而非短期技术替换。
  • Rust吸引关注正确性的开发者,为Ubuntu生态贡献提供更清晰路径。

结构提纲

按章节快速跳转。

  1. Ubuntu重构核心工具的背景与动机,源自Canonical工程副总裁Jon Seager的思考。

  2. 内存安全、系统稳定性及跨行业适用性是Ubuntu选择Rust的核心驱动力。

  3. Rust通过内存安全减少崩溃,降低攻击面,提升关键系统可靠性。

  4. Canonical将Rust整合视为长期战略,而非短期技术替换项目。

  5. Rust吸引关注正确性的开发者,为Ubuntu生态贡献提供更清晰路径。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Ubuntu使用Rust重建核心系统工具
    • 动机
      • 内存安全
      • 跨行业可靠性
    • 实施策略
      • 长期平台决策
      • 开发者社区吸引
    • 成果
      • 减少崩溃
      • 降低攻击面

金句 / Highlights

值得收藏与分享的关键句。

  • “Rust提供了系统编程语言中最令人信服的工具集,以推进我们的议程。”

    Jon Seager, Canonical工程副总裁

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 内存安全减少崩溃,使系统更难被破坏,降低Canonical的漏洞修复成本。

    第3段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • Ubuntu的Rust重构聚焦于用户罕见但依赖的核心系统组件,而非表面工具。

    第2段

    ⬇︎ 下载 PNG𝕏 分享到 X
#Rust#Ubuntu#系统工具#内存安全#Canonical
打开原文

Ubuntu Rust:Canonical 如何现代化核心系统工具

RustRover

关注重要的事

关注:

  • 关注:
  • X X

下载

直播

RustRover

Ubuntu 如何使用 Rust 重建核心系统工具

Irina Mihajlovic

本文基于我们的开发者倡导者 Orhun Parmaksız 主持的 RustRover 直播,与 Canonical 工程副总裁 Jon Seager 共同探讨。他们讨论了 Ubuntu、Rust 以及核心系统软件的未来,包括 Canonical 如何推进 Rust 的采用,以及为什么一些最重要的变化发生在用户很少看到但每天依赖的系统部分。

在此观看完整视频 👇

有一个版本的故事是某人用 Rust 重写了 ls 并称之为革命。Ubuntu 采取了更为谨慎的方法。这始于 Jon Seager 在接任 Ubuntu 领导职务后不久自问的一个问题:过去让我们走到今天的东西可能无法支撑未来 20 年,那么我们该改变什么?

事实证明,答案涉及大量内存安全、对有计划风险的健康胃口,以及比任何人预期的更多关于 sudo 密码提示的观点。

为什么 Ubuntu 投注 Rust

Ubuntu 已经存在了 20 多年。它运行在 1500 万个部署实例上,你可以在服务器、桌面、边缘设备和汽车内部找到它。这种广泛的覆盖范围正是 Jon 思考安全性和系统韧性时的现实考量。它必须在大规模、跨行业和安全关键系统中可靠运行,而在这些系统中,崩溃不仅仅是不便的问题。

当 Jon 作为工程副总裁加入时,Rust 并不一定是计划的一部分。随着他思考未来几十年 Ubuntu 平台需要什么,他的想法发生了变化。

“在我看来,Rust 提供了系统编程语言中最令人信服的工具集,以推进这一议程。”

Jon Seager

Canonical 工程副总裁

安全性、韧性与内存安全

Rust 最明显的优点是内存安全,但 Jon 的表述略有不同。他将韧性描述为安全性和可靠性的交汇点。他将安全性和可靠性视为密切相关但不同的问题。

未处理的 panic 可能同时造成安全风险和可靠性故障。在汽车系统、工业控制软件和安全关键型基础设施中,这种差异的重要性不如结果:本不应停止运行的系统却停了下来。更少的内存错误意味着更少的崩溃、更少的攻击面,以及整体更难被破坏的系统。Canonical 的收入很大程度上建立在修补漏洞和提供支持的基础上。

Jon Seager 的长期平台愿景

Jon 将转向 Rust 描述为一项长期平台决策,而非一次重写运动。

技术案例只是故事的一部分。Jon同样关注Rust吸引的是哪些人。这些开发者重视正确性,认真思考安全性,并希望解决Ubuntu需要解决的问题。通过用Rust构建更多平台组件,Canonical为社区贡献创造了更清晰的路径。GNU coreutils已经存在了30年,这是一款优秀的软件。Jon对此表示了明确的认可。但30年也意味着积累了30年的漏洞,而认为Rust版本也存在漏洞的说法偏离了重点。更长期的问题是,如果平台的基础在未来20年中默认具备内存安全性,它是否会处于更好的状态?

Ubuntu 的变化

Ubuntu 并不是将所有内容都重写为 Rust。这个故事的标题经常让人误以为是这样,但 Canonical 正在选择性地、有意识地进行替换,优先考虑安全性和维护性最强的场景,从 LTS 版本的边界开始,因为用户在此处有回退选项,且成功几率最高。

coreutils、sudo-rs、ntpd-rs 和 UPKI

首批组件已出现在 Ubuntu 26.04 LTS 中。uutils coreutils 是 GNU coreutils 的 Rust 重实现,作为默认工具提供,目标是实现与 GNU 工具 100% 的逐 bug 兼容性。

sudo-rs 是 26.04 中的另一个重要组件,其方法截然不同。uutils 的目标是作为直接替代品,而 sudo-rs 提出的是一个完全不同的问题:如果今天重新设计 sudo,并吸取了 30 年的安全经验,它实际上会是什么样子?答案涉及一些有意识的行为变更。

ntpd-rs 接下来是列表中的下一个项目。Canonical 于 2026 年 6 月宣布,将资助 Trifecta Tech Foundation,将 ntpd-rs 带入 Ubuntu 作为默认的时间同步工具,最终用单一工具取代 chrony 和 linuxptp,该工具能够处理 NTP、NTS 和 PTP。计划在 Ubuntu 26.10 中将其归档,并在 Ubuntu 28.04 中实现完全默认切换。

UPKI 采用了不同的方法。这是一个与 Rustls 项目合作开发的新项目,旨在为 Linux 系统工具带来证书吊销功能。浏览器多年前就已实现这一点,但 curl、wget 和 OpenSSL 仍未能处理。UPKI 的首个发布里程碑目标是 Ubuntu 26.10 的证书吊销功能。

#### 为什么 ntpd-rs 不仅仅是一个直接替代品

精确的时间记录在比表面看起来更多的地方是安全关键:飞机、汽车和机器人中的微控制器;密钥频繁轮换的加密系统;以及时钟漂移会产生实际后果的位置系统。Chrony 能很好地处理基本的 NTP,但当需要 PTP(高精度时间协议)时会出现问题。在当今的 Linux 系统中,这意味着需要运行 chrony 和 linuxptp,甚至可能需要专用或卫星时间源,然后配置所有这些组件相互通信。Jon 将其描述为“相当不愉快”,这似乎还是低估了问题。ntpd-rs 的目标是将所有这些整合到一个工具中,仅需一个配置文件,同时具备内存安全性和高效性。

兼容性与有意为之的行为变更

  • uutils coreutils 努力实现 100% 兼容性,因此与 GNU 行为的差异被视为错误而非特性。实际上,这很难做到。Jon 最近分享的一个例子:当让 head 从空文件中读取 N 字节时,GNU coreutils 返回零。uutils 的初始实现返回错误,这在某种程度上更合理。但由于这破坏了 Obsidian snap 中一个隐藏的脚本,维护者最终还是改回了 GNU 的行为。兼容性始终是首要考虑。
  • sudo-rs 则没有做出此类承诺。它关注的是 sudo 应该是什么样子,而非它曾经的样子。一个引发强烈争议的变更是,默认情况下 sudo-rs 现在在终端输入密码时会显示星号。这种看似微小的用户体验变更却引发了意想不到的强烈反应。Jon 的观点是新行为更优——他们经过深思熟虑并坚持这一决定。

为何 Ubuntu 在 LTS 边界推出此变更

LTS 时间节点是经过精心设计的。长期支持版本是企业升级的时机,同时也是回退选项最关键的时刻。Canonical 选择在 LTS 边界进行这些变更,确保如果某些变更对你造成影响,你仍可获得前一版本长达 15 年的维护支持。旧版工具仍保留在归档中。没有人会在未收到警告的情况下被迫在生产系统中使用新行为。

Ubuntu Rust:打包与交付

交付内存安全的系统软件是一回事。真正将 Rust 代码以发行版规模打包到 Linux 发行版中则是另一回事,而大量不为人知的工作就发生在这个阶段。

软件包、cargo 审计与 snaps

Canonical 采用供应商方式管理 Rust 依赖项,而非将单个 crate 打包为独立的 deb 包。给定软件包的所有 crate 会被打包成一个 tarball,并作为最终制品的一部分进行交付,这与 Nix 的处理方式类似。这使依赖项表面更易管理,并使构建过程确定性更强,即使它们在正式意义上不完全可复现。2026 年初,cargo 审计功能在 Ubuntu 归档中的所有 Rust 软件包中上线。现在每个 Rust 二进制文件都嵌入了 SBOM(软件物料清单),列出了构建它所使用的精确 crate 和版本。当软件包被重新构建时,SBOM 会自动更新。这使得在发现漏洞时更容易确定确切的 crate 版本。然后是 snaps。无论你对它们持何种看法,Jon 承认它们解决了 Ubuntu 规模下难以用其他方式解决的特定问题:让现代软件在旧版本上运行。由于 snaps 带有自己的运行时,你可以将针对 Ubuntu 26.04 构建的 snap 在 22.04 或 24.04 上正确运行。对于 MSRV(最小 Rust 版本)持续上升的 Rust 软件包,这并非小事。这也是 JetBrains 能够在多个 LTS 版本上分发 RustRover 的方式,这一点在对话中也提到了。

未来方向

Canonical 正在逐步推进这项工作。每个发布周期,团队都会评估替换或重建某个组件能带来最清晰的安全性或维护性收益的领域。

系统软件和生态系统中更多 Rust 的应用

在 ntpd-rs 和 UPKI 之后,压缩库成为下一个关注重点。Canonical 正在评估 bzip2-rs、zlib-rs 和 zstd-rs。这里同样存在取舍问题。其中一个 zstd 实现能够捕获当前 C 库允许的一类不安全操作,但除非关闭这些检查否则会带来性能损耗。是否默认开启这些检查的决策看似微小,实则影响深远。

Jon 在直播中直言不讳地表示,Ubuntu 的目标不仅限于上游贡献,还包括 Rust 代码的交付、安全审计、维护者资助以及参与基础设施层面的供应链安全讨论。Canonical 希望这些工作能够被其他 Linux 发行版复用或采纳。

观看其他直播

Rust

Ubuntu 中的 Rust

  • 分享
  • Facebook
  • Twitter
  • LinkedIn