Segunda 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 versión actualizada de componentes para desarrollar controladores de dispositivos en el 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. La nueva versión elimina los comentarios realizados durante la discusión de la primera versión de los parches. Linus Torvalds ya se unió a la discusión y propuso cambiar la lógica para procesar algunas operaciones de bits.

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.

Los cambios más notables en la nueva versión de los parches:

  • El código de asignación de memoria está libre de generar potencialmente un estado de "pánico" cuando ocurren errores como falta de memoria. Se incluye una variante de la biblioteca alloc de Rust, que reelabora el código para manejar fallas, pero el objetivo final es transferir todas las características necesarias para el kernel a la edición principal de alloc (los cambios ya se han preparado y transferido al estándar Biblioteca de óxido).
  • En lugar de compilaciones nocturnas, ahora puede utilizar versiones beta y versiones estables del compilador Rustc para compilar un kernel compatible con Rust. Actualmente, Rustc 1.54-beta1 se utiliza como compilador de referencia, pero después de que se lance la versión 1.54 a finales de mes, será compatible como compilador de referencia.
  • Se agregó soporte para escribir pruebas usando el atributo estándar “#[test]” para Rust y la capacidad de usar doctests para documentar pruebas.
  • Se agregó soporte para arquitecturas ARM32 y RISCV además de x86_64 y ARM64 anteriormente compatibles.
  • Implementaciones mejoradas de GCC Rust (frontend de GCC para Rust) y Rustc_codegen_gcc (backend de Rustc para GCC), que ahora pasa todas las pruebas básicas.
  • Se propone un nuevo nivel de abstracción para su uso en programas Rust de mecanismos del kernel escritos en C, como árboles rojo-negro, objetos contados por referencias, creación de descriptores de archivos, tareas, archivos y vectores de E/S.
  • Los componentes de desarrollo de controladores han mejorado el soporte para el módulo file_operatives, el módulo! macro, el registro de macros y los controladores rudimentarios (probar y eliminar).
  • Binder ahora admite el paso de descriptores de archivos y ganchos LSM.
  • Se propone un ejemplo más funcional de un controlador Rust: bcm2835-rng para el generador de números aleatorios de hardware de placas Raspberry Pi.

Además, se mencionan proyectos de algunas empresas relacionados con el uso de Rust en el kernel:

  • Microsoft ha expresado interés en participar en el trabajo para integrar el soporte de Rust en el kernel de Linux y está listo para proporcionar implementaciones de controladores para Hyper-V en Rust en los próximos meses.
  • ARM está trabajando para mejorar la compatibilidad con Rust para sistemas basados ​​en ARM. El proyecto Rust ya propuso cambios que convertirían los sistemas ARM de 64 bits en una plataforma de Nivel 1.
  • Google brinda soporte directo para el proyecto Rust para Linux, está desarrollando una nueva implementación del mecanismo de comunicación entre procesos Binder en Rust y está considerando la posibilidad de reelaborar varios controladores en Rust. A través de ISRG (Grupo de Investigación de Seguridad de Internet), Google proporcionó financiación para el trabajo de integración del soporte de Rust en el kernel de Linux.
  • IBM ha implementado soporte de kernel para Rust para sistemas PowerPC.
  • El laboratorio LSE (Systems Research Laboratory) ha desarrollado un controlador SPI en Rust.

Fuente: opennet.ru

Añadir un comentario