Negli ultimi giorni la community Linux ha registrato un’altra tappa significativa nell’adozione di Rust: systemd ha ufficialmente aggiunto il supporto per scrivere nuovi componenti in questo linguaggio.
La modifica è stata unita da Christian Brauner (già noto come sviluppatore del kernel Linux) e farà parte della prossima versione systemd 263, attesa per dicembre 2026.
Cosa è stato introdotto esattamente?
Non si tratta di una riscrittura di systemd in Rust, né di un cambio radicale di direzione. Le regole stabilite dai maintainers sono piuttosto chiare e restrittive:
- Rust può essere usato solo per nuovi componenti “leaf” (cioè strumenti indipendenti che non sono utilizzati da altre parti di systemd).
- Nessun codice C esistente verrà portato in Rust.
- I componenti core (come libsystemd, i moduli NSS e PAM) restano in C.
- Il build system continua a essere Meson: Cargo non è ammesso.
- Non è permesso usare crate esterne: il codice Rust deve essere no_std e collegarsi al resto di systemd solo tramite linkage C.
In pratica, Rust viene introdotto in modo prudente e controllato, solo dove non rischia di complicare la catena di dipendenze o di gonfiare inutilmente i binari.
Il primo componente reale: systemd-keyring-setup
Il primo pezzo di codice scritto in Rust è systemd-keyring-setup. Questo strumento si occupa, durante il boot, di preparare i keyring del kernel e di iscrivere certificati X.509 nei keyring usati da dm-verity, fs-verity e BPF. Dopo l’operazione i keyring vengono “sigillati”.
È un componente relativamente isolato, quindi ideale come primo caso d’uso.
Perché queste limitazioni?
Brauner ha spiegato che il team vorrebbe in futuro portare Rust anche nel core di systemd, ma al momento ci sono ancora ostacoli tecnici legati al supporto delle librerie dinamiche in Rust. Superarli oggi significherebbe aumentare notevolmente le dimensioni di tutti i binari di systemd, cosa che i maintainers vogliono evitare.
Inoltre, scegliere Meson al posto di Cargo permette di mantenere un unico sistema di build e di avere un controllo più stretto sulla supply chain, aspetto particolarmente importante per un progetto critico come systemd.
Dimensioni e requisiti
I binari Rust risultano leggermente più grandi di quelli equivalenti in C (in un test: circa 32 KB contro 20 KB).
Per abilitare il supporto servono:
- Rust ≥ 1.85
- bindgen ≥ 0.71.1
- Meson ≥ 1.4.0
Il supporto è opzionale e si attiva con l’opzione -Drust= di Meson (di default è impostato su auto).
Cosa significa per gli utenti e per le distro?
Per la stragrande maggioranza degli utenti non cambia quasi nulla, almeno fino all’arrivo di systemd 263 e dei primi componenti scritti in Rust.
Per le distribuzioni, invece, si apre la possibilità di iniziare a sperimentare componenti nuovi in un linguaggio più sicuro a livello di memoria, senza dover toccare il codice storico.
È un approccio molto pragmatico: systemd non sta “diventando Rust”, ma sta creando uno spazio controllato in cui Rust può crescere, un pezzo alla volta.