Sylvestre Ledru, noto per il suo lavoro sulla distribuzione di Debian GNU/Linux utilizzando il compilatore Clang, ha annunciato il successo di un esperimento per l'implementazione di un insieme alternativo di strumenti coreutils, riscritto in Rust. Il pacchetto coreutils include strumenti come sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. Per la prima fase dell'integrazione nella distribuzione Debian della variante coreutils in Rust sono stati fissati i seguenti obiettivi:
- Creazione di un pacchetto con una variante alternativa di coreutils in Rust per Debian e Ubuntu.
- Scaricare Debian con interfaccia desktop GNOME, utilizzando rust-coreutils.
- Installazione dei 1000 pacchetti più popolari dal repository.
- Compilazione da sorgente di Firefox, LLVM/Clang e kernel Linux in un ambiente con rust-coreutils.
Dopo aver creato oltre 100 patch per Rust/coreutils, siamo riusciti a realizzare tutti gli obiettivi prefissati. Tra i lavori in corso, si segnala l'implementazione di strumenti e opzioni mancanti, il miglioramento della qualità e della coerenza del codice, lo sviluppo di un insieme di test e la risoluzione di crash che si verificano durante l'esecuzione del test suite di GNU Coreutils (attualmente, 141 test su 613 sono eseguiti con successo).
Nella creazione del pacchetto rust-coreutils, è stato deciso di non sostituire il pacchetto coreutils, ma di garantire la loro compatibilità. Le varianti degli strumenti in Rust vengono installate in /usr/lib/cargo/bin/ e attivate aggiungendo questa directory alla variabile di ambiente PATH. La creazione del pacchetto rust-coreutils è stata complicata dalla necessità di caricare nel repository tutte le dipendenze di compilazione, inclusi Rust e vari piccoli pacchetti crate.
Non ci sono stati problemi significativi nella creazione dell'immagine di avvio, ma l'adattamento dei pacchetti per un ambiente con rust-coreutils ha richiesto un lavoro consistente, poiché molti script post-install richiamano strumenti dall'insieme coreutils. Gran parte dei problemi è stata causata dalla mancanza di opzioni necessarie; ad esempio, nell'utilità "cp" mancavano le opzioni "—archive" e "—no-dereference", nell'"ln" non era supportata l'opzione "—relative", in mktemp mancava "-t", in sync "-fs", e in install "—owner" e "—group". Altri problemi sono emersi a causa di differenze nel comportamento, ad esempio, l'utilità install non supportava l'indicazione di /dev/null come file di input, in mkdir invece di "—parent" era presente l'opzione "—parents", e così via.
Durante il collaudo di assemblaggi di ampie basi di codice non sono emersi grandi problemi. Nella compilazione di Firefox e LLVM/Clang vengono utilizzati script Python e cmake, quindi la sostituzione di coreutils non ha avuto effetto. La compilazione del kernel Linux è avvenuta relativamente senza intoppi, sono emersi solo due problemi: l'output di errore nell'uso di chown con un link simbolico e l'assenza dell'opzione «-n» nell'utility ln.
Fonte: opennet.ru
