It's not a bug, it's a feature

Linus Torvalds è ottimista nel portare Rust nel kernel Linux

Per oltre tre decenni, Linux è stato scritto nel linguaggio di programmazione C. In effetti, Linux è il risultato più eccezionale del C. Ma è anche grazie alla rigorosità di Linus Torvalds e dei maintainers in generale che si è riusciti a ottenere un risultato del genre. Ma gli ultimi anni hanno visto uno slancio crescente per rendere il linguaggio di programmazione Rust il secondo linguaggio di Linux.

Al recente Open Source Summit ad Austin, in Texas, il creatore di Linux, Linus Torvalds, si è mostrato favorelvole nel vedere Rust parte del kernel di Linux con la prossima major release. Attualmente, Torvalds e i maintainers sono al lavoro sulla 5.19, che si pensa uscirà durante il mese di agosto 2022. Verosimilmente, quindi, vedremo Rust nella prossima versione, la 5.20, che dovrebbe arrivare tra fine ottobre e inizio novembre 2022, tenendo conto dei tempi medi di rilascio del kernel mainline:

“Mi piacerebbe vedere la fusione dell’infrastruttura di Rust per essere avviata nella prossima versione, ma vedremo. Ma non lo forzerò.”

Perchè si spinge così tanto verso l’utilizzo di Rust nel kernel Linux?

Rust si presta più facilmente alla scrittura di software sicuro. Samartha Chandrashekar, un product manager di Amazon AWS, ha affermato che “aiuta a garantire la sicurezza dei thread e prevenire errori relativi alla memoria, come overflow del buffer che possono portare a vulnerabilità di sicurezza”.

Rust garantisce la sicurezza della memoria in fase di compilazione utilizzando dei controlli integrati nel compilatore. Il compilatore non consente quindi codice non sicuro per la memoria, a meno che non sia esplicitamente contrassegnato come non sicuro in un blocco o una funzione non sicura. Questa analisi statica in fase di compilazione elimina molti tipi di bug di memoria e, con alcuni controlli di runtime aggiuntivi, Rust garantisce la sicurezza della memoria.

Intendiamoci, nessuno riscriverà gli interi 30 milioni di righe del kernel Linux in Rust. Infatti, l’idea è quella di muoversi gradualmente verso Rust. In particolare, si pensa di iniziare a testare la scrittura in codice in Rust per componenti che siano più di alto livello come i driver. Al momento, Le tre aree di potenziale preoccupazione per il supporto di Rust sono l’utilizzo delle API esistenti nel kernel, il supporto dell’architettura e la gestione della compatibilità dell’interfaccia binaria dell’applicazione (ABI) tra Rust e C.

Ovviamente, per definizione, il kernel dovrà fare operazioni “non standard” in memoria. Come si fa quindi a utilizzare Rust, che tra le sue feature annovera l’impossibilità di fare operazioni non memory-safe, nel kernel? Fortunatamente, Rust permette di disattivare questi controlli, operazione necessaria per sviluppare codice a livello kernel.

Un po’ di storia su Rust

Rust è un linguaggio di programmazione compilato, multi-paradigma, ad uso generico, sviluppato da Mozilla Research, in collaborazione con la comunità open-source. Ha l’obiettivo di essere un linguaggio efficiente, sicuro, e idoneo a sviluppare software concorrente. È progettato per supportare i paradigmi di programmazione imperativo-procedurale, funzionale, e object-oriented.

Il linguaggio è emerso da un progetto personale del dipendente di Mozilla Graydon Hoare. L’appoggio al progetto da parte di Mozilla è cominciato nel 2009 ed è stato annunciato nel 2010. Lo stesso anno è iniziata la riscrittura in Rust del compilatore stesso, inizialmente scritto in OCaml. Questo compilatore, noto come rustc, è riuscito a compilare se stesso nel 2011. Come back end usa il framework open source LLVM.

Il primo rilascio del compilatore di Rust è avvenuto nel gennaio del 2012. Il rilascio della 1.0, la prima versione stabile, è avvenuto il 15 maggio 2015. Sebbene il suo sviluppo sia sostenuto da Mozilla, si tratta di un progetto aperto alla comunità open-source che contribuisce attivamente. La progettazione del linguaggio è stata raffinata dall’esperienza di utilizzo nello sviluppo del motore di browser Web Servo e del compilatore rustc.

In un sondaggio del 2016 effettuato tra gli sviluppatori di Stack Overflow, Rust si è classificato al primo posto come “Most Loved Programming Language”. La posizione è stata confermata anche nei sondaggi del 2017, del 2018, del 2019, del 2020 e del 2021.

Published by
Gabriele La Greca