Sylvestre Ledru, bekannt für seine Arbeit an der Debian GNU/Linux-Distribution unter Verwendung des Compilers Clang, berichtete über den erfolgreichen Abschluss eines Experiments zur Implementierung eines alternativen Satzes von coreutils, der in Rust neu geschrieben wurde. Zu den coreutils gehören Werkzeuge wie sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln und ls. Für die erste Phase der Integration der Rust-Version von coreutils in Debian wurden folgende Ziele festgelegt:
- Erstellung eines Pakets mit der alternativen Rust-Version von coreutils für Debian und Ubuntu.
- Download von Debian mit GNOME-Desktop unter Verwendung von rust-coreutils.
- Installation der 1000 beliebtesten Pakete aus dem Repository.
- Kompilierung von Firefox, LLVM/Clang und dem Linux-Kernel aus dem Quellcode in einer Umgebung mit rust-coreutils.
Nach der Erstellung von über 100 Patches für Rust/coreutils konnten alle festgelegten Ziele erfolgreich umgesetzt werden. Zu den laufenden Arbeiten gehören die Implementierung fehlender Dienstprogramme und Optionen, die Verbesserung der Codequalität und Konsistenz, die Entwicklung des Testsets sowie die Behebung von Abstürzen, die beim Ausführen des Testsets von GNU Coreutils auftreten (bislang werden 141 von 613 Tests erfolgreich durchgeführt).
Bei der Erstellung des rust-coreutils-Pakets wurde entschieden, das coreutils-Paket nicht zu ersetzen, sondern die parallele Verwendung zu ermöglichen. Die Rust-Versionen der Dienstprogramme werden in /usr/lib/cargo/bin/ installiert und durch Hinzufügen dieses Verzeichnisses zur Umgebungsvariable PATH aktiviert. Die Erstellung des rust-coreutils-Pakets wurde durch die Notwendigkeit erschwert, alle Build-Abhängigkeiten, einschließlich Rust und verschiedener kleiner Crate-Pakete, in das Repository hochzuladen.
Bei der Erstellung des Boot-Images traten keine besonderen Probleme auf, jedoch erforderte die Anpassung der Pakete für die Umgebung mit rust-coreutils viel Arbeit, da viele Post-Install-Skripte Dienstprogramme aus dem coreutils-Paket aufrufen. Die meisten Probleme ergaben sich durch das Fehlen notwendiger Optionen, zum Beispiel fehlten bei der 'cp'-Dienstprogramm die Optionen '—archive' und '—no-dereference', bei 'ln' gab es keine Unterstützung für die Option '—relative', bei mktemp fehlte '-t', bei sync '—fs' und bei install '—owner' und '—group'. Weitere Probleme traten aufgrund von Verhaltensunterschieden auf, wie zum Beispiel, dass das install-Dienstprogramm keine Angabe von /dev/null als Eingabedatei unterstützte, und bei mkdir anstelle von '—parent' die Option '—parents' vorhanden war, usw.
Bei der Testung von großen Codebasen gab es keine wesentlichen Probleme. Der Aufbau von Firefox und LLVM/Clang verwendet Python-Skripte und CMake, weshalb der Austausch von coreutils keine Auswirkungen hatte. Der Aufbau des Linux-Kernels verlief relativ reibungslos, es traten lediglich zwei Probleme auf: eine Fehlermeldung bei der Verwendung von chown mit einem symbolischen Link und das Fehlen der Option „-n“ in der ln-Dienstprogramm.
Quelle: opennet.ru
