Sylvestre Ledru, noto per il suo lavoro sulla costruzione di Debian GNU/Linux utilizzando il compilatore Clang, ha segnalato il successo nell'esperimento di implementazione di un insieme alternativo di utilità coreutils, riscritto in linguaggio Rust. Tra le utilità incluse in coreutils ci sono sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. Per la prima fase dell'integrazione della versione coreutils in Rust in Debian, sono stati fissati i seguenti obiettivi:
- Creazione di un pacchetto con la versione alternativa di coreutils in linguaggio Rust per Debian e Ubuntu.
- Installazione di Debian con ambiente desktop GNOME, utilizzando rust-coreutils.
- Installazione delle 1000 applicazioni più popolari dal repository.
- Compilazione dai sorgenti di Firefox, LLVM/Clang e del kernel Linux in un ambiente con rust-coreutils.
Dopo aver creato oltre 100 patch per Rust/coreutils, siamo riusciti a realizzare con successo tutti gli obiettivi prefissati. Tra i lavori in corso si segnala l'implementazione delle utilità e opzioni mancanti, il miglioramento della qualità e della coerenza del codice, lo sviluppo della suite di test e la risoluzione dei crash che si verificano durante l'esecuzione della suite di test di GNU Coreutils (attualmente 141 test su 613 vengono eseguiti con successo).
Nel momento in cui è stato creato il pacchetto rust-coreutils, si è deciso di non sostituire il pacchetto coreutils, ma di permettere il loro funzionamento simultaneo. Le varianti delle utilities scritte in Rust vengono installate in /usr/lib/cargo/bin/ e attivate aggiungendo questa directory alla variabile d'ambiente PATH. La creazione del pacchetto rust-coreutils ha complicato la necessità di caricare nel repository tutte le dipendenze di compilazione, inclusi Rust e vari piccoli pacchetti crate.
Non ci sono stati particolari problemi con la creazione dell'immagine di avvio, ma l'adattamento dei pacchetti all'ambiente rust-coreutils ha richiesto un grande impegno, poiché molti script post-install chiamano le utilities del set coreutils. La maggior parte dei problemi è stata causata dalla mancanza di opzioni necessarie, ad esempio, nell'utility «cp» mancavano le opzioni «—archive» e «—no-dereference», in «ln» non c'era il supporto per l'opzione «—relative», in mktemp «-t», in sync «-fs», in install «—owner» e «—group». Altri problemi sono emersi a causa delle differenze nel comportamento; ad esempio, l'utility install non supportava l'indicazione di /dev/null come file di input, in mkdir invece di «—parent» c'era l'opzione «—parents», e così via.
Durante il test della build di grandi codebase non si sono presentati grandi problemi. Nella compilazione di Firefox e LLVM/Clang vengono utilizzati script Python e cmake, quindi la sostituzione di coreutils non ha avuto impatti. La compilazione del kernel Linux è avvenuta relativamente senza intoppi, sono emersi solo due problemi: un messaggio di errore nell'uso di chown con un collegamento simbolico e l'assenza dell'opzione «-n» nell'utilità ln.
Fonte: opennet.ru
