Rust: dai browser al kernel?

1

Di tanto in tanto si inizia a parlare di alcune cose che, potenzialmente, potrebbero cambiare la “visione base” di quello che è lo sviluppo sui sistemi.

Dall’iniziale Assembly, usato oltre che per scrivere i vari BIOS, boot loader e firmware, negli anni ’60 ci furono i primi esperimenti per portare il supporto hardware a linguaggi di alto livello; fu un decennio dopo, in cui tale Dennis Ritchie creò il linguaggio C, che ci fu uno di questi cambiamenti: il linguaggio era così ben pensato per la scrittura di sistemi che diversi componenti di UNIX (compreso il suo Kernel) furono riscritti in questo linguaggio. Il linguaggio C l’ha fatta da padrone per gli ultimi 50 anni ed è la base per la scrittura di sistemi operativi. Linux è uno di questi, il suo Kernel è scritto (quasi) totalmente in C.

Però adesso ci si sta iniziando a chiedere se non è possibile utilizzare qualche altro linguaggio, magari di più alto livello del C e più sicuro nell’utilizzo, per questo genere di sviluppi, e di utilizzare il linguaggio di Ritchie come un “nuovo Assembly”.

È quanto scaturito da un talk di Josh Triplett, ingegnere di Intel, che ipotizza come Rust possa essere diventare il linguaggio in questione.

Cos’è Rust? creato da Mozilla per lo sviluppo del proprio browser, ed affinato durante lo sviluppo di Servo, e rilasciato -ovviamente- in open-source, Rust è un linguaggio sintatticamente simile al C++ (estensione dell’originale C basata sul paradigma ad oggetti), ma che a differenza di questo è pensato per avere una gestione della memoria più sicura mantenendo comunque alte performance.

Lo stesso Josh ha parlato, in seguito al talk, con Greg Kroah-Hartman (sviluppatore e responsabile delle LTS del Kernel, ndr.) riguardo la possibilità di inserire un framework nel Kernel Linux che permetta lo sviluppo di driver in Rust:

I have, yes. I spoke with Greg Kroah-Hartman, and he said he’d be willing to accept a framework in the kernel for writing drivers in Rust, as long as 1) for now it wasn’t enabled by default (even if you did “make allyesconfig”) so that people don’t *need* Rust to build the kernel, and 2) it shows real benefits beyond writing C, such as safe wrappers for kernel APIs.

L’ho fatto. Ho parlato con Greg Kroah-Hartman, ed ha detto che accetterebbe un framework nel kernel per la scrittura di driver in Rust, almeno finchè 1) non venisse per ora attivato di default (anche usando “makeallyesconfig” [che attiva tutte le feature ed i driver nel kernel ndt]) così che le persone non necessitino di Rust per compilare il kernel e 2) che mostri reali benefici rispetto alla scrittura in C, come dei rimpiazzi sicuri per le API del kernel.

Certo da qui a riscrivere l’intero Kernel in Rust ce ne passa, ma il solo fatto che per alcune componenti si possa utilizzare un linguaggio differente dal C (e l’Assembly) rappresenterebbe un rinnovamento non da poco. Va però tenuto presente come, per alcuni aspetti, Rust non sia ancora pronto (in termini di funzionalità) a rimpiazzare correttamente tutte le API in C.

Alcuni sviluppi sono già stati fatti da altri utenti e sono disponibili su GitHub, ma la discussione è ancora parecchio aperta su LWN.

Avete avuto modo di provare questo linguaggio? Pensate che possa portare reali benefici al nostro amato Kernel?

Utente Linux/Unix da più di 20 anni, cerco sempre di condividere il mio know-how; occasionalmente, litigo con lo sviluppatore di Postfix e risolvo piccoli bug in GNOME. Adoro tutto ciò che può essere automatizzato e reso dinamico, l’HA e l’universo container. Autore dal 2011, provo a condividere quei piccoli tips&tricks che migliorano il lavoro e la giornata.

Una risposta a “Rust: dai browser al kernel?”

  1. Avatar Sonic0
    Sonic0

    Non ho ancora avuto modo di dilettarmi con Rust ma, parlando con degli utilizzatori accaniti, sembra avere performance incredibili ed un’ottima malleabilità! Se questo fosse tutto vero potrebbe portare ad altri livelli il nostro amato pinguino!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *