Sebbene la maggior parte delle applicazioni Android sia sviluppata utilizzando i linguaggi di programmazione Java e Kotlin (all’interno di Android Studio), lo sviluppo del sistema operativo in sè avviene ancora attraverso C e C++. Google però ha riconosciuto che vi è una limitazione in ciò: d’ora in poi, lo sviluppo di Android nel progetto AOSP potrà avvenire in C, C++ e Rust.
Lo sviluppo low level del sistema operativo Android richiede linguaggi di programmazione di sistema come C e C++. Questi linguaggi forniscono agli sviluppatori controllo e prevedibilità, il che è importante quando si accede a risorse di sistema e hardware di basso livello. Sfortunatamente, C e C++ non riescono a fornire garanzie di sicurezza della memoria, rendendoli soggetti a bug e vulnerabilità di sicurezza.
C e C++ insieme costituiscono decine di milioni di righe di codice sulla piattaforma Android. Questi bug di sicurezza della memoria diventano la fonte di incorrettezza del codice più difficile da affrontare, rappresentando circa il 70% delle vulnerabilità di sicurezza ad alta gravità di Android.
Di contro, Rust fornisce garanzie di sicurezza della memoria utilizzando una combinazione di controlli in fase di compilazione e di runtime per garantire che gli accessi alla memoria siano validi. Questa sicurezza si ottiene senza compromettere le prestazioni che sono equivalenti a C e C++.
Rust riduce anche la necessità di sandboxing, consentendo agli sviluppatori più spazio per introdurre nuove funzionalità che sono più sicure e più leggere sulle risorse.
Rust si concentra poi sulla prevenzione dei bug piuttosto che appoggiarsi pesantemente sul rilevamento dei bug, con conseguente miglioramento della correttezza del codice.
Sebbene Rust abbia effettivamente i suoi vantaggi, non è possibile passare dall’oggi al domani l’intero sistema operativo Android a Rust. E questo potrebbe non essere nemmeno necessario, poiché la maggior parte dei bug di memoria di Android si verificano in codice nuovo o modificato di recente, con circa il 50% di età inferiore a un anno.
Google ritiene che i suoi sforzi per un linguaggio di sviluppo sicuro per la memoria si concentrino meglio sulle novità piuttosto che sulla riscrittura del codice C e C++ maturo.
È bene precisare che Google sta utilizzando Rust nello sviluppo di Android ormai da 18 mesi e alcune delle novità previste su Android 12 ne portano il segno: il nuovo stack Bluetooth di Android con nome in codice “Gabeldorsche” è stato scritto in Rust (i lavori sono iniziati su Gabeldorsche intorno all’annuncio di Android 11 ma non è ancora in uso); il modulo Keystore 2.0 di Android è scritto in Rust, così come la parte dello spazio utente del binder e il driver IPC di Android.
Sebbene non sia correlato ad Android, segnaliamo che anche il nuovo netstack di Fuchsia è stato scritto in Rust.