编程与软件开发

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

Canonical 正在采取选择性方式,将 Rust 引入 Ubuntu 核心工具,从 Ubuntu 26.04 LTS 开始,重点关注内存安全性、可靠性和可维护性。计划包括 uutils coreutils、sudo-rs、ntpd-rs 和 UPKI 项目,同时在过渡阶段保留旧工具和回退选项。

2026-08-26
2 分钟阅读
10 浏览量
فريق تحرير certi.news
Ubuntu 如何使用 Rust 重构核心系统工具

Canonical 并没有用 Rust 完全重写 Ubuntu,但已经开始在其认为内存安全和可维护性收益足以证明迁移成本合理的关键位置,替换核心系统组件。根据 Canonical 工程副总裁 Jon Seager 在 JetBrains 主办的一场直播中的介绍,这一决定是面向长期的愿景的一部分,目标平台将在服务器、桌面设备、边缘设备以及汽车内部运行约 1500 万个部署实例。

这一方向关注的是 Ubuntu 在未来二十年需要什么,而不是发起一场重新实现所有现有工具的行动。Canonical 认为,Rust 为系统开发提供了一套很有说服力的工具,尤其是在内存错误防护和可靠性对于运行在工业系统、汽车或敏感基础设施中的软件具有重要影响时。

选择性替换,而非全面重写

首批此类组件已进入 Ubuntu 26.04 LTS。uutils coreutils 是 GNU coreutils 工具的 Rust 重实现,如今已成为默认选项,其明确目标是实现与 GNU 工具行为的完全兼容。这意味着,行为上的细微差异未必会被视为改进;如果它破坏了脚本或依赖旧行为的工具,反而可能被视为错误。

sudo-rs 则采取了不同路径。该项目并不追求与 sudo 完全一致,而是基于数十年的安全经验,重新思考如果今天设计权限授予工具,它应当是什么样子。其中一个引发强烈反应的变化是:在终端输入密码时,默认显示星号。Canonical 表示,即使这些有意的变化会在短期内造成摩擦,它也愿意接受,因为这些变化属于全新设计,而不只是一个完全相同的替代品。

时间和证书也在变化范围之内

下一个项目是 ntpd-rs。Canonical 于 2026 年 6 月宣布通过 Trifecta Tech Foundation 为其提供资金,目标是使其成为 Ubuntu 默认的时间同步工具。计划是在 Ubuntu 26.10 中将其归档,随后在 Ubuntu 28.04 中将其完全转为默认选项,并通过一个同时支持 NTP、NTS 和 PTP 的工具,逐步取代 chrony 和 linuxptp。

这一变化的重要性在于,精确的时间同步并不局限于网络服务器。它会影响飞机、汽车和机器人中的微控制器,也会影响定期轮换密钥的加密系统以及依赖位置的系统。文章指出,同时使用 chrony 和 linuxptp 可能需要配置多套工具和时间源,而 ntpd-rs 旨在将这些功能集中到一个工具和一个配置文件中,同时利用内存安全性。

UPKI 项目与这些替换项目不同,它是与 Rustls 项目合作从零开始的新项目,目标是为 Linux 中的系统工具加入证书吊销验证。Canonical 计划让它首次进入 Ubuntu 26.10。文章称,这一构想涉及 curl、wget 和 OpenSSL 等工具,而这类证书吊销处理尚未像在浏览器中那样,以相同方式集成到这些工具中。

对用户而言,实际会发生什么变化?

Canonical 选择在 LTS 版本节点引入这些变化,因为机构通常会在这些节点更新系统,而且在改变底层工具时,拥有回退路径非常重要。文章称,之前的版本将获得 15 年的托管支持,旧工具也会保留在归档中,因此不会在没有回退选项的情况下,强迫现有生产系统采用新行为。

不过,各项目之间的兼容性并不统一。uutils coreutils 曾遇到一个实际案例:当要求从空文件中读取一定数量的字节时,head 工具返回了错误,而 GNU coreutils 返回零。该差异导致隐藏在 Obsidian snap 软件包中的脚本被破坏,后来调整行为以与 GNU 保持一致。这一例子说明,内存安全并不会消除与围绕旧工具积累了 30 年的假设保持兼容的重要性。

挑战并不止于编写代码

将 Rust 引入大型发行版,还需要处理依赖关系、构建和分发等一系列问题。Canonical 采用的方式是将每个软件包的 crates 集合到一个归档中,而不是将每个 crate 分别打包成独立的 deb 软件包。根据文章,这有助于使依赖关系的范围保持可管理,并让构建过程具有确定性,尽管从正式意义上说并不具备可复现性。

2026 年早些时候,cargo auditable 已推广到 Ubuntu 归档中的所有 Rust 软件包。每个 Rust 二进制文件都包含内置的 SBOM,记录构建时所使用的 crates 名称及其版本,并会在软件包重新构建时自动更新。这些数据无法阻止漏洞,但在某个依赖项出现问题时,可以更直接地确定受影响的版本。

certi.news 解读:这里真正发生的变化不仅仅是把用 C 编写的工具替换成用 Rust 编写的工具,而是将安全、可维护性和依赖追踪层引入那些一旦广泛部署就很难再改变的组件。另一方面,兼容性案例和 sudo-rs 的行为表明,这一迁移可能会带来用户能够察觉的设计决策,其成功将取决于对这些差异的管理程度,就像取决于实现语言本身一样。ntpd-rs 和 UPKI 公布的时间表仍然是未来目标,而消息来源表明,变化范围是选择性的,旧工具和回退选项仍然是 Canonical 战略的一部分。

新闻来源
JetBrains Blog
查看原始来源 ↗
ف
作者

فريق تحرير certi.news

同一分类

你可能还喜欢

查看所有新闻