Christoph Hellwig, manutentore dei sottosistemi DMA, KVM, Slab Allocator e architettura PowerPC nel kernel Linux, che ha rifiutato di accettare le interfacce Rust per il sottosistema DMA, è intervenuto nella discussione sulle regole di gestione di Rust all'interno del kernel, pubblicate dal progetto Rust for Linux. Secondo Christoph, tali regole sono inutili finché non vengono concordate con la comunità e non incluse nella documentazione del kernel.
Christoph ha anche sottolineato che nelle regole è presente un'informazione errata riguardante la possibilità per i manutentori di prendere autonomamente decisioni sull'inclusione di codice relativo a Rust nei loro sottosistemi. Secondo Christoph, in una conversazione privata, Linus Torvalds ha dichiarato che è fermamente intenzionato a includere codice Rust nel kernel, nonostante le obiezioni dei manutentori. Pertanto, gli sviluppatori e i manutentori del kernel dovranno affrontare Rust, indipendentemente dal fatto che lo desiderino o meno.
Christoph ha anche paragonato nuovamente la diffusione delle interfacce Rust a un tumore che si diffonderà in tutti i sottosistemi del kernel, portando a una frammentazione. Da un'entità unica, il kernel si trasforma in un progetto scritto in più linguaggi, senza una chiara definizione di quando deve essere utilizzato ciascun linguaggio. Secondo Christoph, lavorare con una base di codice così mista è diventato il suo peggior incubo, poiché in tali condizioni si verifica costantemente la riscrittura del codice da un linguaggio all'altro e viceversa.
In questo contesto, Christoph chiede di chiarire l'obiettivo dell'implementazione di Rust nel kernel. Se l'obiettivo è risolvere i problemi di sicurezza derivanti dal lavoro a basso livello con la memoria, prima di tutto è necessaria la modernizzazione del codice esistente. Considerando che i manutentori reagiscono in modo doloroso anche a cose triviali, come i controlli per il superamento di interi, non è chiaro come si possa superare il divario tra una parte del kernel che non accetta nemmeno semplici regole di sicurezza e un'altra parte che si attiene a regole rigorose. Se invece l'obiettivo è semplificare lo sviluppo dei driver, l'introduzione del supporto per un altro linguaggio aggiungerà solo ulteriore lavoro e aumenterà il carico su persone già sovraccariche che mantengono l'infrastruttura del kernel in uno stato funzionante.
Per quanto riguarda i sostenitori dell'implementazione di Rust nel kernel, essi indicano i seguenti obiettivi:
- Scrivere nuovo codice in Rust ridurrà il rischio di errori nella gestione della memoria e nelle condizioni di gara, oltre a escludere alcuni errori logici.
- Per i manutentori sarà più semplice rivedere le modifiche e effettuare il refactoring dei moduli tenendo conto delle garanzie fornite dal linguaggio Rust.
- La presenza di astrazioni che utilizzano le avanzate capacità del linguaggio Rust semplificherà la creazione di nuovi driver e moduli.
- Il supporto di un linguaggio moderno attirerà nuovi partecipanti allo sviluppo del kernel.
- L'uso delle funzionalità degli strumenti di Rust faciliterà l'adempimento 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
