Ubuntu 26.10 把 cp、mv、rm 也换成了 Rust 版

Feng 75 阅读 AI技术

Ubuntu 26.10「Stonking Stingray」会成为第一个 coreutils 全盘 Rust 化的发行版。ls、cat、chmod、du 这些天天敲的命令,底层实现全部换成 uutils。cp、mv、rm 这三个此前被单独留下的命令,这次也补齐了。

为什么偏偏是这三个命令拖到最后

Canonical 的「锈化」从 2025 年起步,Ubuntu 25.10 是第一个吃螃蟹的版本,还把 Rust 版 sudo(sudo-rs)设成了默认。

但 cp、mv、rm 没跟上。原因不是没人写,而是安全审计卡住了。Canonical 委托 Zellic 审计 uutils,查出一批 TOCTOU 竞态问题——检查时到使用时之间的空窗,恰好是文件操作工具最致命的一类漏洞。

所以 26.04 LTS 里这三个命令继续用 GNU 实现。上游把问题解决之后,26.10 才补上最后三块拼图。

动机不是性能,是内存安全

Rust 能在编译期拦下内存错误,C 做不到。coreutils 是发行版的根基,根基里少一类内存错误,收益是系统性的。

对普通用户来说,这次迁移几乎无感。uutils 的目标是与 GNU 行为无缝兼容,任何行为偏差都按 bug 处理。之前确实出过一次 date 相关的 bug,但 Canonical 的整体态度是:用户不该知道自己用的是 GNU 还是 Rust。

想自己验证?先别急着上生产

在测试机上装 uutils 的 coreutils 包,用 update-alternatives 切换实现,就能对比同一命令在两套实现下的输出。

判定标准很简单:对同一批文件跑相同操作,比较退出码、stdout、stderr 是否逐字节一致。差异就是 bug,直接提 issue。

这里有个坑:不要在生产环境直接替换 coreutils。脚本里对错误信息、退出码、边缘行为的隐式依赖太多,一旦不一致,排查成本远高于收益。要试就在容器或快照里试。

后续还有一块要换

Ubuntu 27.10 计划把 Trifecta 基金会用 Rust 重写的 NTP 客户端设为默认时间同步工具。Canonical 每年向 Trifecta 捐 4 万欧元,资助这类 Rust 基础软件的重写工作。

26.10 的 beta 本月晚些时候发布,稳定版定在 10 月 15 日。

Feng
这位作者很神秘,还没有填写简介。