Mold Linker 3.0.0 发布——重写为 Rust

高性能 ELF 链接器 mold 在将代码库从 C/C++ 迁移到 Rust 后发布了 3.0 版,据称还大量借助了大型语言模型。评论者权衡了 Rust 的优势——内存安全、更安全的并发以及不断成熟的生态——与其不足,例如对冷门架构的支持较弱,以及引导构建显著更复杂;这对那些从最小可信代码开始重建一切的安全导向 Linux 发行版来说尤其重要。这一变化也引发了与其他快速链接器和 Zig 等系统语言的比较,同时也带来了对 Rust 依赖体量及其对可复现、供应链安全构建影响的更广泛担忧。

重写为 Rust 的动机

  • 一些人推测主要驱动力是内存安全、对损坏输入的稳健处理,尤其是更安全、粒度更细的并发。
  • 另一些人认为,可以让 C/C++ 对畸形输入更健壮,但几位发帖者反驳说,长期证明大型 C/C++ 代码库是安全的,成本极高且容易出错。

在重写中使用 AI/LLM

  • 多位评论者指出,有提交记录归功于某个 LLM,并附上链接,称作者据说也确认使用了 LLM 协助。
  • 关于这究竟算“重写”还是“转译”存在争论;共识倾向于认为 Rust 现在是主要的、经过人工编辑的源码。

Rust 与 C/C++/Zig 以及安全/性能

  • 许多人认为 Rust 带来了“无畏并发”,并消除了整类 bug(use-after-free、数据竞争、double free)。
  • 一些人强调,边界检查只是 Rust 安全保证中的很小一部分。
  • Zig 被讨论为“更好的 C”,但缺少 Rust 的编译期内存保证;安全/快速构建模式以及禁用检查后引入的 UB 也是担忧点。
  • 还有人提到非技术因素:Rust 生态成熟度、行业支持以及采用度,而 Zig 相对年轻。

平台与后端支持

  • 讨论集中在 Rust 的平台覆盖:LLVM 与 GCC 后端。
  • LLVM 缺少 GCC 支持的若干传统/冷门架构(例如 Alpha、Itanium、PA‑RISC、SuperH);提到 Rust 的 GCC 后端在一定程度上缓解了这一点。

与 Wild Linker 的比较

  • Wild 被描述为另一款非常快的 ELF 链接器,主要专注于增量链接(尽管据说它目前还不支持真正的增量链接)。
  • 基准测试据称非常接近;Wild 往往更快,但双方“互有胜负”,都远超传统链接器。

Linux 发行版引导构建与供应链安全

  • 一位高度可复现、从零引导构建发行版的共同维护者,早期使用 mold2(C/C++)作为引导链接器,并且对 Rust 重写不满意。
  • 他们的模型是:从最小机器码开始引导一切,经由小型 C 编译器 → GCC/LLVM → Rust,采用严格的无二进制、确定性、封闭式构建。
  • Rust 被描述为极其昂贵的引导目标(依赖图庞大:Python、Perl、OpenSSL、LLVM 等),因此把 mold 放到 Rust 中,会使它在构建链中太靠后,无法加速 Rust 本身。
  • 其他人提出的方案包括:使用预构建二进制、缓存、stage0/stage2 Rust 编译器,或继续使用 mold2;该发行版维护者认为这些做法削弱了他们的威胁模型(不信任任何先前的二进制)。

开源维护与向后兼容

  • 下游用户预期与上游自由之间存在张力:
    • 一些人认为 mold“没有解决”一个真实的用户需求;他们希望更多协商和更慢的变更。
    • 另一些人强调,维护者除了许可证之外不负有任何保证,而依赖小众行为的用户可以 fork。
    • 也有人争论,大规模重写是否应该做成新项目,而不是用重大版本号升级。

Rust 引导构建工具

  • mrustc(Rust 到 C 的引导编译器)被提及为一种达到“足够现代”的 Rust、再实现自举的方法。
  • 一些人对“执着于完整自举”感到困惑;另一些人则指出,供应链攻击的快速增长足以说明其必要性。

其他观察

  • 对重写速度以及 Rust 作为系统语言的既有地位,普遍有正面反应。
  • 有人注意到 mold3 的 Cargo.lock 相对一些 Rust 项目来说比较小,但担心大量使用 crate 会削弱安全性方面的说法。