bk99.de entertain the web since 1997

mold 3.0: Der schnelle Linker ist jetzt in Rust geschrieben

Zusammenfassung

Rui Ueyama veröffentlichte am 5. Oktober 2026 mold 3.0, die erste Version des schnellen Linkers nach der vollständigen Neuschreibung von C++ in Rust. Die neue Version soll ein direkter Ersatz für mold 2.42.1 sein, mit denselben Optionen, Zielarchitekturen und gleicher Geschwindigkeit. Ziel der 3.x-Reihe ist, die letzten Lücken zu GNU ld zu schließen, damit Linux-Distributionen mold als Standard-Linker nutzen können.

Was ist ein Linker und warum mold?

Ein Linker setzt die vom Compiler erzeugten Objektdateien und Bibliotheken zu einem lauffähigen Programm zusammen. Bei großen Projekten wie Browsern oder dem Kernel kann allein dieser Schritt viele Sekunden bis Minuten dauern, bei jedem Neubau. mold wurde dafür entwickelt, diese Wartezeit durch konsequente Parallelisierung drastisch zu verkürzen, und ist deutlich schneller als die klassischen Linker GNU ld und gold.

Für Entwickler bedeutet ein schneller Linker kürzere Wege zwischen Änderung und Test, für Distributionen schnellere Paketbauten.

Was die Umstellung auf Rust bringt

Die C++-Version konnte bei beschädigten Eingabedateien über Speichergrenzen hinaus lesen und mit einem Segmentation Fault abstürzen. In Rust sind diese Zugriffe geprüft; mold bricht dann kontrolliert mit einer Fehlermeldung ab. Gebaut wird jetzt mit Cargo statt CMake, die Abhängigkeit von oneTBB entfällt.

Geprüft wurde die Neufassung mit der Testsuite auf allen Zielarchitekturen, mit Vergleichen der Linker-Ausgabe über viele reale Projekte und mit dem Bau aller Gentoo-Pakete. Regressionen fand das Projekt dabei nicht. Nebenbei behebt die Version zahlreiche Fehler, etwa nicht deterministische Ausgaben und falsche Adressen bei bestimmten Relokationen.

Warum das über mold hinaus interessant ist

Eine vollständige Neuschreibung eines etablierten Werkzeugs gilt meist als riskant. mold zeigt, wie es gehen kann: klar als Ersatz ohne Funktionsänderung definiert, gegen das Verhalten des Vorgängers getestet und mit einem großen realen Testfall wie Gentoo abgesichert. Das passt zum breiteren Trend, sicherheitskritische Systemsoftware schrittweise in speichersichere Sprachen zu überführen.

Ideen

  • Ein Linker fügt Objektdateien und Bibliotheken zu einem Programm zusammen.
  • Konsequente Parallelisierung verkürzt das Linken großer Projekte erheblich.
  • Speichersichere Sprachen machen aus Speicherfehlern kontrollierte Abbrüche.
  • Eine Neuschreibung wird gegen das Verhalten des Vorgängers getestet.

Einsichten

  • Eine Neuschreibung gelingt eher, wenn sie als funktionsgleicher Ersatz definiert und so geprüft wird.
  • Der Bau einer ganzen Distribution ist ein strenger Praxistest für Systemwerkzeuge.

Fakten

  • mold 2.42.1 ist die letzte Version in C++.
  • mold 3.0 benötigt zum Bauen Rust 1.95 oder neuer sowie einen C-Compiler.
  • mold reserviert beim Start keine 8 GiB virtuellen Adressraum mehr und läuft damit auch unter ulimit -v.

Referenzen

Bemerkungen

  • mold stammt von Rui Ueyama, der zuvor auch den LLVM-Linker lld maßgeblich entwickelt hat.

Empfehlungen

  • Teste mold in eigenen Projekten mit -fuse-ld=mold oder mold -run und vergleiche die Bauzeiten.
  • Prüfe bei Paketbauten, ob eigene Build-Skripte noch CMake-Optionen von mold 2.x verwenden.

Release Notes lesen

Im Webarchiv suchen