El caso a favor de Rust en el sistema base
Desarrolladores y usuarios de FreeBSD están valorando si adoptar Rust en el “sistema base” del sistema operativo — el kernel central, libc y las utilidades estándar que se incluyen en cada instalación. Quienes lo apoyan destacan la seguridad de memoria de Rust, su sistema de tipos más fuerte y sus herramientas modernas como una forma de reducir vulnerabilidades y permitir componentes de sistema más robustos, mientras que los críticos advierten sobre una mayor complejidad de compilación, un soporte débil para algunas arquitecturas y el riesgo de fracturar un proyecto tradicionalmente conservador y centrado en C. Muchas voces sugieren un uso gradual y selectivo de Rust y una coordinación más estrecha con las herramientas Rust upstream en lugar de un cambio total.
Alcance: qué significa “sistema base” en FreeBSD
- Incluye el kernel, libc (estrechamente vinculada al kernel), utilidades básicas, dtrace y los compiladores necesarios para construir la base.
- Se entrega y actualiza como una unidad cohesiva única (parches binarios), distinta de los “ports” y los paquetes de terceros.
- La cultura del proyecto tiende hacia una base reducida; lenguajes como Perl fueron eliminados; la cadena de herramientas de LLVM es ahora el principal “bloat”.
Motivaciones para Rust en el sistema base
- Deseo de un objetivo Rust estable en FreeBSD y una mejor integración para herramientas del sistema (por ejemplo, jails, administración de ZFS).
- Se considera valioso que los desarrolladores principales tengan acceso a código Rust específico de FreeBSD como orientación.
- Creación más sencilla de ISOs personalizadas que incluyan utilidades de administración basadas en Rust.
- Algunos quieren que Rust reemplace a C++ en la base y sacar OpenSSL a ports, usando bibliotecas TLS de Rust para herramientas como
fetch.
Rust frente a C/C++: seguridad y características del lenguaje
- Garantías estáticas más fuertes sobre seguridad de memoria y carreras de datos mediante ownership/borrowing y el borrow checker.
- Los movimientos destructivos y el manejo claro de objetos “prestados” frente a “propietarios” previenen muchos errores de use-after-free e invalidación de iteradores que en C/C++ quedan para el tiempo de ejecución o el comportamiento indefinido.
- Se elogian las herramientas modernas (Cargo), conceptos más ricos de biblioteca estándar y patrones avanzados de tipos/iteradores/monádicos; se reconoce una curva de aprendizaje pronunciada.
- Debate sobre cuán diferente es realmente esto de RAII en C++, pero hay consenso en que Rust hace mucho más difíciles los errores de lifetime y concurrencia.
Preocupaciones de plataforma y cadena de herramientas
- El soporte tier‑1 de Rust es limitado; FreeBSD soporta más arquitecturas, aunque esa lista se está reduciendo.
- Hay dudas de que FreeBSD tenga recursos o interés para llevar los targets de FreeBSD a Rust tier‑1.
- Sugerencias: usar el frontend GCC Rust o compiladores que generen C (por ejemplo, mrustc) para plataformas de largo plazo, aunque se cuestiona su practicidad.
- Algunos sostienen que las arquitecturas heredadas que no pueden seguir el ritmo de las cadenas de herramientas modernas ya están en “tiempo prestado”; otros ven a los BSD como el último bastión para ese hardware.
Problemas de compilación, tamaño e integración
- Preocupación por duplicar los tiempos de compilación ya pesados, centrados en LLVM, si Rust entra en la base.
- Discusión sobre añadir una etapa extra de compilación para componentes dependientes de Rust después de
buildworld, y/o desacoplar las toolchains de world. - Tensión entre mantener la base mínima e integrar Rust profundamente.
Seguridad, fiabilidad y pruebas
- Varios comentarios vinculan el 60–70% de las vulnerabilidades graves con la inseguridad de memoria y ven Rust como un remedio parcial.
- Otros subrayan que la mayoría de los ataques a gran escala siguen siendo problemas “básicos” y que Rust no resuelve todos los problemas de seguridad.
- Debate sobre si importa más la elección del lenguaje o la disciplina de pruebas/QA; varios sostienen que las garantías del lenguaje reducen directamente la carga de pruebas y ciertas clases de errores.
- A algunos les preocupa que Rust en kernel/nivel bajo siga estando lleno de
unsafey añada complejidad, socavando la simplicidad que se valora en núcleos de sistemas operativos seguros.
Mocking, estrategia de pruebas y experiencia de desarrollo
- Ejemplo: un conjunto de pruebas para un sistema de archivos FUSE con mocking intensivo se argumenta que sería prácticamente inviable en C, pero manejable en C++/Rust.
- Contraargumento: el mocking en sí mismo suele ser una mala estrategia de pruebas, independientemente del lenguaje.
- Elogio general de las herramientas y la infraestructura de pruebas de Rust, aunque el mocking en Rust no gusta universalmente.
Ecosistema, filosofía e impacto en la comunidad
- Comparaciones: FreeBSD/Go se ven como conservadores y estables; Linux/Rust como rápidos de evolución y flexibles.
- Algunos temen que Rust en la base pueda ser divisivo y desestabilizador, comparándolo con una escisión al estilo “emacs vs vi”.
- Otros ven una introducción selectiva (componentes no del kernel, nuevos daemons) como una vía razonable que no reemplazará de inmediato a C, sino que ampliará las opciones.