Qualche intoppo per l’adozione delle Rust Coreutils in Ubuntu: il comando cp per ora resta GNU

Lo scorso settembre, quando abbiamo iniziato a parlare di Ubuntu 25.10 abbiamo indicato come la novità più rilevante di questa release transitoria fosse l’introduzione dei comandi sudo e coreutils scritti in Rust. Questing Quokka si è posta questo obiettivo in modo da essere apripista per le future release.

In funzione di questo, Ubuntu 26.04 (Resolute Raccoon, rilasciata lo scorso aprile), che vale la pena notare è una Long Term Support, si è presentata al mondo con le Rust Coreutils 0.8, ma senza effettuare la transizione in maniera totale, tanto che i comandi base cp, mv e rm sono rimasti nella versione GNU, la versione storica scritta in C.

Il motivo di questa scelta è legato a otto problemi di tipo TOCTOU (Time-of-Check to Time-of-Use) che sono stati scoperti in fase di rilascio di Resolute Raccoon. I TOCTOU sono problemi di sicurezza che si verificano quando un programma controlla una risorsa (un file) e poi la usa, ma nel lasso di tempo tra i due momenti, un attaccante la modifica, ad esempio la sostituisce con un link malevolo.

Nei piani di Canonical, la fase due è rappresentata dall’adozione totale delle Coreutils Rust all’interno di Ubuntu 26.10 (Stonking Stingray) che uscirà come di consueto il prossimo ottobre: in questo modo l’azienda di Mark Shuttleworth si aspetta di utilizzare le release intermedie per effettuare una transizione il più soft possibile alle nuove Coreutils.

Per raggiungere questo obiettivo la versione cp scritta in Rust è stata inserita nel pacchetto principale che si chiama coreutils-from la cui versione ha il curioso nome di 0.0.0~ubuntu26.

Qui, per così dire, sono iniziati i problemi.

Il 30 giugno 2026, lo sviluppatore di Canonical Simon Johnsson ha segnalato un bug di importanza critica. Il comando cp basato su Rust ha infatti bloccato completamente livecd-rootfs, ovvero lo strumento utilizzato da Canonical per generare le immagini ISO d’installazione di Ubuntu. 

Il fallimento è stato causato da una lieve incompatibilità tecnica nel modo in cui Rust gestiva una stringa di argomenti multipli:

  • Il sistema di compilazione eseguiva un comando composto usando cp -afL.
  • In GNU, il flag -L (segui i collegamenti simbolici) sovrascrive correttamente la natura di conservazione dei symlink del flag -a.
  • Nella versione Rust, una libreria di parsing per la riga di comando chiamata clap cancellava l’intero contesto di -a (incluse le sue proprietà ricorsive -R) nel momento in cui andava a risolvere -L. Di conseguenza, lo script dell’installer si è ritrovato improvvisamente impossibilitato a copiare le cartelle.

Ora, poiché l’intero sistema operativo non era più in grado di compilare le proprie immagini ISO, il bug è stato immediatamente elevato a importanza Critica.

Mentre gli sviluppatori discutevano se patchare semplicemente lo script di compilazione delle immagini, il team di rilascio ha stabilito come fosse troppo pericoloso lasciare un’utilità così fondamentale a bloccare l’infrastruttura di base e, quello stesso giorno, Johnsson ha rilasciato un aggiornamento d’emergenza (coreutils-from versione 0.0.0~ubuntu28) che ha annullato completamente la modifica, reintroducendo ufficialmente gnucp (il binario di copia GNU in C).

È chiaro come questo sia solo un normale incidente di percorso per il quale sicuramente il cammino delle Coreutils Rust non verrà influenzato, ma è giusto ricordare come migrazioni di questo tipo siano tutt’altro che semplici.

È verosimile che problematiche affini emergeranno nel futuro poiché “il diavolo è nei dettagli” e, per quanto la si voglia fare facile, non è di una componente banale che si sta trattando la migrazione.

Vale la pena ricordarlo a chi pensa “E che ci vuole, è solo un eseguibile”.

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.

