Sylvestre Ledru, bekannt fĂŒr seine Arbeit am Debian GNU/Linux mit dem Clang-Compiler, berichtete ĂŒber den erfolgreichen Abschluss eines Experiments zur Verwendung eines alternativen Satzes von coreutils, der in Rust neu geschrieben wurde. Zu den coreutils gehören Programme 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 Version von coreutils in Rust fĂŒr Debian und Ubuntu.
- Debian mit der GNOME-Desktopumgebung herunterladen, unter Verwendung von rust-coreutils.
- Installation der 1000 beliebtesten Pakete aus dem Repository.
- Komplizierte den Firefox, LLVM/Clang und den Linux-Kernel aus den Quellcodes in einer Umgebung mit rust-coreutils.
Nach der Erstellung von ĂŒber 100 Patches fĂŒr Rust/coreutils wurden alle festgelegten Ziele erfolgreich umgesetzt. Zu den laufenden Arbeiten zĂ€hlen die Implementierung fehlender Programme und Optionen, die Verbesserung der QualitĂ€t und Konsistenz des Codes, die Entwicklung eines Testsets und die Behebung von AbstĂŒrzen, die beim AusfĂŒhren des Testsets von GNU Coreutils auftreten (derzeit werden 141 von 613 Tests erfolgreich bestanden).
Bei der Erstellung des Pakets rust-coreutils wurde entschieden, das Paket coreutils nicht zu ersetzen, sondern die Möglichkeit einer parallelen Nutzung zu gewĂ€hrleisten. Die Rust-Versionen der Programme werden in /usr/lib/cargo/bin/ installiert und durch HinzufĂŒgen dieses Verzeichnisses zur Umgebungsvariable PATH aktiviert. Die Erstellung des Pakets rust-coreutils 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 bootfĂ€higen Images gab es keine besonderen Probleme, jedoch erforderte die Anpassung der Pakete fĂŒr die Umgebung mit rust-coreutils viel Arbeit, da viele Post-Install-Skripte Programme aus dem Satz coreutils aufrufen. Die meisten Probleme traten aufgrund fehlender erforderlicher Optionen auf, beispielsweise fehlten in der cp-Anwendung die Optionen âarchive und âno-dereference, ln unterstĂŒtzte nicht die Option ârelative, und mktemp hatte -t, sync -fs, install âowner und âgroup. Weitere Probleme traten aufgrund von Verhaltensunterschieden auf, zum Beispiel unterstĂŒtzte die install-Anwendung nicht die Angabe von /dev/null als Eingabedatei, und in mkdir gab es anstelle von âparent die Option âparents usw.
Bei der Testung von groĂen Codebasen traten keine gröĂeren Probleme auf. Bei der Erstellung von Firefox und LLVM/Clang kommen Python-Skripte und CMake zum Einsatz, daher hatte der Austausch von Coreutils auf sie keinen Einfluss. Der Build des Linux-Kernels verlief relativ reibungslos, es tauchten nur zwei Probleme auf: eine Fehlermeldung bei der Verwendung von chown mit einem symbolischen Link und das Fehlen der Option â-nâ im ln-Tool.
Quelle: opennet.ru
