Durante la conferenza Maintainers Summit che si svolge in questi giorni, si è discusso dei risultati dell'esperimento per l'integrazione nel kernel Linux della possibilità di sviluppare componenti in linguaggio Rust. I partecipanti hanno riconosciuto l'esperimento come un successo e hanno deciso di promuovere il supporto per il linguaggio Rust alla categoria delle parti principali del kernel, rimuovendo l'etichetta di funzionalità sperimentale.
Tre anni fa, la possibilità di sviluppare driver e moduli in linguaggio Rust è stata aggiunta al kernel 6.1. Da allora, nel kernel sono state incluse astrazioni per lo sviluppo di driver in Rust per GPU, FS, dispositivi a blocchi, schede di rete e dispositivi USB. Sono in fase di sviluppo in Rust il driver Nova per GPU NVIDIA, asahi per GPU Apple AGX, Tyr per GPU ARM Mali, rust_ext2 con FS Ext2. È stata accettata nel kernel un'implementazione IPC Binder scritta in Rust. Il progetto RROS sviluppa un sottosistema in tempo reale per il kernel Linux, scritto in Rust. Il supporto per Rust è disattivato per impostazione predefinita e non porta all'inclusione di Rust tra le dipendenze necessarie per la compilazione del kernel.
Secondo i sostenitori della promozione di Rust, questo linguaggio esclude la maggior parte degli errori rilevati nel kernel e causati dalle peculiarità del C (corner case), permettendo così di concentrarsi sugli errori logici e sulle condizioni di race durante la revisione. Rust aiuta a eliminare problemi come l'accesso alla memoria dopo la sua liberazione, l'uscita dai limiti del buffer, la gestione scorretta delle risorse durante la gestione degli errori e la dimenticanza di controllare i codici di errore restituiti. L'uso di Rust per il nuovo codice consente anche di ridurre i tempi di sviluppo, grazie alla diminuzione degli sforzi necessari per il debug e alla presenza di garanzie rigorose nel linguaggio, che individuano gli errori nelle fasi iniziali della scrittura del codice.
I contrari all'implementazione di Rust nel kernel ritengono inaccettabile l'uso di più linguaggi di programmazione in progetti complessi; le basi di codice miste complicano il lavoro dei maintainer, poiché li rendono dipendenti dal codice scritto in un altro linguaggio. Ad esempio, in presenza di wrapper in Rust, gli sviluppatori di sottosistemi scritti in C devono tener conto dell'impatto delle modifiche sulla continua operatività dei wrapper.
Fonte: opennet.ru
