高速なソフトウェアリンカーMoldがバージョン3.0となり、コードベースがC++からRustへ書き直された。プロジェクトのメンテナーは、今回のリリースを、最後のC++版である2.42.1をそのまま置き換えられるものと説明している。文書化された不具合修正を除き、コマンドラインオプション、対象アーキテクチャ、想定される出力は同じだという。
この書き直しは、利用者向けに新しい操作モデルを導入するのではなく、3.x系列の始まりとなる。メンテナーによると、リンク性能は引き続き2.42.1と同程度だ。対応するターゲットでテストを行い、さまざまなワークロードやオプションの組み合わせで出力を比較し、Gentooの全パッケージをビルドしたところ、リグレッションは見つからなかったという。これらはプロジェクト自身が報告した検証結果であり、独立した性能監査ではないが、互換性がリリースの中心的な基準だったことを示している。
Rustへの移行は、破損した入力ファイルからの安全でない読み取りへの対処も変える。C++の実装では、不正な形式のデータが範囲外のメモリー読み取りやセグメンテーション違反を引き起こす可能性があった。Rustの境界チェックでは、代わりに、不正なアクセスの時点でパニックが発生し、実行が停止する。考え得るリンカーの不具合がすべてなくなるわけではないが、ある種類の未チェックのメモリーアクセスが、明確に定義された実行時チェックに置き換わる。
ビルド手順は大きく変わった。Moldは現在、CMakeではなくCargoを使い、Rust 1.95以降とCコンパイラーを必要とする。ソースからビルドする開発者は、`cargo build --release`を実行した後、プロジェクトのインストールスクリプトを使う。従来のCMakeオプションはなくなり、ターゲットの選択はCargoのフィーチャーで行う。oneTBBへの依存も取り除かれた。
バージョン3.0には、書き直しにとどまらず、処理の正しさに関する幅広い修正が含まれる。静的実行ファイルやバージョンスクリプトに関わるクラッシュを修正し、出力ファイルを入力としても指定した場合に出力が破損することを防ぎ、セクションのガベージコレクション、シンボル処理、再配置の相互作用に関する複数の問題を正した。また、複数のモードで出力が非決定的になる問題に対処し、AArch64、ARM、RISC-V、LoongArchに影響するアーキテクチャ固有の問題も修正した。
プロジェクトは、Mold 3.xの長期的な目標として、GNU ldとの間に残る互換性の差、とりわけリンカースクリプト対応の差を埋め、Linuxディストリビューションの標準リンカーとして、より有力な候補になることを挙げている。その実現には、単なる速度以上のものが必要だ。ディストリビューションでの採用には、予測可能な出力、幅広いアーキテクチャへの対応、信頼できる診断機能、既存のビルドシステムとの互換性が求められる。
既存の利用者にとって、今回のリリースは、コマンドライン上の変化を抑えつつ、パッケージ作成者やソースからビルドする人には重要なツールの変更を伴う移行と位置づけられる。更新を検討するチームには、十分に新しいRustツールチェーンが必要で、自らのリンクテストと実行時テストの一式を走らせるべきだ。書き直しによって実装の新しい基盤が得られた一方、リリースノートは、実用上の互換性向上と欠陥修正が3.x系列で引き続き優先課題となることを明確にしている。



