Greg Kroah-Hartman, responsabile del supporto della versione stabile del kernel Linux, si è espresso a favore dello sviluppo di nuovi componenti del kernel in Rust. Come persona attraverso cui passano tutte le informazioni sugli errori e le vulnerabilità nel kernel Linux da 15 anni, sostiene che la maggior parte degli errori nel kernel è causata da peculiarità non considerate del linguaggio C (corner case), completamente escluse nel codice scritto in Rust.
Con l'uso di Rust, si potranno lasciare alle spalle problemi come l'accesso alla memoria dopo la sua liberazione, l'uscita dai confini del buffer (in parte), la liberazione scorretta delle risorse durante la gestione degli errori e le verifiche dimenticate dei codici di errore restituiti, il che permetterà ai manutentori di concentrarsi su errori reali, come condizioni di competizione e problemi logici, anziché disperdere l'attenzione su dettagli minori durante le revisioni.
Il codice esistente in C non scomparirà, ma per il nuovo codice e i nuovi driver l'adozione di Rust consentirà di migliorare notevolmente la qualità. L'introduzione di Rust permetterà anche di strutturare le interfacce di programmazione interne del kernel in modo tale da ridurre quasi a zero gli errori nell'utilizzo delle API interne: nel kernel si sono accumulate troppe API complesse e intricati che creano un grande carico di lavoro per i manutentori nel verificare che queste API vengano utilizzate correttamente. Durante lo sviluppo dei binding di Rust, i manutentori avranno l'opportunità di ripensare e riordinare le API, portando benefici a tutti, compresi coloro che usano il linguaggio C.
Greg non considera Rust una "pietra filosofale" che risolverà tutti i problemi nel kernel, ma questo linguaggio aiuterà sicuramente in un gran numero di situazioni. Il supporto per Rust soddisferà anche la necessità dei programmatori di driver che sperano di ottenere uno strumento che consenta loro di scrivere codice per il loro hardware, escludendo molti tipi di errori. Quanto alla mescolanza di diversi linguaggi, Greg non la vede come un grande problema, secondo lui, in passato i programmatori del kernel hanno affrontato anche compiti più complessi e non c'è motivo di rinunciare alla promozione di nuove buona idee nel kernel che possono garantire il successo del progetto per i prossimi 20+ anni.
Alla discussione ha partecipato anche Kees Cook, ex amministratore di sistema principale di kernel.org e leader dell'Ubuntu Security Team. Kees ha chiarito che non si tratta di riscrivere il codice già esistente nel kernel, ma di fornire la possibilità di utilizzare Rust per creare nuovi driver e sottosistemi. L'uso di Rust per il nuovo codice non solo ridurrà il numero di errori nella gestione della memoria, ma abbrevierà anche i tempi di sviluppo. La velocità di sviluppo aumenta grazie alla riduzione del lavoro necessario per il debug e alla presenza di garanzie rigorose nel linguaggio, che consentono di identificare gli errori nelle prime fasi della scrittura del codice, prima ancora dell'inizio del collaudo del prodotto.
L'efficacia della tattica di utilizzo di Rust per migliorare la qualità del nuovo codice è già stata dimostrata da Google sulla piattaforma Android. È stato dimostrato che la principale fonte di problemi di sicurezza è il nuovo codice, e la qualità di quest'ultimo dovrebbe essere la priorità principale. Per il codice vecchio, c'è una dipendenza esponenziale della sicurezza dal tempo (ad esempio, un codice di 5 anni ha in media una densità di vulnerabilità 3.4 volte inferiore rispetto al nuovo codice).
Fonte: opennet.ru
