Ossidazione in Linux Dove siamo e dove stiamo andando

Ossidazione su Linux Situazione attuale e prospettive future

Logo del linguaggio di programmazione Rust

Alla Linux Plumbers Conference a Richmond, Virginia, lo sviluppatore di Linux e Rust Miguel Ojeda ha fornito agli sviluppatori del kernel Linux un aggiornamento sullo stato di Rust nel kernel Linux. In breve, Rust Linux sta continuando a maturare e sta ricevendo un forte supporto da parte degli sviluppatori e dei fornitori, come Cisco, Samsung, e Canonical.

Naturalmente, Rust è presente in Linux fin dal momento in cui Linus Torvalds ha dato la sua benedizione a questo linguaggio sicuro per la memoria nel rilascio 6.1 di Linux. Ora, però, Rust sta compiendo i passi necessari per diventare – insieme a C – un membro a pieno titolo del toolchain linguistico di Linux.

Inoltre: Come installare Linux su un vecchio laptop per donargli nuova vita

Questa posizione elevata è dovuta al fatto che, come ha detto l’ingegnere software di Microsoft Wedson Almeida Filho, “Riteniamo che Rust sia ora pronto per unirsi a C come linguaggio pratico per implementare il kernel. Ci può aiutare a ridurre il numero di bug potenziali e vulnerabilità di sicurezza nel codice privilegiato, mantenendo una buona compatibilità con il kernel principale e preservandone le caratteristiche di performance.”

In particolare, come hanno spiegato Alex Gaynor e Geoffrey Thomas al Linux Security Summit del 2019, quasi i due terzi delle falle di sicurezza del kernel Linux derivano da problemi di sicurezza della memoria. E da dove provengono questi errori? Da debolezze intrinseche in C e C++. Rust, d’altra parte, evita questi problemi utilizzando interfacce di programmazione delle applicazioni molto più sicure.

Inoltre: 8 cose che puoi fare con Linux che non puoi fare con MacOS o Windows

Questo non significa che siamo pronti a sostituire C con Rust. Infatti, quel giorno è improbabile che arrivi mai. Ma Rust sta sicuramente diventando un linguaggio importante per lo sviluppo di Linux.

Prima di raggiungere questa meta, ci sono alcune sfide da affrontare. Come ha detto Ojeda all’evento, anche se il “team principale si è ampliato con nuovi membri”, c’è ancora molto lavoro da fare.

Questo sforzo comincia con gli strumenti di programmazione per Rust su Linux. Alcune distribuzioni stanno già accogliendo Rust a braccia aperte. Ad esempio, Ubuntu offre ora “tutti gli strumenti necessari e i requisiti di kernel per compilare e testare i moduli del kernel fuori dal kernel”.

Oggi, ci sono tre principali toolchain Rust per Linux che si stanno unendo. Il primo di questi è GCC codegen per rustc. Questo toolchain compila e può avviare Rust e Linux di linea principale senza apportare modifiche al codice sorgente.

Poi, c’è GCC Front-End per Rust, che può essere caricato dal frontend esistente di rustc, ma beneficia delle ottimizzazioni di GCC. Purtroppo, questo progetto è ancora molto alfa. Infine, c’è Coccinelle for Rust. Coccinelle è uno strumento per creare codice sorgente C del kernel Linux su larga scala e Coccinelle for Rust intende portare questa potenza nelle codebase Rust.

Inoltre: I migliori Linux distro per principianti

Per quanto riguarda il lavoro quotidiano richiesto per integrare completamente Rust con Linux, il sito web ufficiale dell’iniziativa è ora il comprensibile Rust for Linux. Questo sito è la fonte unica per tutto ciò che riguarda Rust su Linux.

Il ramo originale del codice rust, dove lo sviluppo è stato condotto per due anni, è stato ritirato. Il codice è ancora presente, ma è stato congelato e archiviato. Procedendo, rust-next sarà il ramo che contiene le nuove funzionalità di Rust da inviare durante la prossima finestra di unione del kernel Linux. Questo ramo, come suggerisce il nome, fa parte di Linux Next.

Rust-fixes, nel frattempo, è il ramo che contiene le correzioni di Rust per il ciclo corrente del kernel Linux. Inoltre, Rust-dev è un ramo sperimentale per scopi di integrazione. È una coda per patch che “sembrano abbastanza buone” da condividere e sperimentare.

Tuttavia, il progresso non è stato lineare. Gli sviluppatori di Rust su Linux hanno scoperto alcuni problemi lungo la strada. Ad esempio, mentre i deadlock, quando due o più thread sono in attesa che l’altro finisca, sono sicuri in Rust perché non provocano comportamenti indefiniti, non sono sicuri nel kernel Linux. I programmatori stanno lavorando per risolvere questo problema.

Inoltre: Come creare una chiavetta USB di avvio Linux

Gli sviluppatori si preoccupano anche di come gestire le versioni di Rust. Oggi gli sviluppatori non possono garantire che le versioni più recenti di Rust funzioneranno in Linux perché l’ultima versione di Rust Linux è compatibile con alcune funzionalità instabili. Queste funzionalità saranno presenti nella prossima versione di Rust? Saranno compatibili con le versioni precedenti? Rimani sintonizzato.

Per ora, i programmatori di Rust su Linux stanno monitorando l’ultima versione del compilatore Rust. Questo è un approccio piuttosto insolito per il kernel, dove di solito si cerca di utilizzare codice vecchio e collaudato.

Un problema correlato è l’interesse crescente nel backportare il supporto di Rust nelle versioni a supporto a lungo termine (LTS) di Linux, specificamente la versione 5.15 e 6.1. Alcune persone sono particolarmente interessate al kernel super LTS Linux 6.1. Tuttavia, Linux in genere non consente backport nelle versioni LTS. Quindi, se vuoi davvero un supporto completo di Rust in un kernel LTS più vecchio, dovrai pagare in un modo o nell’altro.

Un’altra regola generale che gli sviluppatori di Rust hanno deciso di “rompere” è la regola contro i driver duplicati. Di solito, nessuno vuole che qualcuno perda tempo a reinventare la ruota, ma alcuni responsabili sono aperti all’idea di sperimentare con Rust, iniziando in modo semplice con un driver con cui sono già familiari.

Anche: Se vuoi provare BSD, GhostBSD potrebbe essere la scelta migliore

Tuttavia, altri hanno manifestato interesse nel scrivere driver Rust, ma le astrazioni richieste non sono ancora disponibili e l’unione romperebbe la regola “nessun codice senza un utilizzatore atteso nel kernel”. Quindi, Ojeda e il suo allegro gruppo di sviluppatori Rust hanno richiesto un’eccezione per i driver Rust.

Questi movimenti sono piccoli passi avanti, ma sono tutti cruciali per rendere Rust uguale a C come linguaggio di programmazione Linux. Basandomi sull’elevato interesse che ho visto a Plumbers, mi aspetto pienamente che Rust ci arriverà, prima o poi.