上个月,jnsgruk发表了《未来20年的Ubuntu工程》(Engineering Ubuntu For the Next 20 Years)一文,其中概述了打算在未来几年中如何发展Ubuntu的四个关键主题。在这篇文章中,重点讨论 了"现代化"。在很多方面对Ubuntu进行现代化改造,例如专注于图形化shell体验、虚拟化堆栈、核心系统实用程序、默认shell实用程序等。
多年来,像 GNU Coreutils 这样的项目对于 Ubuntu 和其他 Linux 发行版给数百万用户带来的类似 Unix 的体验起到了至关重要的作用。GNU Coreutils是 GNU 操作系统的基本文件、shell 和文本操作实用工具。这些是每个操作系统都应具备的核心实用程序。对许多人来说,这个软件包提供的实用程序已成为 Linux 的代名词,如 ls、cp 和 mv。近年来,人们一直在努力用 Rust 重新实现这套工具,目标是实现与现有工具的 100% 兼容。类似的项目,如 sudo-rs ,旨在用更现代、内存更安全的工具替代关键的安全实用程序。
从 Ubuntu 25.10 开始,我们的目标是将其中一些现代实现作为默认设置。近期目标是将 uutils 的 coreutils 实现作为 Ubuntu 25.10 的默认设置,如果条件允许,还将在下一个长期支持(LTS)版本 Ubuntu 26.04 LTS 中采用。
But... why?
Rust 语言、其类型系统和借用检查器(以及其社区!)通力合作,鼓励开发人员编写安全、可靠、有弹性的软件。随着安全性的提高,安全保证也会随之提高,而随着安全性的提高,系统的整体弹性也会随之提高--还有什么比从构建发行版的基础工具开始更合适的呢?
最近,一篇关于 2025 年使用 Rust 开发基础软件的文章 。除其他外,这篇文章还声称 "基础软件需要性能、可靠性和生产力"。如果基础软件失效,那么构建在其上的所有其他层也会失效。如果基础软件包存在性能瓶颈,那么它们就会成为上面各层所能达到的性能的底线。
Ubuntu 为全球数百万台设备提供支持,从数据中心的服务器到自主系统中的安全关键系统,因此我们有责任确保我们所提供的软件是最有弹性、最值得信赖的。
要做到这一点,方法有很多:我们可以为 Kubernetes 等项目提供长期支持 ,我们可以努力做到符合以安全为中心的标准 ,但另一种方法是以安全、稳健、正确和弹性为核心价值来发布软件。
当然,这并不是要对现有的实现方法指手画脚。这些工具中的许多已经稳定运行多年,默默地提高性能、修复漏洞。在较新实现上工作的一个可爱的副作用是,它有时也会促进原始上游项目的改进!
uutils 重写除了更宽松的许可证以外,还有如下几个优点:
提供对 Windows、macOS、BSD、甚至安卓(通过 busybox)的支持
提供单文件版本
提供一些改善生活质量的小功能
为什么要用 Rust 来重写这些工具?
Sylvestre 在接受采访的时候说,这些核心组件的代码有些可能已经有三十多年四十年,他们时至今日依然可以正常运作------但有些已经失去了维护。
为什么会选择 Rust,Sylvestre 提到了年轻人对 C 语言的兴致没有以前那么高了,他们更喜欢更"酷"的语言,让下一代人维护这些核心设施更加轻松是他的主要驱动力。我们没办法保证未来三十年,甚至是十年后还能有足量的、能力足够的 C 语言用户来维护这些古老的从上世纪传流下来的代码。
除此之外,使用 Rust 的主要理由并非是很多人津津乐道的安全性,而主要是因为这门语言结合了很多工程经验使其更加易用:比如 cargo,比如并发,比如些许函数式特性。
由于 Sylvestre 先前参与了 Clang 和 LLVM 的开发,而 Clang 有个很经典的观点:"如果我们没有实现一个 GCC 标志(功能?),那就是个 bug",他带着这个信念参加了 uutils 的开发并且成为了现在 uutils 的主要维护者,我认为没有这个观点 uutils 的 coreutils 不会在今天能够成为 Ubuntu 25.10 的选择:带着这个观点,实现相同的数据处理模型,再加上吸收了更多工程经验的系统级语言作为工具,全新的代码基更能面对未来维护上的挑战。

从 Rust 使用者/爱好者的角度来说是个巨大的利好,因为 Ubuntu 下场有望促进 uutils 项目和相关依赖的迅速迭代。不过就目前 uutils 项目的完成度来看,25.10 是否能引入还是需要打一个大问号的。目前来看,虽然进展整体不错,但还是有不少测例是skip和fail状态的。
参考:
https://discourse.ubuntu.com/t/carefully-but-purposefully-oxidising-ubuntu/56995