systemd introduce oficial suport pentru Rust: componente noi în no_std, compilare prin Meson și primul utilitar systemd-keyring-setup
Unul dintre cele mai conservatoare proiecte critice din ecosistemul Linux în ceea ce privește lanțul de compilare și limbajele de programare a făcut un pas istoric: systemd a integrat oficial suport pentru dezvoltarea de componente în Rust în ramura sa principală (main). Modificarea vine în urma aprobării și îmbinării unui pull request propus de dezvoltatorul de kernel Linux Christian Brauner.
Această decizie nu reprezintă o rescriere completă a sistemului de inițializare, ci o deschidere strict controlată, concepută pentru a beneficia de garanțiile de siguranță a memoriei (memory safety) oferite de Rust, fără a compromite arhitectura monolitică în C deja existentă.
Regulile stricte de integrare: Fără rescrieri C, fără Cargo și mod no_std
Menținătorii systemd au agreat un set de constrângeri stricte privind modul în care codul Rust poate exista în depozit:
Strict pentru componente noi, de sine stătătoare: Codul existent în C rămâne neatins. Rust este permis exclusiv pentru utilitare noi, izolate (standalone), de care alte componente fundamentale ale systemd nu depind.
Fără managerul Cargo — Compilare prin Meson: Pentru a nu fragmenta infrastructura de compilare, systemd nu folosește
cargo. Întregul flux de compilare pentru Rust este orchestrat direct prin sistemul existent Meson, asigurând o integrare omogenă cu restul bazei de cod.Paradigma
no_stdși zero crate-uri externe terțe: Programele Rust nu depind de biblioteca standard Rust (std) și nici de pachete externe de pe crates.io. În schimb, ele rulează în modulno_stdși interacționează cu subsistemele interne prin legături (bindings) generate automat către bibliotecile C din systemd.Gestiune explicită a alocărilor: systemd include propriile implementări Rust pentru tipurile uzuale de containere. Eșecurile de alocare a memoriei sunt tratate explicit prin returnarea de erori, împiedicând oprirea forțată (abort/panic) a procesului. De asemenea, au fost adăugate wrappere sigure pentru logging, parsarea argumentelor CLI, bucla de evenimente și gestionarea erorilor.
Cerințe de compilare și amprenta binară
Suportul pentru Rust este opțional și autodetectat în timpul configurării:
| Parametru / Cerință | Specificație tehnică |
| Versiune Rust cerută | Rust 1.85 sau mai nou |
| Generator de bindings | bindgen 0.71.1 sau mai nou |
| Sistem de build | Meson 1.4 sau mai nou |
| Amprentă binară (Strip) | Un utilitar de test compilat în Rust măsoară aprox. 32 KB, comparativ cu 20 KB pentru echivalentul său în C compilat cu LTO (Link-Time Optimization). |
| Fallback | Sistemele sau mediile de compilare care nu dispun de lanțul de unelte Rust pot construi în continuare systemd fără aceste componente. |
Primul utilitar nativ: systemd-keyring-setup
Prima aplicație practică din lumea reală construită pe noua infrastructură Rust va fi systemd-keyring-setup:
Rol: Un utilitar dedicat gestionării certificatelor și cheilor criptografice în inelele de chei (keyrings) din kernel-ul Linux.
Implementarea acestuia este dezvoltată modular, în paralel cu scrierea de noi wrappere Rust sigure peste bibliotecile partajate ale systemd.
Impactul asupra distribuțiilor Linux
Pentru menținătorii de pachete din distribuțiile majore (Debian, Fedora, Arch, Ubuntu, openSUSE), această schimbare impune decizii la împachetare: compilarea unui pachet systemd care include toate funcționalitățile noi va necesita compilatorul Rust și bindgen ca dependențe de build, sau menținătorii vor trebui să dezactiveze explicit flag-ul de Rust pentru profilurile minimale.
Sursa articolului:

Comentarii
Trimiteți un comentariu