Ya fue publicada la cuarta versión de los parches para el soporte de controladores Rust en Linux
Miguel Ojeda, autor del proyecto Rust-for-Linux, dio a conocer reciénteme la cuarta propuesta para los componentes del controlador de dispositivo Rust para que la consideren los desarrolladores del kernel de Linux.
El soporte de Rust se considera experimental, pero ya se acordó incluirlo en la rama linux-next y es lo suficientemente maduro como para comenzar a trabajar en capas de abstracción sobre los subsistemas del kernel, así como para escribir 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.
Para quien aún desconoce de los cambios propuestos, deben saber que estos 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 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.
¿Cuáles son los cambios en a cuarta entrega?
En esta nueva versión que se presentan de los parches se menciona que se continuó con la eliminación de los comentarios realizados durante la discusión de la primera, segunda y tercera edición de los parches.
Seguiremos actualizando hasta que no dependamos de ninguna característica inestable;
momento en el que es posible que deseemos comenzar a declarar una versión mínima de Rust
es compatible, como se hace, por ejemplo, para GCC y Clang.Del mismo modo, también migramos a la edición 2021 del lenguaje Rust.
En cuanto a los demás cambios que se realizaron en esta nueva versión en el anuncio se menciona lo siguiente:
- Se realizó la transición para poder usar la versión estable de Rust 1.58.0 como compilador de referencia.
- Entre los cambios necesarios para el proyecto, que aún no están incluidos en el kit de herramientas principal de Rust, se encuentran el indicador «-Zsymbol-mangling-version=v0» (esperado en Rust 1.59.0) y el modo «maybe_uninit_extra» (esperado en Rust 1.60.0).
- Se agregaron las verificaciones automáticas para la disponibilidad de las herramientas de Rust y que ademas de ello estas sean adecuadas y que tambien se amplió la capacidad de probar el soporte de Rust en el sistema.
- Se proponen las nuevas abstracciones para poder acceder a las tablas de identificadores de los dispositivos («IdArray» e «IdTable») desde el código Rust.
- Se agregaron las capas para las funciones de llamada que estan relacionadas con el temporizador (marco de reloj).
- Los controladores de la plataforma ahora se definen a través de las implementaciones de los rasgos.
- Se ha agregado una nueva macro para poder simplificar el registro de los controladores de la plataforma y se ha propuesto una nueva plantilla de controlador genérico.
- Se agregaron nuevas macros para las estructuras «dev_*».
- Se agregaron los nuevos métodos «{read,write}*_relaxed» para el tipo IoMem<T>.
- Se eliminó la propiedad FileOpener para simplificar las operaciones con archivos.
- Se agregó el parámetro «ThisModule» al número de argumentos pasados durante el registro del controlador.
- Se propone una plantilla típica para crear módulos de kernel en el lenguaje Rust.
Finalmente si estás interesado en poder conocer más al respecto sobre esta nueva versión, puedes consultar los detalles en el siguiente enlace.