Cuarta edición de parches para el kernel de Linux con soporte para el lenguaje Rust

Miguel Ojeda, autor del proyecto Rust-for-Linux, propuso una cuarta versión de componentes para desarrollar controladores de dispositivos en lenguaje Rust para que los desarrolladores del kernel de Linux la consideren. El soporte de Rust se considera experimental, pero ya se ha acordado su inclusión en la rama linux-next y está lo suficientemente maduro como para comenzar a trabajar en la creación de capas de abstracción sobre los subsistemas del kernel, así como también 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 mejorar la seguridad en Internet.

Recuerde 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 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 referencias y variables inmutables de forma predeterminada, ofrece tipado estático fuerte para minimizar los errores lógicos.

La nueva versión de los parches continúa eliminando los comentarios realizados durante la discusión de la primera, segunda y tercera edición de los parches. En la nueva versión:

  • Se ha realizado la transición al uso de 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 conjunto 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). .XNUMX) están anotados.
  • Se agregaron comprobaciones automáticas de la disponibilidad de herramientas Rust adecuadas y se amplió la capacidad de probar la compatibilidad con Rust en el sistema.
  • Se han propuesto nuevas abstracciones para acceder a las tablas de identificadores de dispositivos ("IdArray" e "IdTable") desde el código Rust.
  • Se agregaron capas para acceder a funciones relacionadas con el temporizador (marco de reloj).
  • Los controladores de plataforma ahora se definen mediante implementaciones de rasgos.
  • Se ha agregado una nueva macro para simplificar el registro de controladores de plataforma y se ha propuesto una nueva plantilla de controlador genérica.
  • Se agregaron macros para estructuras "dev_*".
  • Se agregaron métodos "{read,write}*_relaxed" para el tipo IoMem .
  • Se eliminó la propiedad FileOpener para simplificar las operaciones con archivos.
  • El parámetro "ThisModule" se ha agregado a los argumentos pasados ​​al registrar un controlador.
  • Se propone una plantilla estándar para crear módulos del kernel en lenguaje Rust.

Fuente: opennet.ru

Añadir un comentario