Christoph Hellwig, maintainer dei sottosistemi DMA, KVM, Slab Allocator e dell'architettura PowerPC nel kernel Linux, ha rifiutato di integrare nel kernel le binding Rust per il sottosistema DMA, ma ha partecipato alla discussione sulle regole di gestione di Rust nel kernel, pubblicate dal progetto Rust for Linux. Secondo Christoph, tali regole sono inutili finché non sono concordate con la comunità e non incluse nella documentazione del kernel.
Christoph ha anche fatto notare che nelle regole è presente un'informazione errata riguardo al fatto che i maintainer possano prendere autonomamente decisioni sull'inclusione di codice relativo a Rust nei loro sottosistemi. Secondo Christoph, in una conversazione privata, Linus Torvalds ha affermato chiaramente che intende integrare nel kernel codice Rust, nonostante le obiezioni dei maintainer. Pertanto, gli sviluppatori e i maintainer del kernel dovranno ora affrontare Rust, indipendentemente dal fatto che lo desiderino o meno.
Christoph ha anche paragonato la diffusione dei wrapper Rust a un tumore che si diffonde in tutti i sottosistemi del kernel, portando a una frammentazione. Da un insieme unico, il kernel si trasforma in un progetto scritto in più linguaggi, senza una chiara definizione di quando utilizzare ciascun linguaggio. Secondo Christoph, lavorare con una base di codice così mista è diventato il suo peggior incubo, poiché in tali condizioni il codice viene continuamente riscritto da un linguaggio all'altro e poi di nuovo.
In questo contesto, Christoph chiede di chiarire l'obiettivo dell'implementazione di Rust nel kernel. Se l'obiettivo è risolvere i problemi di sicurezza legati al lavoro a basso livello con la memoria, è necessaria prima di tutto una modernizzazione del codice esistente. Considerando che gli sviluppatori reagiscono in modo eccessivo anche a elementi triviali, come i controlli di overflow degli interi, non è chiaro come si possa superare il divario tra una parte del kernel, che non adotta nemmeno regole basilari di sicurezza, e un'altra parte che segue rigorosamente tali regole. Se, invece, l'obiettivo è semplificare lo sviluppo dei driver, l'introduzione di un ulteriore linguaggio aumenterebbe solo il carico di lavoro e stresserebbe ulteriormente le persone già sovraccaricate che mantengono l'infrastruttura del kernel operativa.
Per quanto riguarda i sostenitori dell'implementazione di Rust nel kernel, vengono indicate le seguenti finalità:
- Scrivere nuovo codice in Rust ridurrà il rischio di errori nella gestione della memoria e nelle condizioni di race, escludendo anche alcune logiche errate.
- Per i manutentori sarà più facile rivedere le modifiche e raffinare i moduli tenendo conto delle garanzie fornite dal linguaggio Rust.
- La presenza di astrazioni che sfruttano le avanzate capacità del linguaggio Rust semplificherà la creazione di nuovi driver e moduli.
- Il supporto per un linguaggio moderno attirerà nuovi partecipanti allo sviluppo del kernel.
- L'applicazione delle potenzialità dell'ecosistema Rust semplificherà il rispetto dei requisiti di documentazione del codice. Ad esempio, nel progetto Rust for Linux è stato introdotto il requisito di documentare obbligatoriamente le API pubbliche, i requisiti di sicurezza, i blocchi unsafe e gli invarianti di tipo.
Fonte: opennet.ru
