Ubuntu 26.10 compie un passaggio che fino a poco tempo fa sarebbe parso avventato e fuori luogo: le principali GNU Coreutils, cioè comandi fondamentali come cp, mv, rm, ls, cat, chmod e du, possono ora essere fornite integralmente dalle implementazioni Rust del progetto uutils. Non cambia il modo in cui l’utente usa il terminale, ma cambia una parte molto profonda del sistema operativo.
La transizione era partita concretamente con Ubuntu 25.10, era rimasta volutamente incompleta nella LTS 26.04 e arriva adesso a compimento con Ubuntu 26.10 “Stonking Stingray“, la cui distribuzione è programmata per il 15 ottobre 2026.
Canonical aveva annunciato a marzo 2025 l’intenzione di trasferire su Rust alcune fondamenta della distribuzione, privilegiando le implementazioni ritenute sufficientemente mature. Ubuntu 25.10 fu il primo banco di prova reale su larga scala: adottò le coreutils di uutils e sudo-rs come componenti predefiniti. Il passaggio non fu indolore.
Un problema nel comando date, per esempio, interferì con i controlli automatici degli aggiornamenti perché una particolare interrogazione sulla data di modifica di un file restituiva un risultato sbagliato. L’esperienza servì però esattamente allo scopo dichiarato da Canonical: far emergere incompatibilità prima di affidare il nuovo codice a installazioni destinate a durare anni.
Perché Ubuntu 26.04 non aveva completato il passaggio a Rust
La storia diventa più interessante con Ubuntu 26.04 LTS. Canonical voleva inizialmente arrivare alla LTS con l’intera suite uutils, ma una revisione del codice condotta insieme al team Ubuntu Security fece emergere dubbi sufficienti a richiedere un audit esterno. L’incarico passò a Zellic, che analizzò le utility in due fasi tra dicembre 2025 e marzo 2026.
Secondo Canonical, l’audit permise di individuare 113 problemi di sicurezza e correttezza di diversa gravità.
La comunità uutils ne risolse rapidamente gran parte, ma al 22 aprile 2026 restavano 8 problemi concentrati soprattutto nelle operazioni più delicate. Canonical decise quindi di non affidare ancora a Rust tre comandi decisamente poco marginali: cp, mv e rm. Ubuntu 26.04 continuò a eseguire per questi strumenti le versioni GNU, mentre il resto della suite poteva già provenire da uutils.
Rust riduce in modo importante classi di vulnerabilità come use-after-free, buffer overflow e accessi concorrenti non sicuri alla memoria; non impedisce però a uno sviluppatore di introdurre un errore logico, un comportamento incompatibile o una race condition legata al file system.
Cosa sono i problemi TOCTOU che avevano bloccato cp, mv e rm
TOCTOU è l’acronimo di “time-of-check to time-of-use“: un programma controlla la proprietà di un file e, qualche istante dopo, agisce supponendo che quella proprietà sia rimasta invariata. In mezzo, però, un altro processo può modificare il file, sostituire un collegamento simbolico o cambiare il percorso risolto dal sistema.
Immaginiamo che rm verifichi un percorso e stabilisca che può rimuoverlo. Se tra il controllo e la cancellazione un attaccante riesce a sostituire quell’oggetto con un link simbolico (symlink) diretto altrove, il comando rischia di operare su una destinazione diversa da quella verificata.
Lo stesso principio diventa ancora più delicato con cp e mv, perché entrano in gioco permessi, attributi estesi, hard link, attraversamento di directory e spostamenti tra file system differenti.
Rust non può sapere automaticamente che il nome di un file controllato un millisecondo prima identifica ancora lo stesso oggetto. Per eliminare davvero la race condition occorre cambiare la logica dell’operazione, spesso lavorando tramite file descriptor già aperti e primitive del kernel progettate per ridurre la necessità di risolvere nuovamente i vari percorsi.
uutils ha modificato il modo in cui i comandi accedono al file system
Il lavoro svolto dopo l’audit non si è quindi limitato a correggere qualche controllo. Nelle release recenti di uutils sono arrivate modifiche mirate proprio alla superficie evidenziata dai ricercatori. Per cp e mv, per esempio, la gestione degli attributi estesi è passata a operazioni basate maggiormente sui file descriptor, riducendo le finestre nelle quali un percorso può cambiare tra controllo e utilizzo.
Anche rm ha ricevuto alcuni interventi per evitare che, durante la cancellazione ricorsiva di una directory, un percorso già controllato possa essere sostituito nel frattempo con un collegamento simbolico e far sì che il comando operi su una destinazione diversa da quella prevista.
Ancora, chmod usa fchmodat in alcuni scenari ricorsivi e sono arrivati interventi analoghi su ln, install e altre utilità. Parallelamente, il progetto ha continuato a ridurre il codice unsafe (usa operazioni a basso livello non garantite automaticamente dai controlli di sicurezza del compilatore) e a sostituire chiamate dirette a libc con astrazioni Rust come rustix quando possibile.
Ubuntu 26.10 completa la migrazione
Con i vari problemi adesso ormai risolti, Ubuntu 26.10 può affidare anche cp, mv e rm a uutils. L’obiettivo dichiarato diventa quindi realtà: l’intero insieme delle core utility predefinite può utilizzare le implementazioni Rust.
La situazione nei repository di “Stonking Stingray” riflette già questa evoluzione: il pacchetto coreutils-from-uutils dipende da una versione di rust-coreutils successiva alla serie 0.10, mentre resta disponibile anche coreutils-from-gnu.
Ubuntu conserva quindi la possibilità di distribuire le implementazioni GNU: utile sia per compatibilità sia per diagnosticare eventuali regressioni. Nello stesso archivio compare GNU Coreutils 9.10, segno che Canonical non sta eliminando il software GNU dalla distribuzione, ma sta cambiando le implementazioni predefinite di coreutils.
Già durante la discussione iniziale Canonical aveva chiarito che l’adozione di uutils non rappresentava una scelta contro GNU né una presa di posizione sulle licenze. Lo scopo dichiarato riguarda manutenzione, robustezza e possibilità di ridurre alcune classi di vulnerabilità nel software di base.
Per l’utente i comandi restano gli stessi
Non nasceranno comandi chiamati rust-cp o rust-ls: si continuerà a digitare cp, mv, rm, ls e tutti gli altri nomi abituali. uutils mira esplicitamente alla compatibilità con GNU Coreutils e considera le differenze non intenzionali come bug.
Per la maggioranza degli utenti Desktop la modifica sarà quindi invisibile. La questione diventa più interessante per amministratori di sistema, sviluppatori, maintainer di pacchetti e chi gestisce grandi raccolte di script shell.
Decenni di software hanno finito per dipendere non soltanto dalle opzioni documentate, ma anche da dettagli minori: formattazione dell’output, codici di errore, ordine di alcuni messaggi, trattamento di file insoliti, locale, timestamp, filesystem di rete e combinazioni di flag poco comuni.
Per proporsi come sostituto reale, uutils deve riprodurre comportamenti che a prima vista sembrano secondari ma che possono essere osservati da script e software esterno.
La conversione a Rust non si fermerà alle coreutils
Canonical considera il lavoro sulle coreutils parte di un programma più ampio. Ubuntu 25.10 aveva già portato sudo-rs nella configurazione predefinita. A giugno 2026 l’azienda è inoltre diventata Gold Sponsor della Trifecta Tech Foundation, finanziandola con 40.000 euro l’anno. La fondazione mantiene vari progetti infrastrutturali Rust, tra cui sudo-rs e ntpd-rs.
Anche la sincronizzazione dell’orologio rientra nei piani. Canonical sta lavorando per introdurre ntpd-rs come alternativa memory-safe per la gestione di NTP (Network Time Protocol), un altro ambito nel quale piccoli errori possono avere conseguenze sorprendenti su autenticazione, certificati, log, sistemi distribuiti e database. Ubuntu 26.10 offre il terreno per proseguire i test prima di una futura adozione predefinita.
Addirittura, in collaborazione con l’Università di Bristol, Canonical ha avviato un progetto per arrivare alla conversione di codice C in Rust senza riscriverlo da zero.