
Ubuntu 计划在将于 10 月 15 日发布的 26.10 “Stonking Stingray”版本中,首次默认搭载完全由 Rust 语言重写的核心命令行实用程序。随着最后三个遗留命令——cp、mv 和 rm——正式采用 uutils 的 Rust 实现,Canonical 历时多年、旨在以内存安全方案取代数十年历史 C 语言代码的努力宣告收官。
从渐进替换到全面落地
这一过渡始于 Ubuntu 25.10。工程师逐步替换常见工具的 Rust 版本,至 2026 年初已完成大部分工作。然而,“检查时与使用时”(TOCTOU)竞争条件漏洞等兼容性难题,曾迫使最后三个命令暂时保留 GNU 版本。
为确保安全,Canonical 委托独立安全公司 Zellic 于 2025 年底至 2026 年初对 Rust 代码库进行审计。审查共发现 113 个问题,其中 44 个被分配 CVE 编号。绝大多数问题现已修复,为最终迁移铺平道路。过程并非一帆风顺:今年 7 月,一个版本的 Rust cp 命令曾导致 Ubuntu 镜像构建失败,该包随后被撤回并在上游调整后重新引入。
安全优先与兼容性坚守
Canonical 工程副总裁 Jon Seager 将此举称为发行版的“氧化”(oxidising)过程,即逐步用 Rust 替换 C/C++ 组件。为此,Canonical 每年捐赠 4 万欧元支持 uutils、sudo-rs 等基于 Rust 的系统软件项目。Rust 能在编译时捕获缓冲区溢出、释放后使用(use-after-free)等内存错误,显著降低高权限工具的攻击面。
uutils 项目进展显著。首席开发者 Sylvestre Ledru 在 FOSDEM 2026 大会上透露,该实现已通过超过 95% 的 GNU 测试套件。9 月初发布的 0.11 版本引入了更智能的错误消息并提升了性能,部分命令运行速度甚至超越 GNU 等效版本。尽管如此,兼容性仍是首要目标:任何偏离 GNU 行为均被视为错误。例如,为解决 Obsidian snap 应用依赖旧行为的问题,uutils 团队调整了 head 命令处理空文件的方式。
对于偏好原始 GNU 工具或依赖精确输出格式的遗留脚本用户,新的 coreutils-from-gnu 软件包提供了经典版本,管理员可安装它以恢复原有行为。
行业标杆与未来展望
Canonical 采取了谨慎的渐进策略。变更首先出现在非 LTS 版本中以收集反馈,Ubuntu 26.04 仍将敏感命令保留在 GNU 代码上,直至问题彻底解决。早期数据显示,sort、tr 和 uniq 等命令速度提升显著,尽管 Rust 二进制文件较大导致 Docker 镜像略有增长,但 Canonical 认为这种安全权衡值得。
此举使 Ubuntu 在主流 Linux 发行版中率先全面承诺采用 Rust 核心实用程序。Debian、Fedora 等正密切关注,部分维护者已开始尝试。此外,Canonical 已在最近版本中将 sudo-rs 设为默认,并规划在未来版本(如 27.04)中将 ntpd-rs 作为标准时间同步守护进程。
Ubuntu 26.10 测试版将于本月晚些时候发布。对于系统管理员和开发者而言,这一底层转变潜移默化:命令行为保持一致,但代码不再易受整类漏洞利用影响。这一里程碑不仅验证了 Canonical 多年的投入,也为 Linux 社区展示了在保证可用性的前提下,将内存安全性延伸至技术栈最底层的可行路径。