Miguel Ojeda, autor del proyecto Rust-for-Linux, ha propuesto a los desarrolladores del núcleo de Linux una versión actualizada de los componentes para el desarrollo de controladores de dispositivos en el lenguaje Rust. El soporte para Rust se considera experimental, pero ya se ha acordado su inclusión en la rama linux-next. En esta nueva versión se han resuelto las observaciones realizadas durante la discusión de la primera versión de los parches. Linus Torvalds ya se ha unido a la discusión y ha propuesto cambiar la lógica de procesamiento de algunas operaciones bit a bit.
Recordemos que los cambios propuestos permiten usar Rust como segundo lenguaje para el desarrollo de controladores y módulos del núcleo. El soporte para Rust se presenta como una opción, no activada por defecto y no provoca la inclusión de Rust entre las dependencias de construcción obligatorias del núcleo. Usar Rust para el desarrollo de controladores permitirá crear controladores seguros y de mayor calidad con un esfuerzo mínimo, libre de problemas como el acceso a áreas de memoria después de su liberación, la desreferencia de punteros nulos y la salida de los límites del búfer.
El manejo seguro de la memoria se garantiza en Rust durante la compilación a través de la verificación de referencias, el seguimiento de la propiedad de los objetos y la consideración del tiempo de vida de los objetos (áreas de visibilidad), así como mediante la evaluación de la corrección del acceso a la memoria durante la ejecución del código. Rust también proporciona medios para proteger contra desbordamientos enteros, requiere la inicialización obligatoria de los valores de las variables antes de su uso, maneja mejor los errores en la biblioteca estándar, aplica el concepto de inmutabilidad (immutable) de referencias y variables por defecto, y ofrece una fuerte tipificación estática para minimizar errores lógicos.
Los cambios más notables en la nueva versión de los parches son:
- El código para la asignación de memoria ha sido liberado de posibles generadores de estado de "panic" al ocurrir errores, como la falta de memoria. Se ha incluido una versión de la biblioteca Rust alloc, en la que se ha reformado el código para manejar fallos, pero el objetivo final es trasladar a la edición principal de alloc todas las capacidades necesarias para el núcleo (los cambios ya han sido preparados y enviados a la biblioteca estándar de Rust).
- En lugar de compilaciones nocturnas para compilar el núcleo con soporte para Rust, ahora se pueden usar versiones beta y lanzamientos estables del compilador rustc. Actualmente, como compilador de referencia se utiliza rustc 1.54-beta1, pero después del lanzamiento de la 1.54 a finales de mes, este último será el que se mantenga como referencia.
- Se ha añadido soporte para escribir pruebas utilizando el atributo estándar de Rust «#[test]» y la posibilidad de aplicar doctests para documentar pruebas.
- Se ha añadido soporte para las arquitecturas ARM32 y RISCV además de las anteriormente soportadas x86_64 y ARM64.
- Se han mejorado las implementaciones de GCC Rust (frente de GCC para Rust) y rustc_codegen_gcc (backend de rustc para GCC), que ahora pasa todas las pruebas básicas.
- Se ha propuesto un nuevo nivel de abstracción para usar en programas en lenguaje Rust mecanismos del núcleo escritos en C, como árboles rojo-negro, objetos con conteo de referencias, creación de descriptores de archivos, tareas, archivos y vectores de entrada/salida.
- En los componentes para el desarrollo de controladores se ha mejorado el soporte para el módulo «file_operations», el macro «module!», el registro de macros y controladores rudimentarios (probe y remove).
- En Binder se ha implementado el soporte para la transmisión de descriptores de archivos y ganchos LSM.
- Se ha propuesto un ejemplo más funcional del controlador en Rust: bcm2835-rng para el generador de números aleatorios de hardware de las placas Raspberry Pi.
Además, se mencionan proyectos de algunas empresas relacionados con el uso de Rust en el núcleo:
- La empresa Microsoft ha expresado interés en participar en el trabajo de integración del soporte de Rust en el núcleo de Linux y está dispuesta a proporcionar implementaciones de controladores para Hyper-V en Rust en los próximos meses.
- La empresa ARM está trabajando en mejorar el soporte de Rust para sistemas basados en procesadores ARM. Al proyecto Rust ya se le han propuesto cambios que elevarían los sistemas ARM de 64 bits al nivel de plataformas de primer nivel de soporte (Tier-1).
- Google proporciona soporte directo al proyecto Rust for Linux, está desarrollando una nueva implementación del mecanismo de comunicación entre procesos Binder en Rust y está considerando la posibilidad de reescribir varios controladores en Rust. A través de ISRG (Internet Security Research Group), Google ha financiado el trabajo de integración del soporte de Rust en el núcleo de Linux.
- La empresa IBM ha implementado soporte para Rust en el núcleo para sistemas PowerPC.
- El Laboratorio LSE (Laboratorio de Investigación de Sistemas) ha desarrollado un controlador SPI en Rust.
Fuente: opennet.ru
