Ya fue enviada la segunda versión de los parches para el soporte de controladores Rust en Linux
En marzo de este año en la rama linux-next en la cual en su momento se trabajaba para el kernel de Linux 5.13, se incluyo un conjunto inicial de componentes para desarrollar controladores de dispositivos en el lenguaje Rust y ahora ya se ha hecho la petición para incluir una segunda edición de los parches para añadir el soporte de Rust en el kernel de Linux.
La persona que ha enviado la petición a los desarrolladores de Linux es Miguel Ojeda autor del proyecto Rust-for-Linux y de quien tambien hablamos de él hace algunos dias, ya que fue contratado para hacerse cargo del proyecto «Prossimo» el cual básicamente se enfoca en coordinar los esfuerzos para trasladar la infraestructura de software crítico a un código seguro para asegurar la memoria del kernel de Linux con Rust (si quieres conocer más al respecto del proyecto, puedes consultar la publicación en el siguiente enlace.)
La petición enviada por Miguel Ojeda es una segunda versión actualizada de los componentes para el desarrollo de controladores de dispositivos en lenguaje Rust y en la cual se eliminan los comentarios hechos durante la discusión de la primera versión de los parches y a la cual Linus Torvalds ya se unió a la discusión y sugirió cambiar la lógica para procesar algunas operaciones de bits.
Dentro de los beneficios que se mencionan son que el manejo seguro de la memoria está garantizado en Rust en el tiempo de compilación mediante la verificación de referencias, el seguimiento de la propiedad del objeto y la vida útil del objeto, así como mediante la evaluación de la corrección del acceso a la memoria en el tiempo de ejecución.
Rust también brinda protección contra desbordamientos de 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, adopta el concepto de referencias y variables inmutables de forma predeterminada y ofrece una fuerte escritura estática para minimizar los errores lógicos.
De los cambios que se destacan de esta nueva versión de los parches se menciona:
- El código de asignación de memoria se evita la posibilidad de generar un estado de pánico cuando se producen errores, como la falta de memoria.
- Se incluye una variante de la biblioteca de Rust alloc, en la que se ha reelaborado el código para manejar los bloqueos, pero el objetivo final es llevar todas las características necesarias para el kernel a la edición principal de alloc (los cambios ya se han preparado y transferido a la biblioteca estándar de Rust).
- En lugar de compilaciones nightly, ahora se pueden usar versiones beta y estables del compilador rustc para compilar un kernel habilitado para Rust. Actualmente, rustc 1.54-beta1 se usa como compilador de referencia, pero después del lanzamiento de 1.54 a fin de mes, se admitirá como compilador de referencia.
- Se agregó soporte para escribir pruebas usando el atributo estándar de Rust «# [test]» y la capacidad de usar doctests para usar el código de ejemplo de la documentación como pruebas.
- Se agregó soporte para arquitecturas ARM32 y RISCV además de x86_64 y ARM64 previamente admitidos.
Implementaciones mejoradas de GCC Rust (el frontend de GCC para Rust) y rustc_codegen_gcc (el backend de rustc para GCC), que ahora pasa todas las pruebas de referencia. - Se ha introducido un nuevo nivel de abstracción para que los programas de Rust utilicen mecanismos de kernel escritos en C, como árboles, objetos de recuento de referencias , creación de descriptores de archivos, tareas, archivos y vectores de E/S.
- Los componentes de desarrollo de controladores han mejorado la compatibilidad con el módulo «file_operations», la macro «module!», El registro de macros y controladores rudimentarios (sonda y eliminación).
- Binder tiene soporte para pasar descriptores de archivos y enlaces LSM.
- Se propone un ejemplo más funcional de un controlador Rust, bcm2835-rng, para un generador de números aleatorios de hardware para placas Raspberry Pi.
Finalmente si estás interesado en conocer más al respecto, puedes consultar los detalles en el siguiente enlace.