11 risposte a “Qualche intoppo per l’adozione delle Rust Coreutils in Ubuntu: il comando cp per ora resta GNU”

  1. Avatar sabayonino
    sabayonino

    Per fortuna che rust era tanto acclamato per la sua sicurezza.
    Per carità niente è sicuro ..però dai.
    Software generato da umani generano errori da qualche parte.
    Aspetteremo quelli generati dalla IA 😀
    Popcorn gratis per tutti !!!

  2. Avatar Raoul Scarazzini

    Beh dai ma qui la sicurezza c'entra poco: il problema è semmai nell'implementazione delle opzioni che, in comandi vasti come `cp`, magari fanno cose diverse o non vengono replicate… Comunque sia è in Rust che si andrà per tutto questo genere di comandi, volenti o nolenti…

  3. Avatar sabayonino
    sabayonino

    Evidentemente c'è stato poco testing.
    Forse per la fretta ?
    Saranno anche comandi "semplici" ma basta un rm con l'opzione scazzata .
    A me povero utente mal che vada cancello i santi dal calendario …altre realtà potrebbero fare di peggio 😀
    Avanti a tutto Rust !!

  4. Avatar Autodelta85
    Autodelta85

    Tranquillo che é già nato il partito del WD-40 for de-rustinf

  5. Avatar Black_Codec

    E secondo te perché lo stanno testando su Ubuntu e non su rhel etc?

  6. Avatar Alessandro Scarozza
    Alessandro Scarozza

    credo che sia ora di iniziare a cambiare nome da gnu/linux a systemd/linux.
    ad oggi, nelle principali distro è nettamente piu centrale systemd che gnu.

    prima o poi ci sarà anche il passaggio a Clang come compilatore principale

  7. Avatar JaK
    JaK

    Scusa, ma non capisco il senso del tuo commento.

    GNU (Gnu’s Not UNIX) era (è?) il progetto della Free Software Foundation di produrre un sistema operativo completo compatibile con UNIX.

    systemd è (o dovrebbe essere) solo un processo di init, il primo lanciato dal kernel e che ha l’incarico di lanciare tutti i servizi previsti dalla configurazione e dal runlevel.

    Forse intendi dire che ormai abbiamo superato quello che GNU voleva essere?

  8. Avatar JaK
    JaK

    sospiro

    Sono un terribile romantico, lo so, ma la riscrittura clean room di coreutils in Rust mi sembra solo la manovra per avere un sistema che non sottostia alla viralità prevista dalla licenza GPL.

    Se ricordo bene, Rust coreutils è sotto licenza MIT. Libera, sicuro, ma aperta all’uso commerciale per software derivati.

    Ora, se questo non fosse il focus, perché riscrivere in Rust un software con trent’anni di audit alle spalle? Se era per rendere coreutils sicuro, perché cambiare la licenza?

  9. Avatar Raoul Scarazzini

    Sì le coreutils in Rust sono MIT ( https://github.com/uutils/coreutils ) però qui arriviamo a un punto cruciale a proposito delle licenze, un commento che forse mi brucerà qualcuna delle centinaia di migliaia (!) di lettori di MMUL: fosse anche che la riscrittura è fatta per "liberarsi" della GPL, considerato che la licenza MIT rende Free as in Speech il codice e che tutti ne beneficeranno per sempre (sì, anche le big corporation), dove sta il problema?
    Attenzione: non sto dicendo che una licenza vale l'altra eh (lettori!!! non abbandonate MMUL), ma che io adoro la licenza MIT e mi piace l'idea che sia usata per questo progetto tanto cruciale (piuttosto che la GPL).

  10. Avatar Alessandro Scarozza
    Alessandro Scarozza

    gnu/linux nasce pescando software dal progetto GNU e dal kernel linux. negli ultimi anni molte delle componenti che provengono dal progetto gnu sono state sostituite da componenti esterni a gnu.
    il caso piu eclatante è proprio systemd che ormai è diventato uno standard nelle distro e non fa parte di GNU.
    ora le core utils anch’esse di gnu vengono sostituite da altre scritte in Rust non facenti parte del progetto GNU
    anche la shell stessa non si usa piu quella di gnu me altre. di molto utilizzato dal progetto gnu è rimasto solamente GCC e tutta la toolchain connessa, ma anche in questo caso LLVM/Clang sta prendendo piede (ad esempio le performance maggiori di cachy os derivano dal fatto che tutto viene compilato con clang e non gnu gcc)

    in pratica nel tempo i software provenienti dal progetto GNU sono sempre meno.

    la mia era un po una provocazione ma di fatto non cosi assurda.

    ad oggi è piu facile creare una distro senza nulla di GNU che senza systemd

  11. Avatar Pinzia
    Pinzia

    Sono completamente d'accordo: la GPL sarà pure "virale"…perché obbliga tutti a rispettare la stessa "regola" (se prendo e aggiungo devo dare nella stessa maniera)..

    e questa sarà pure una "tegola" per molti, ma è "vitale" per il software libero.

    siamo stati fortunati a poter vivere negli anni novanta/duemila/duemiladieci in cui si disquisiva di licenze ma alla fine GPL e LGPL (ed infine AGPL) rimanevano come basi fondamentali…
    dopo son nate mille eccezioni, si è fatto uso di altre licenze (più "permissive") che non so se nel 2030/2035 avremo ancora veramente software libero…

    peccato 🙁

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *