Ya fue publicada la quinta versión de los parches para el soporte de controladores Rust en Linux
Tal parece que el desarrollo de los parches para el soporte de controladores Rust en Linux ha tomado un buen ritmo, pues fue hace poco más de un mes que se dio a conocer la quita propuesta, ya que desde la tercera versión se ha venido entregando una nueva propuesta cada mes y ahora se ha dado a conocer la nueva propuesta, siendo esta la sexta edición.
Miguel Ojeda ha propuesto el nuevo lanzamiento de los componentes para el desarrollo de controladores de dispositivos Rust para que los desarrolladores del kernel de Linux los consideren. Esta es la sexta edición aun se considera experimental, pero ya está incluido en la rama linux-next y es lo suficientemente maduro como para comenzar a trabajar en la creación de capas de abstracción sobre los subsistemas del kernel, así como en la escritura de controladores y módulos.
Para quienes aún desconocen de este desarrollo, deben saber que 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.
Cabe recordar que 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. Rust también brinda protección contra desbordamientos de enteros, requiere que las variables se inicialicen antes de su uso, maneja mejor los errores en la biblioteca estándar, aplica el concepto de referencias y variables inmutables de forma predeterminada y ofrece tipado estático fuerte para minimizar los errores lógicos.
En la nueva versión de los parches, se continuó con la eliminación de los comentarios realizados durante la discusión de la primera, segunda, tercera, cuarta y quinta ediciones de los parches (de los cuales te dejo sus correspondientes enlaces).
Principales novedades en la sexta propuesta
Con la llegada de esta nueva propuesta se ha actualizado el kit de herramientas antes del lanzamiento de Rust 1.59.0, junto con la cual una variante de la biblioteca alloc también se sincroniza con la nueva versión de Rust, eliminando la posible generación de un estado de «pánico» cuando ocurren errores, como por ejemplo, sin memoria.
Otro de los cambios que se ha realizado, es que ahora, en lugar de proporcionar archivos de especificación de plataforma de destino creados previamente, se generan dinámicamente en función de la configuración del kernel.
Ademas de que tambien se destaca que se agregó el parámetro del kernel HAVE_RUST para que se habilite para arquitecturas compatibles con Rust y que se han propuesto abstracciones para su uso en el código Rust de un generador de números pseudoaleatorios de hardware.
Por otra parte, se menciona que se ha estabilizado la capacidad de utilizar inserciones de ensamblador («feature(global_asm)») y que se agregó soporte para crear programas host en Rust que se usan en el proceso de compilación del kernel.
De los demás cambios que se destacan de esta nueva propuesta:
- Se permitió el uso de códigos de error sin el prefijo «Error::» (por ejemplo, «return Err(EINVAL)») para aproximar el manejo de códigos de error en C.
- Se agregó el tipo «CString» para cadenas C nativas. Tipos de formateador y búfer combinados.
- Se agregaron rasgos Bool y LockInfo.
- Implementación simplificada de spin-locks.
Finalmente si estás interesado en poder conocer más al respecto sobre esta nueva propuesta, puedes consultar los detalles en el siguiente enlace.