Durante la conferenza Maintainers Summit che si svolge in questi giorni, è stata discussa l'esperienza relativa all'aggiunta nel kernel Linux della possibilità di sviluppare componenti in linguaggio Rust. I partecipanti hanno riconosciuto l'esperimento come riuscito e hanno deciso di elevare il supporto per il linguaggio Rust alla categoria delle parti fondamentali del kernel, rimuovendo il marchio di funzionalità sperimentale.
Tre anni fa, la possibilità di sviluppare driver e moduli in linguaggio Rust è stata aggiunta al kernel 6.1. Da allora, il kernel ha incluso astrazioni per lo sviluppo di driver per GPU, FS, dispositivi a blocchi, adattatori di rete e dispositivi USB. In Rust è in fase di sviluppo il driver Nova per le GPU NVIDIA, asahi per le GPU Apple AGX, Tyr per le GPU ARM Mali, rust_ext2 con FS Ext2. È stata accettata nel kernel un'implementazione IPC Binder scritta in Rust. Il progetto RROS sta sviluppando un sottosistema real-time per il kernel Linux, scritto in Rust. Il supporto per Rust non è attivo di default e non porta all'inclusione di Rust tra le dipendenze di compilazione obbligatorie del kernel.
Secondo i sostenitori della promozione di Rust, questo linguaggio elimina la maggior parte degli errori riscontrati nel kernel e legati a peculiarità del linguaggio C (corner case), consentendo nella revisione di concentrarsi su errori logici e stati di race. Rust aiuta a eliminare problemi come l'accesso alla memoria dopo la sua liberazione, l'uscita dai limiti del buffer, il rilascio errato delle risorse nella gestione degli errori e controlli trascurati dei codici di errore restituiti. L'uso di Rust per il nuovo codice offre anche la possibilità di ridurre i tempi di sviluppo, grazie alla diminuzione dello sforzo necessario per il debugging e alla presenza nel linguaggio di garanzie rigorose che individuano gli errori nelle prime fasi di scrittura del codice.
Gli oppositori dell'introduzione di Rust nel kernel considerano inaccettabile l'uso di più linguaggi di programmazione in progetti complessi: le basi di codice miste complicano il lavoro dei maintainer, poiché li pongono in dipendenza da codice scritto in un altro linguaggio. Ad esempio, in presenza di wrapper in Rust, gli sviluppatori di sottosistemi scritti in C devono considerare l'impatto delle modifiche sulla continuità del funzionamento di tali wrapper.
Fonte: opennet.ru
