# systemd merges Rust support with strict limits, core migration blocked by ABI

> **Key takeaway:** systemd has merged optional Rust support for new standalone programs only, with core and libsystemd-shared remaining in C due to Rust's lack of stable ABI and filesystem access limitations.

**Published:** 2026-11-05T10:12:32+00:00 
**Source:** It&#x27;s FOSS Community News 
**Category:** distro-news 
**Canonical URL:** https://fosswire.org/news/systemd-merges-rust-support-with-strict-limits-core-migratio.html 

## Summary
The systemd project has merged support for writing programs in Rust through a 19-commit pull request on its main branch, following rules established at a Berlin hackfest. The first Rust program is systemd-keyring-setup, which loads X.509 certificates into kernel keyrings including dm-verity and fs-verity at boot before lockdown. Rust remains strictly optional: systemd can be built without it, and the scope is limited to new standalone programs with no dependents, built through meson without cargo.

The integration imposes severe constraints: only core and libc crates are permitted, excluding std and alloc, with programs using systemd's own Box and Vec types that return errors on failed allocation rather than panicking. Building requires rustc 1.85, bindgen 0.71.1, and meson 1.4.0 or newer. Distributions like Arch and openSUSE OBS that enable all features must either install the Rust toolchain or disable Rust support. The shared library libsystemd-shared stays in C because Rust lacks a stable ABI, and systemd's file-descriptor-based path lookup for security is incompatible with Rust's standard path handling.

## Rust integration constraints and architectural barriers
- **Build system:** All Rust code compiles through meson, with cargo explicitly excluded from the build process, ensuring consistency with systemd's existing C build infrastructure.
- **Crate restrictions:** Only core and libc crates are permitted; std and alloc are banned, requiring systemd to provide its own Box and Vec types with fallible allocation that returns errors instead of panicking.
- **ABI limitation:** libsystemd-shared remains C-only because Rust has no stable ABI, preventing shared library integration; Rust programs call this library identically to C programs.
- **Filesystem access gap:** systemd's security model requires path lookups through file descriptors, which Rust's standard path handling does not support, creating a blocker for sensitive components.
- **Behavioral parity:** Rust programs must match C program behavior exactly, with automated tests verifying equivalence for commands that exist in both implementations.

## Why it matters
This development signals growing institutional acceptance of Rust in Linux's most critical infrastructure while exposing where the language still falls short for systems programming. Distributors will need to evaluate toolchain dependencies, and the constraints around ABI stability and secure filesystem access identify concrete areas where Rust ecosystem evolution could unlock deeper integration into init systems and similar low-level components.