Qualche tempo fa vi raccontavamo di come lo sviluppo del kernel Linux, il “nocciolo” del sistema operativo, inventato da Linus Torvalds, stia soffrendo la mancanza di maintainer. Ovvero di quelle figure specializzate responsabili di un sottoinsieme del kernel: un driver, un subsistema o una funzionalità specifica.
Molti maintainer del kernel Linux sono dipendenti di aziende che utilizzano o contribuiscono allo sviluppo di Linux, come Red Hat, Intel, Google, IBM e altre. In questi casi, i maintainer sono retribuiti per il loro lavoro sul kernel come parte delle loro responsabilità lavorative. Tuttavia, lo zoccolo duro delle figure che gravitano attorno al kernel Linux è rappresentato da sviluppatori indipendenti o collaboratori che contribuiscono al progetto a titolo volontario.
L’ambiente responsabile dello sviluppo del kernel Linux, è risaputo, non è per “cuori deboli”. Torvalds, che ha sempre l’ultima parola su tutto, ci ha abituato a uscite furiose. Una delle ultime, in ordine di tempo, risale a gennaio 2024 quando Torvalds inveì pesantemente contro uno sviluppatore Google.
L’introduzione di Rust nel kernel Linux riaccende la polemica
Fulmini e saette tornano a perturbare il cielo degli sviluppatori del kernel Linux. La pietra dello scandalo, questa volta, riguarda l’integrazione di codice Rust in Linux.
La sicurezza della memoria è essenziale per proteggere le applicazioni da tutte quelle vulnerabilità di sicurezza che sono più frequentemente sfruttate dagli aggressori per acquisire privilegi più elevati ed eseguire codice dannoso.
Uno dei vantaggi più significativi di Rust risiede proprio nella gestione della memoria. Questo linguaggio di programmazione moderno utilizza un sistema di ownership e borrowing che previene problemi di sicurezza comuni come buffer overflow, use-after-free e data race. In questo modo è possibile spazzar via, d’un solo colpo, tutte le lacune di sicurezza derivanti dall’impiego del classico codice C/C++.
L’integrazione di Rust nel kernel Linux presenta numerosi vantaggi, che possono contribuire a migliorare la sicurezza, la stabilità e la manutenzione del codice. La natura rigorosa della gestione della memoria in Rust riduce il numero di bug e problemi di stabilità nel kernel. Il sistema operativo potrebbe diventare più affidabile nel suo complesso, riducendo il rischio di crash e comportamenti imprevisti. Non per niente, Rust è entrato nel kernel di Windows 11.
Un maintainer del kernel Linux sbatte la porta e se ne va
Wedson Almeida Filho, maintainer del kernel e figura di spicco nel progetto Rust per Linux, ha deciso di ritirarsi a causa di ciò che lui definisce “follie non tecniche che hanno superato il limite“.
Annunciando la sua intenzione di abbandonare il ruolo di manutentore del progetto, in un messaggio inviato alla mailing list del kernel Linux, Filho ha dichiarato: “dopo quasi quattro anni, mi sono reso conto di non avere più l’energia e l’entusiasmo necessari per affrontare certe problematiche non tecniche. È meglio lasciare il campo a chi ha ancora voglia di combattere“. Pur ringraziando i suoi collaboratori, Filho ha sottolineato la sua convinzione che il futuro dei kernel risieda nei linguaggi di programmazione sicuri per la memoria, come Rust. Ha avvertito che, se Linux non riuscirà a integrare questi linguaggi, rischia di essere sorpassato da altri sistemi operativi, come è accaduto in passato nel caso di Unix.
Motivando la sua decisione, Filho ha condiviso un episodio significativo avvenuto durante una conferenza su Linux. Una voce fuori campo, identificata da Filho come quella di Ted Ts’o, un altro noto mantenitore del kernel, esprime con fermezza: “non possiamo essere costretti a imparare Rust“.
Il commento pungente è arrivato durante l’analisi del tema “binding per Rust“. Nel contesto del file system di Linux i meccanismi di binding permettono l’interazione tra il linguaggio di programmazione Rust e le API o le funzionalità del file system usato in Linux.
Ts’o evidenzia di essere tenuto a modificare il codice in C per ogni singola modifica apportata, ma esprime di non aver alcuna intenzione di occuparsi dei binding Rust correlati.
Una difesa dello status quo senza aprirsi a Rust mette a rischio la vita di Linux
Asahi Lina, sviluppatrice del progetto Asahi Linux, ha espresso comprensione per la frustrazione di Filho. Ha notato come alcuni sviluppatori del kernel in C sembrino determinati a ostacolare il lavoro dei maintainer che lavorano con Rust. Lina ha condiviso la sua esperienza nel tentativo di implementare piccole correzioni nel codice C per migliorare la sicurezza della memoria, ma si è trovata bloccata dal maintainer di turno. Ha fatto presente che i bug nel codice C sono le sole cause di panico nel kernel del driver GPU di Apple, che lei ha scritto in Rust.
“Ho la sensazione che alcuni mantenitori del kernel di Linux non si preoccupino più della qualità del codice futuro, della stabilità o della sicurezza” ha affermato Lina. “Vogliono solo mantenere il loro codice in C e sperano che noi sviluppatori di Rust prima o poi scompariremo. È davvero triste… e non aiuta a migliorare Linux“.
Drew DeVault, fondatore di SourceHut, ci va ancora più pesante sostenendo che la comunità di sviluppo del kernel rientra un po’ in uno scenario da Far West: apportare cambiamenti significativi è davvero complicato. Ogni sottosistema è descritto come un “feudo privato”, soggetto ai capricci di ciascuno dei più di 1.700 manutentori di Linux, quasi tutti con un interesse personale nella questione. “Introdurre Rust in modo efficace è un compito che richiede non solo capacità di programmazione, ma anche una grande dose di abilità politiche“, osserva ancora DeVault.
DeVault suggerisce ai programmatori Rust di costruire un kernel compatibile con Linux da zero, per evitare le battaglie politiche all’interno della mailing list. Potrebbe essere questa la svolta decisiva.
Il parere di Linus Torvalds
Nel 2021, Torvalds ha adottato un approccio “attendista”, auspicando un’affermazione iniziale di Rust nei driver di quei dispositivi che devono essere relativamente isolati.
In un intervento più recente, il “re pinguino” ha sostanzialmente confermato le lamentele degli sviluppatori orientati verso Rust, sebbene da una distanza maggiore. “Mi aspettavo che gli aggiornamenti su Rust fossero più rapidi, ma parte del problema è che i vecchi sviluppatori del kernel sono abituati al C e non conoscono Rust“, ha osservato. “Non sono esattamente entusiasti di dover apprendere un nuovo linguaggio che è, in alcuni aspetti, molto diverso. C’è stata quindi una certa resistenza verso Rust“.
Torvalds ha comunque voluto precisare che l’infrastruttura di Rust non si è rivelata pienamente stabile su tutti i fronti. C’è quindi ancora molto lavoro da fare.
I conflitti saranno quindi inevitabili nella comunità del kernel Linux, anche nel prossimo futuro. Ma Rust è la via. Tutto starà nel giocarsi bene la carta dell’interoperabilità. È infatti possibile scrivere moduli in Rust che possono funzionare insieme al codice esistente in C. Ciò favorisce una transizione graduale e la possibilità di riscrivere parti del kernel in Rust senza dover abbandonare completamente il codice C.
Credit immagine in apertura: Copilot Designer