Llega la octava version de los parches para el soporte de controladores Rust en Linux
Miguel Ojeda, autor del proyecto Rust-for-Linux dio a conocer el octavo lanzamiento del desarrollo de parches para el kernel de Linux con soporte para el lenguaje Rust para que los desarrolladores del kernel de Linux los consideren.
Este se posiciona como el noveno lanzamiento de los parches (teniendo en cuenta la primera versión publicada sin número de versión). El soporte de Rust se considera experimental, pero ya está incluido en la rama linux-next, afirmapara la integración en la versión de otoño de 5.20/6.0 y está lo suficientemente avanzado como para comenzar a trabajar en la creación de capas de abstracción sobre los subsistemas del núcleo, así como en la escritura de controladores y módulos.
El desarrollo está financiado por Google y el ISRG (Internet Security Research Group), que es el fundador del proyecto Let’s Encrypt y promueve HTTPS y el desarrollo de tecnologías para aumentar la seguridad de Internet.
Los cambios propuestos hacen posible el uso de Rust como segundo lenguaje para desarrollar controladores y módulos del kernel. El soporte de Rust se presenta como una opción que no está habilitada de forma predeterminada y no da como resultado la inclusión de Rust entre las dependencias de compilación requeridas para el kernel. El uso de Rust para desarrollar controladores le permitirá crear controladores mejores y más seguros con un esfuerzo mínimo, sin problemas como acceder a un área de memoria después de liberarla, desreferenciar punteros nulos y desbordamientos de búfer.
La seguridad de la memoria se proporciona en Rust en tiempo de compilación mediante la verificación de referencias, el seguimiento de la propiedad del objeto y la vida útil del objeto (alcance), así como mediante la evaluación de la corrección del acceso a la memoria durante la ejecución del código.
¿Qué hay de nuevo en este octavo lanzamiento?
En esta nueva propuesta que se dio a conocer se menciona que la variante de la biblioteca alloc, que eliminó la posible generación de estado de «panic» en los errores, se actualizó a la versión Rust 1.62. En comparación con la versión anterior, el kit de herramientas de Rust ha estabilizado el soporte para la funcionalidad const_fn_trait_bound utilizada en los parches del kernel.
Ademas de ello el código de enlaces se separa en un paquete de cajas de «bindings» separado, lo que facilita la reconstrucción si solo se cambia el paquete principal del «kernel».
Tambien se destaca la implementación de la macro «concat_idents!», reescrito en forma de macro de procedimiento, no vinculado a la funcionalidad de concat_idents y que permite el uso de referencias a variables locales.
Ademas de ello, se menciona que la macro «static_assert!» ha sido reescrita para permitir que «core::assert!()» se use en cualquier contexto en lugar de constantes, mientras que la macro «error_construcción!» se ha adaptado para funcionar al configurar el modo «RUST_BUILD_ASSERT_{WARN,ALLOW}» para módulos.
Se agregó el módulo fs que proporciona enlaces para trabajar con sistemas de archivos. Se propone un ejemplo de un sistema de archivos simple escrito en Rust, asi como tambien se agregó el módulo de cola de trabajo para trabajar con las colas del sistema.
De los demás cambios que se destacan de esta nueva propuesta:
- Se agregó un archivo de configuración separado «kernel/configs/rust.config».
- Los archivos «*.i» procesados en sustituciones de macros se han renombrado como «*.rsi».
- Se eliminó la compatibilidad con la creación de componentes de Rust con niveles de optimización distintos de los utilizados para el código C.
- El desarrollo del módulo kasync continuó con la implementación de métodos de programación asíncrona (async).
- Se agregó un ejemplo de un servidor TCP a nivel de kernel escrito en Rust y se agregó la capacidad de manejar interrupciones en Rust.
- Se agregó una macro de procedimiento para facilitar el trabajo con tablas de punteros de funciones, como la estructura file_operations.
- Se ha agregado la implementación de listas enlazadas bidireccionales «unsafe_list::List».
- Se agregó soporte inicial para RCU y el tipo Guard para verificar si un bloqueo de lectura está vinculado al hilo actual.
- Se agregó la función Task::spawn() para generar e iniciar automáticamente los subprocesos del kernel.
- También se ha agregado el método Task::wake_up().
- Se agregó un módulo de retraso
Finalmente si estás interesado en conocer más al respecto, puedes consultar los detalles en el siguiente enlace.