Ubuntu abbandona GNU/Linux: rivoluzione agghiacciante e affascinante allo stesso tempo
Ubuntu ha annunciato l’intenzione di integrare le implementazioni in Rust delle core utilities di sistema a partire dalla release 25.10, sostituendo progressivamente le GNU Core Utilities con U-utils. Vediamo nel dettaglio cosa significa questa mossa per gli utenti, le opportunità e i rischi.

I responsabili dello sviluppo di Ubuntu hanno recentemente annunciato piani ambiziosi per il futuro della popolare distribuzione Linux. L’obiettivo è integrare implementazioni sviluppate con il linguaggio Rust delle utilità di sistema fondamentali, a partire dalla prossima release Ubuntu 25.10. L’iniziativa si concentra sull’adozione di programmi provenienti dal progetto Rust Coreutils (U-utils), rappresentando una delle più significative riscritture di codice in Rust in termini di impatto potenziale.
Le core utilities come ls (list) e cp (copy), sono ubiquitarie nei sistemi operativi Unix-like, sottendendo il funzionamento di server, firewall, dispositivi embedded, macOS, Linux, Android e innumerevoli altri dispositivi intelligenti. La prospettiva di sostituire questi strumenti essenziali, sui quali il mondo Linux si basa da decenni, con alternative in Rust è allo stesso tempo affascinante e fonte di preoccupazione.
Addio alle utilità del progetto GNU/Linux
Richard Stallman e il Free Software Foundation (FSF) hanno sempre insistito sull’uso del termine GNU/Linux per riferirsi al sistema operativo nel suo complesso. Ritengono che usare semplicemente il termine “Linux” sminuisca il ruolo fondamentale del software GNU nello sviluppo del sistema operativo.
Nel 1983, Stallman lanciò il progetto GNU con l’obiettivo di creare un sistema operativo libero e Unix-like. Nel 1991, gran parte del software GNU era pronto (compilatori, shell, editor di testo, librerie di sistema), ma mancava il kernel. Quando Linus Torvalds sviluppò il kernel Linux, questo venne combinato con gli strumenti GNU per formare un sistema operativo completo.
Il kernel Linux gestisce l’hardware e i processi di basso livello; le utility GNU forniscono l’interfaccia utente, la shell (bash), i comandi (ls, cp, grep,…), il compilatore (gcc), le librerie (glibc), e via dicendo. Senza GNU, Linux da solo sarebbe inutilizzabile per la maggior parte degli utenti.
Ubuntu riscrive la storia con la scelta di Rust
Sostituendo le GNU core utils con U-utils (Rust Coreutils), il sistema operativo non è più tecnicamente GNU/Linux, perché le componenti fondamentali di GNU non sarebbero più presenti. Di fatto è questo ciò che ha in programma di fare Canonical a partire da Ubuntu 25.10.
Il potenziale impatto di questo progetto è evidentemente enorme, considerando la centralità delle GNU core utilities in qualsiasi sistema Unix-like. Se esperimenti come quello condotto da Ubuntu avranno successo, U-utils potrebbe diventare un punto di riferimento per l’intero ecosistema.
Le motivazioni tecniche dietro la scelta di Rust
Le ragioni che tipicamente spingono alla riscrittura di software in Rust, o alla scelta di Rust per nuovi progetti, risiedono principalmente nella velocità più elevata e nella sicurezza della memoria che il linguaggio offre.
È importante notare che, sebbene le GNU core utilities vantino una storicità davvero notevole in termini di sicurezza, con poche vulnerabilità importanti scoperte negli ultimi vent’anni, sono stati riscontrati bug nella gestione della memoria. Le implementazioni in Rust permettono di prevenire automaticamente vulnerabilità come gli heap-based buffer overflow.
La stessa Canonical sottolinea come la maggiore resilienza e sicurezza facilmente ottenibili con i porting in Rust delle utilità di base GNU, siano tra gli aspetti più cruciali della transizione in corso.
La robustezza del software che costituisce le fondamenta del sistema operativo è essenziale: eventuali problemi o colli di bottiglia si ripercuotono su tutti gli strati superiori. Se le core utilities possono diventare più performanti, potenzialmente anche le prestazioni delle applicazioni di livello superiore potrebbero beneficiare di un significativo miglioramento.
Un investimento sulla parallelizzazione
Un vantaggio significativo di Rust rispetto a C e C++ risiede nella facilità con cui è possibile implementare il multithreading in modo sicuro. Molte delle GNU core utilities come `mv`, `cp` e `rm`, che operano principalmente sul filesystem, non traggono intrinsecamente beneficio dalla parallelizzazione a causa della natura seriale delle operazioni su disco. Nonostante ciò, esistono alcune core utilities, come il comando `sort`, che possono sfruttare appieno l’esecuzione parallela.
Durante un talk nel corso dell’evento FOSDEM (Free and Open Source Software Developers’ European Meeting), lo sviluppatore principale di U-utils ha dimostrato come l’implementazione di `sort` in U-utils fosse 6 volte più veloce** rispetto all’implementazione GNU. Un miglioramento così significativo in un’operazione basilare come l’ordinamento può avere ripercussioni positive su innumerevoli altri programmi che si basano su di essa.
Soprattutto oggi che con l’utilizzo di carichi di lavoro parallelizzati si punta sempre di più su questo tipo di elaborazioni: ne parliamo nell’articolo sul perché abbiamo ancora bisogno di CPU se le GPU sono più veloci.
Oxidizer: un ponte verso il futuro
Ubuntu non intende sostituire bruscamente le ormai familiari GNU core utilities. Per facilitare la transizione, è possibile usare lo strumento Oxidizer, che consente a utenti e sviluppatori di “rustificare” senza soluzione di continuità le utilità nei sistemi Ubuntu.
Quest’impostazione permette di familiarizzare con il funzionamento delle nuove implementazioni in Rust prima che diventino la scelta predefinita di Canonical. Oxidizer può essere scaricato da GitHub o installato tramite Cargo, ma è fondamentale procedere con cautela ed effettuare un backup del sistema prima dell’utilizzo, data la natura fondamentale delle modifiche apportate.
Eseguendo il comando base di abilitazione, Oxidizer sostituirà `coreutils` e `pudu`. Abilitando tutti gli esperimenti, verranno sostituiti `coreutils`, `pudu`, `findutils` e `diffutils`.
Il crescente supporto per Rust nell’ecosistema Linux
È importante notare che l’integrazione di Rust nell’ecosistema Linux non è un evento isolato. Il kernel Linux stesso sta progressivamente incorporando codice Rust, con il supporto iniziale introdotto nella versione 6.1. Sono in corso ulteriori sviluppi per includere driver scritti in Rust.
Anche figure di spicco come Linus Torvalds hanno espresso il loro supporto per Rust, e ciò nonostante i mugugni di molti maintainer del kernel Linux.
La denominazione GNU/Linux potrebbe perdere il suo significato
Il successo di U-utils e la potenziale adozione da parte di altre distribuzioni potrebbero avere implicazioni significative per il progetto GNU. Se le GNU core utilities fossero progressivamente sostituite in un numero crescete di distro, la denominazione GNU/Linux potrebbe perdere il suo significato.
Il dilemma della licenza: MIT contro GPL
Mentre molti utenti e sviluppatori potrebbero accogliere favorevolmente le core utilities scritte in Rust, una delle principali preoccupazioni riguarda la licenza software di U-utils, che è la MIT License, in contrasto con la GNU General Public License (GPL) delle GNU core utilities.
La licenza GPL è una licenza copyleft, il cui obiettivo è mantenere il software libero “per sempre”. Se si apportano miglioramenti a codice GPL e si desidera distribuirli, è necessario rendere pubblici anche tali miglioramenti. E veicolarli con la stessa licenza. Sebbene sia tecnicamente possibile utilizzare codice GPL per modifiche proprietarie ad uso personale, la distribuzione di tali modifiche richiede la loro apertura. Questo meccanismo impedisce l’aggiunta di software proprietario sotto forma di binari o codice offuscato a una codebase GPL.
Al contrario, la MIT License è una licenza permissiva che non impone tali restrizioni. È perfettamente legale prendere codice con licenza MIT, apportarvi miglioramenti proprietari o integrarlo in basi di codice più estese senza l’obbligo di rilasciare tali modifiche.
Un esempio storico citato di frequente è quello di MINIX, un sistema operativo Unix-like inizialmente proprietario e successivamente rilasciato sotto licenza BSD. La sua natura aperta ha permesso a Intel di integrare codice MINIX nel suo Intel Management Engine (IME), un mini-sistema operativo che gira su ogni chip Intel. Sebbene ciò abbia reso MINIX uno dei sistemi operativi più utilizzati al mondo, il creatore di MINIX, Andrew Tanenbaum, ha espresso il suo disappunto per il modo con cui Intel si è comportata, sottolineando come non fosse nemmeno stato informato dell’imminente diffusione del suo sistema operativo nel dispositivi dell’azienda di Santa Clara.
Un racconto che evidenzia come le licenze permissive (quelle diverse da GPL) non richiedano nemmeno alcun tipo di riconoscimento per gli autori originali del codice.
Conclusioni
La decisione di Ubuntu di esplorare la sostituzione delle GNU core utilities con implementazioni in Rust basate su U-utils rappresenta una mossa audace con implicazioni tecniche, filosofiche e potenzialmente geopolitiche nel mondo del software libero e open source.
I vantaggi in termini di sicurezza della memoria e potenziale miglioramento delle prestazioni sono fattori chiave che guidano questa transizione. Tuttavia, le notevoli differenze tra la licenza GPL e la MIT sollevano importanti punti interrogativi sul futuro del software libero e sul rischio di una maggiore adozione di codice aperto in progetti proprietari senza obblighi di reciprocità.
Il successo di Oxidizer nel facilitare la transizione e l’accoglienza da parte della comunità Linux, saranno fattori cruciali per determinare se l’iniziativa cavalcata da Canonical con Ubuntu porterà a un cambiamento significativo nel panorama dei sistemi operativi Unix-like.
D’altra parte, la potenziale marginalizzazione del progetto GNU è una conseguenza da non sottovalutare. Resta da vedere se i timori legati alla licenza MIT si riveleranno fondati o se i benefici in termini di maggiore sicurezza e performance prevarranno nelle scelte future delle distribuzioni Linux.