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

Miguel Ojeda, autor del proyecto Rust-for-Linux, ha propuesto una quinta 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 está incluido en la rama Linux-next y está lo suficientemente desarrollado 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, tercera y cuarta edición de los parches. En la nueva versión:

  • Se agregaron pruebas de componentes para compatibilidad con Rust al sistema de integración continua basado en el bot 0DAY/LKP compatible con Intel y se inició la publicación de informes de prueba. Nos estamos preparando para integrar el soporte de Rust en el sistema de pruebas automatizadas KernelCI. Las pruebas basadas en GitHub CI se han trasladado al uso de contenedores.
  • Los módulos del kernel de Rust se liberan de la necesidad de definir los atributos de caja “#![no_std]” y “#![feature(…)]”.
  • Se agregó soporte para objetivos de ensamblaje único (.o, .s, .ll y .i).
  • Las pautas de código definen reglas para separar comentarios (“//”) y documentar el código (“///”).
  • El script is_rust_module.sh ha sido reelaborado.
  • Se agregó soporte para primitivas de sincronización estática (variable compartida global) basadas en la implementación "CONFIG_CONSTRUCTORS".
  • La gestión de bloqueos se simplifica: Guard y GuardMut se combinan y son un tipo parametrizado.
  • Es posible definir parámetros adicionales al registrar dispositivos.
  • Se agregó la abstracción "RwSemaphore", que actúa como un contenedor sobre la estructura C rw_semaphore.
  • Para usar mmap, se han agregado un nuevo módulo mm y una abstracción VMA (un contenedor sobre la estructura vm_area_struct).
  • El controlador GPIO PL061 se ha cambiado para utilizar la macro “dev_*!”.
  • Se realizó una limpieza general del código.

Fuente: opennet.ru

Añadir un comentario