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 modul no_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 bindingsbindgen 0.71.1 sau mai nou
Sistem de buildMeson 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).
FallbackSistemele 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: Linuxiac — systemd Officially Adds Rust Support for New Components

Comentarii

Postări populare de pe acest blog

Linux Mint 27 „Adrien” sosește de Crăciun: Schimbare istorică prin renunțarea la versiunile intermediare (point releases)

⏱️ Test de laborator Neowin: Linux spulberă Windows 11 în sarcinile zilnice și managementul resurselor!

PhotoSuite: O alternativă gratuită și open-source la Photoshop, cu suport nativ pentru fișiere PSD