Rust 重写 Linux 核心工具链:uutils 0.7 发布,性能大幅优化
用 Rust 重写 GNU Coreutils 的项目 uutils,刚刚发了 0.7 版本。
这个项目的目标非常明确——用 Rust 语言一对一替换掉 Linux 系统里那些最基础的命令行工具,比如 ls、cp、cat、sort 等等。这些工具虽然不起眼,但几乎是每个 Linux 系统的地基。
这次更新改了什么
0.7 是一个以性能优化为主线的版本。根据发布说明,开发者对几十个实用工具进行了系统性的提速,主要手段包括:
- • 更快的哈希表实现:底层数据结构直接换掉,减少查找开销
- • 新的 ASCII 快速路径:对纯 ASCII 输入走专门的高速通道,避免不必要的 Unicode 处理逻辑
- • 减少 malloc 分配:多个命令的内存分配次数被大幅削减,这对于高频调用的小工具来说效果非常明显
除了性能,另一个重点方向是减少 unsafe 代码的使用。Rust 最大的安全卖点就是内存安全,但在性能敏感的底层代码中,开发者有时不得不绕过安全检查用 unsafe 块。这次更新把不少 unsafe 代码替换成了更安全的抽象,在不牺牲性能的前提下提升了代码整体的安全水位。
兼容性方面
uutils 项目用 GNU 的官方测试套件来衡量自己的兼容程度。这个版本的通过率从之前的 96.2% 变成了 94.5%,数字看上去反而降了。
但这并不是说功能退步了。实际原因是 GNU Coreutils 自己的 9.10 版本新增了 19 个测试用例,分母变大了。对比同样的测试基准,实际的兼容性是在持续改进的。
另外这版还修了在 NetBSD 和 PowerPC 架构上的编译问题,跨平台支持进一步完善。
这个项目为什么值得关注
GNU Coreutils 是 1992 年的产物,用 C 语言写的。这么多年下来,代码里积累了不少历史包袱,尤其是在内存安全方面,时不时就有 CVE 冒出来。
用 Rust 重写并不只是换个语言这么简单。Rust 的所有权模型从编译期就能杜绝一大类内存错误,这对于系统底层工具来说意义重大。
当然距离完全替代还有距离,94.5% 的兼容率意味着在某些边界场景下行为还和 GNU 版本不一致。但考虑到这是一个纯社区驱动的项目,这个进度已经相当可观了。
感兴趣的可以去 GitHub 上直接体验:https://github.com/uutils/coreutils
信息来源:
- • https://www.phoronix.com/news/Rust-Coreutils-uutils-0.7