Rust Coreutils 0.8: Von nix zu rustix – und dd legt 45 Prozent zu

Die Rust-Neuimplementierung der GNU Coreutils wird schneller, läuft im Browser und sichert Systemaufrufe besser ab. Was Version 0.8 im Detail bringt.

vorlesen Druckansicht 8 Kommentare lesen
Ein Emblem mit den Worten "Open Source", Bergen, einem Fluss und einem Netzwerk-Symbol auf einem lila Hintergrund mit Sternen und einem Gitter.

(Bild: heise medien)

Lesezeit: 3 Min.
Inhaltsverzeichnis

Die in Rust geschriebene Neuimplementierung der klassischen Unix-Werkzeugsammlung legt mit Version 0.8.0 deutlich nach: Die Entwickler der uutils coreutils melden spürbare Performance-Zuwächse quer über viele Programme, bauen die Unterstützung für WebAssembly deutlich aus und sichern zugleich die systemnahen Aufrufe besser ab. Auch die GNU-Kompatibilität steigt weiter, während die Entwickler zahlreiche Absturzursachen beseitigt haben.

Das Projekt uutils coreutils implementiert die bekannten GNU Coreutils – etwa ls, cp, cat oder sort – vollständig in Rust neu. Im Fokus stehen Speicher- und Typsicherheit, hohe Kompatibilität zum GNU-Verhalten und gute Portierbarkeit auf unterschiedliche Plattformen.

Im Zentrum der neuen Version stehen breit angelegte Performance-Optimierungen. Am deutlichsten fällt der Zugewinn bei dd aus: Durch effizientere Thread-Nutzung in der gemeinsamen Bibliothek uucore arbeitet das Tool laut Release Notes bis zu 45 Prozent schneller. Auch ls profitiert: Statt rekursiver Verzeichnisdurchläufe nutzt es jetzt eine iterative Tiefensuche. Das spart Funktionsaufrufe und Speicherallokationen, vor allem bei tief verschachtelten Verzeichnisbäumen. Weitere Optimierungen betreffen I/O-Pfade und Syscall-Nutzung: cat vermeidet nun unnötige pipe()-Aufrufe, wc und tee gehen effizienter mit großen Datenströmen um. Auch die Startzeit aller Utilities sinkt, weil uucore den Syscall rt_sigaction nur noch einmal statt 62-mal aufruft.

Parallel treiben die Entwickler die interne Modernisierung voran. Ein zentraler Schritt ist die Migration von der Rust-Bibliothek nix zu rustix. Letztere bildet POSIX- und Linux-Systemaufrufe typsicherer ab und reduziert den Anteil an unsafe-Code. In dieser Version haben die Entwickler bereits zahlreiche Utilities umgestellt, darunter cat, df, wc, tty, tsort, tail, touch, date, mkdir und uucore. Auch in hostname, logname, nice und who schrumpfen die unsicheren Codebereiche.

Videos by heise

Deutlich ausgebaut wurde die WebAssembly-Unterstützung: Mehr als 70 Utilities laufen jetzt in WASI-Umgebungen. Ein neuer Online-Playground macht die Coreutils direkt im Browser zugänglich. Technisch erfordert das einige Anpassungen, zum Beispiel den Verzicht auf Multithreading bei sort oder das Einbetten aller Lokalisierungsdaten ins Binary.

Die Zahl bestandener Tests aus der GNU-Test-Suite steigt auf 630 – einen mehr als in Version 0.7. Die Entwickler arbeiten weiterhin eng mit dem GNU-Projekt zusammen und melden gefundene Fehler zurück. Beide Projekte profitieren davon.

Zudem enthält das Release zahlreiche Detailverbesserungen. Die Fehlerbehandlung wurde robuster, etwa bei ungewöhnlichen Eingaben oder beim Schreiben nach /dev/full. Die Plattformunterstützung wächst, unter anderem für NetBSD und Windows. Die Dokumentation bringt überarbeitete Manpages mit Praxisbeispielen, Quellcode-Links und Übersetzungen in mehreren Sprachen.

Alle Informationen zu den uutils coreutils 0.8.0 finden sich in den Release Notes auf GitHub.

(fo)