Rust entra en systemd, pero con condiciones: solo programas nuevos, sin biblioteca estándar y con la biblioteca compartida aún en C

Linux CIBERED 2026

Systemd ha merged el soporte para escribir sus programas en Rust: la iniciativa ha entrado en la rama principal mediante un pull request de 19 commits, aunque la biblioteca central compartida y el núcleo del sistema seguirán en C por ahora.

El pull request sustituye a una propuesta anterior y aplica las reglas que los mantenedores acordaron en un hackathon celebrado en Berlín. El primer programa que utiliza el nuevo soporte es systemd-keyring-setup, una utilidad que añade certificados X.509 a los llaveros del kernel -como los de dm-verity y fs-verity- durante el arranque, antes de bloquearlos.

Las reglas con las que Rust entra en systemd

La incorporación de Rust no es una apertura sin condiciones. Los mantenedores han definido un marco estricto que limita el alcance y las dependencias del lenguaje dentro del proyecto.

Rust es opcional. systemd puede seguir compilándose sin Rust. Las distribuciones que no quieran añadir el toolchain a sus procesos de construcción pueden desactivar el soporte sin perder funcionalidad.

El alcance se limita a programas nuevos e independientes. Solo se permite Rust en utilidades que no sean dependencia de otros componentes. Nada de reescribir código C existente ni de introducir Rust en módulos de los que dependan otros programas.

La compilación pasa por meson, no por cargo. El sistema de construcción de systemd sigue siendo meson, lo que excluye a cargo —el gestor de paquetes y construcción de Rust— del proceso. Es una decisión que mantiene la coherencia con el resto del proyecto y evita introducir una segunda cadena de herramientas.

Solo se permiten los crates core y libc. Eso deja fuera la biblioteca estándar de Rust y el crate alloc. Los programas deben usar los tipos Box y Vec propios de systemd, y un fallo de asignación de memoria debe devolver un error en lugar de provocar un pánico.

Los programas en Rust deben comportarse como sus equivalentes en C. El proyecto incluye una prueba que verifica que un programa Rust declarado con el mismo comando que uno C produce el mismo comportamiento.

¿Qué se necesita para compilar con Rust?

Las distribuciones que quieran activar el soporte de Rust necesitan:

  • rustc 1.85 o superior.
  • bindgen 0.71.1 o superior.
  • meson 1.4.0 o superior.

Las distribuciones que compilan systemd con todas las funciones activadas, como Arch Linux o openSUSE OBS, tendrán que instalar el toolchain de Rust o desactivar el soporte. No es una dependencia obligatoria, pero sí una decisión que cada distribución debe tomar.

¿Por qué la biblioteca compartida sigue en C?

El aspecto que más ha llamado la atención es que libsystemd-shared, la biblioteca que comparten los programas de systemd, permanece en C. El motivo es técnico: mover esa biblioteca a Rust requeriría soporte adecuado de bibliotecas compartidas por parte del propio lenguaje, y Rust todavía no tiene una ABI estable.

Eso significa que los programas en Rust utilizan la biblioteca en C igual que lo hacen los programas en C. Introducir Rust dentro de la biblioteca duplicaría el mismo código en la biblioteca y en muchos de los binarios de systemd, lo que aumentaría el tamaño y la complejidad del mantenimiento sin un beneficio claro.

Hay un segundo obstáculo: el acceso al sistema de archivos. systemd resuelve las rutas a través de descriptores de archivo para mantener ese paso seguro, y no acepta el manejo estándar de rutas de Rust para sus componentes sensibles. El proyecto ha expresado su deseo de que Rust soporte ese enfoque en el futuro.

El núcleo de systemd y el futuro de Rust en el proyecto

systemd mantiene su intención de llevar Rust al núcleo del sistema y se ha declarado abierto a trabajar con la comunidad de Rust para lograrlo. Pero ese paso depende de que el lenguaje resuelva las limitaciones que hoy lo impiden: la falta de una ABI estable para bibliotecas compartidas y el soporte para el acceso a archivos basado en descriptores.

Mientras tanto, la puerta está abierta para programas nuevos e independientes. Es un modelo de adopción gradual que permite al proyecto experimentar con Rust sin comprometer la estabilidad ni la compatibilidad del resto del sistema.

La ola de Rust en el ecosistema Linux

systemd no es el único componente del stack de Linux que está haciendo sitio a Rust.

El lenguaje entró en el kernel de Linux con la versión 6.1 como un esfuerzo exploratorio, y los mantenedores del kernel declararon a finales del año pasado que la fase de experimentación había terminado. Eso significa que Rust ya no es una prueba piloto en el kernel, sino una tecnología aceptada para el desarrollo de controladores y otros componentes.

Ubuntu ha seguido un camino similar en sus herramientas principales: sudo-rs y uutils coreutils se han convertido en las experiencias por defecto en las versiones recientes de la distribución. Son reemplazos en Rust de utilidades clásicas del sistema, y su adopción marca un cambio en la composición del userland de Linux.

La tendencia apunta a que la adopción de Rust se acelere en 2027. Los proyectos que ya han empezado a integrarlo —kernel, systemd, Ubuntu— están sentando las bases para que otros sigan el mismo camino.

Lo que falta por confirmar

systemd no ha especificado qué otros programas podrían adoptar Rust en los próximos meses ni ha publicado un calendario para la incorporación de Rust al núcleo del sistema. Tampoco ha detallado cómo se gestionará la convivencia entre los programas en Rust y los programas en C en términos de empaquetado y distribución.

La documentación del proyecto incluye las reglas de contribución para código Rust y las pruebas que deben superar los nuevos programas. Los desarrolladores que quieran contribuir con código Rust tienen ya un marco definido.

Vistas: 1

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio