No se descarta la posibilidad de integrar el soporte de Rust en el kernel de Linux 5.20
En la conferencia Open-Source Summit 2022 en curso estos días, en la sección de preguntas frecuentes, Linus Torvalds mencionó la posibilidad de una integración temprana en el kernel de Linux de componentes para desarrollar controladores de dispositivos en Rust.
Por lo cual se mencionó que es posible que los parches habilitados para Rust se acepten en el próximo registro de cambios que forme la composición del kernel 5.20, programado para fines de septiembre.
Hay que recordar que desde el año pasado Rust se ha convertido en uno de los favoritos para ser incluido dentro de diversos proyectos importantes y que durante el tiempo que ha transcurrido ya se han realizado trabajos relacionados con la implementación del soporte de Rust.
Dentro de los proyectos de renombre que se interesaron en rust desde el año pasado, podemos destacar por ejemplo a Android, ya que se interesó en Rust porque le permite lograr un rendimiento cercano a los lenguajes C y C ++, lo que permite que se utilice para desarrollar partes de bajo nivel de la plataforma y componentes para interactuar con el hardware.
Para garantizar la seguridad del código C y C ++, Android usa aislamiento de espacio aislado, análisis estático y pruebas de fuzzing. Las capacidades del aislamiento de sandbox son limitadas y han alcanzado el límite de sus capacidades (una mayor fragmentación en los procesos no es práctica desde el punto de vista del consumo de recursos).
Entre las limitaciones de usar sandbox, mencionan la alta sobrecarga y el mayor consumo de memoria causado por la necesidad de generar nuevos procesos, así como la latencia adicional asociada con el uso de IPC.
Por otra parte, tampoco debemos olvidar que Linus Torvalds tambien dio su opinion sobre Rust y en la cual pasó revisando la implementación de parches de posibilidades para establecer controladores de lenguaje Rust en el kernel de Linux y expresó algunas críticas.
Las mayores quejas fueron causadas por el potencial de escape «run-time failure panicen» en situaciones erróneas, por ejemplo, en una situación de memoria insuficiente, cuando las operaciones de asignación de memoria dinámica, incluidas las del kernel, pueden fallar.
Torvalds declaró que tal enfoque en el kernel es fundamentalmente inaceptable, y si no comprende este punto, puede rechazar completamente cualquier código que intente usar tal enfoque. Por otro lado, el desarrollador del parche estuvo de acuerdo con el problema y lo consideró solucionable.
Pero ya han pasado varios meses desde que Linus dio su opinión y se ha trabajo duro para mejorar la implementación. Como tal, actualmente aún no se ha enviado una solicitud de extracción para el núcleo a Torvalds, pero el conjunto de parches se revisó más a fondo, se le quitaron las notas clave, se probó en la rama linux-next durante bastante tiempo y se llevó a un estado adecuado para creando capas de abstracción sobre los subsistemas del núcleo, escribiendo controladores y módulos.
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.
Los cambios propuestos hacen posible el uso de Rust como segundo lenguaje para desarrollar controladores y módulos del 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.