本文へスキップ

Mold 3.0、Rust版リンカーをドロップイン置き換えとして公開

リンカーのMold 3.0は、Rust(ラスト)で書かれた最初のリリースです。Rust 1.95が必要で、IntelのoneTBBを使わず、最後のC++版である2.42.1と同じ速さでリンクします。

著者 Tech AI Wire Team

3 分で読めます

GitHubのmold 3.0.0リリースページのスクリーンショット。C++からRustへの書き直しを告げるリリースノートが表示されています。

数字で見る

minimum Rust version needed to build mold 3.0
1.95
the last C++ release, which 3.0 replaces
2.42.1
mold's median speedup over LLVM lld, per its README
4.9x
mold's link-time speedup over LLVM lld, August 2026 tests
TensorFlow 2.21
16.1x
Chromium 145
10.1x
ClickHouse 26.1
6.7x

Mold 3.0が2026年10月5日に公開されました。高速なLinux向けリンカーであるmoldの、Rustで書かれた最初のバージョンです。作者のRui Ueyama氏は、プログラム全体をC++から書き直しました。リリースノートは、すんなり置き換えられると約束しています。オプションも出力も速度も、最後のC++版であるmold 2.42.1と同じだということです。moldは今、Linuxの標準リンカーになることを目指しているため、この点は重要です。

リンカーの役割とmoldの位置づけ

リンカーは、プログラムをビルドする最後の工程です。コンパイラが各ソースファイルをオブジェクトファイルに変換します。リンカーはそれらの部品をつなぎ合わせ、実行できる一つのプログラムにします。大規模なプロジェクトでは、この工程に何秒もかかることがあります。しかも、小さな変更のたびに毎回実行されます。

ほとんどのLinuxシステムは、GNUプロジェクトのリンカーであるGNU ldを標準で使っています。LLVMのlldは、より高速な代替です。moldは、その両方を上回るために作られました。moldのリポジトリには、2026年8月に実施したテストによる次のリンク時間が載っています。

プログラムmoldLLVM lld高速化
Chromium 1451.65秒16.64秒10.1倍
TensorFlow 2.213.15秒50.73秒16.1倍
ClickHouse 26.10.98秒6.62秒6.7倍

これらの数字はC++版で測定されたものです。3.0のリリースノートは、リンク速度が「2.42.1と同等を保っている」としています。そのため、Rust版も同じ結果をうたっています。Ueyama氏は9月に初めてこの計画を示しました。その内容はmoldのRust書き換え、Linuxの標準リンカを目指すで伝えています。

mold 3.0で変わったこと

moldを呼び出すだけの人には、何も違って見えないはずです。GitHubのリリースノートとPhoronixによると、mold 3.0は次のとおりです。

  • 2.42.1と同じコマンドラインオプションを受け付けます
  • x86-64、AArch64、RISC-V、LoongArchを含む、同じCPUアーキテクチャに対応します
  • バグが修正された箇所を除き、同じ出力を生成します
  • 2.42.1と同じ速度でリンクします

本当の変化は、mold自体のビルド方法にあります。CMakeに代わり、Rustの標準ビルドツールであるCargoを使うようになりました。ビルドにはRust 1.95以降が必要です。

また、oneTBBも使わなくなりました。oneTBBは、処理をプロセッサのコアに分配するIntelのライブラリです。Linuxディストリビューションは、moldとは別にこのパッケージも配布しなければなりませんでした。

動いているリンカーを、なぜRustで書き直すのか

最大の理由は安全性です。リンカーは、自分が作ったのではないオブジェクトファイルを読み込みます。そのうえで、それらに対して低レベルのメモリ操作を大量に行います。

C++では、壊れた入力ファイルが一つあるだけで、本来触れてはならないメモリをそのコードが読んでしまうことがあります。Hardware Bustersは9月、まさにそこでメモリのバグがセキュリティのバグに変わると報じました。Rustはそうした読み取りを自動的にチェックします。Phoronixによると、その結果、moldは破損した入力ファイルを扱う際により安全になりました。

次の段階:リンカースクリプトと標準の座

3.x系列には明確な目標が一つあります。プロジェクトが掲げる目標は、「GNU ldとの間に残る互換性の差を、特にリンカースクリプト対応で埋めること」です。さらに、「moldがLinuxディストリビューションで標準リンカーとして採用される道を開くこと」も目指しています。

リンカースクリプトは、コードをメモリのどこに配置するかをリンカーに正確に指示する小さなファイルです。オペレーティングシステムのカーネル、ブートローダー、小型機器のファームウェアは、これに依存しています。Hardware Bustersによると、moldはこれまでそうしたプログラムをリンクできませんでした。それができるまでは、ディストリビューションはmoldをシステムの標準にできません。

開発者にとっての意味

3.0はドロップイン置き換えとして扱い、そのうえで検証してください。すでにmoldを使っているなら、ビルドフラグを変える必要はないはずです。まず、実際のプロジェクトを一つ、2.42.1と3.0の両方でリンクしてください。そのうえで、CIマシンを切り替える前にテストスイート全体を実行してください。

moldを自分でビルドする場合は、コンパイラを確認してください。Rust 1.95以降が必須です。そのため、一部の長期サポート版ディストリビューションが提供する古いRustでは、ビルドできない可能性があります。パッケージ担当者はoneTBBへの依存がなくなる一方で、Cargoによるビルドを引き受けることになります。

自分のリンク時間を測ってください。表の高速化の数値はmold自身のリポジトリによるもので、書き直しの前に測定されています。自分のコードで、フルビルドと小さな差分の再ビルドを、切り替えの前後で計測してください。

ディストリビューションの動きに注目してください。主要なディストリビューションがmoldを標準リンカーにすれば、そのシステム上のすべてのビルドが、誰も頼まなくてもmoldを使うようになります。その判断は今、3.x系列でのリンカースクリプト対応にかかっています。最初に注目すべきなのは、カーネルと組み込みの開発者です。

出典

  1. Mold 3.0 High Speed Linker Released Following Rust Rewrite - Phoronix
  2. Release mold 3.0.0 - GitHub
  3. rui314/mold - a modern linker - GitHub
  4. The Mold Linker Is Being Rewritten in Rust, and It Wants GNU ld's Job - Hardware Busters

関連記事

A terminal window showing a C++ project being linked with mold, with the elapsed link time visible in the output.
開発ツール

moldのRust書き換え、Linuxの標準リンカを目指す

moldはLLVMのlldより中央値で4.9倍速くリンクします。作者はこれをRust(ラスト)で書き直し、ディストリビューションに/usr/bin/ldとして採用させることを狙っています。