Durante los últimos meses los desarrolladores de Linux han estado discutiendo la posibilidad de permitir el uso del lenguaje Rust para escribir nuevos controladores de dispositivos para el kernel.
El año pasado, los desarrolladores del kernel de Linux parecen haber llegado a un acuerdo sobre el tema, pues los partidarios de Rust han citado trabajos que muestran que aproximadamente dos tercios de las vulnerabilidades del kernel a las que se les han asignado CVE en Android y Ubuntu están relacionadas con problemas de seguridad de la memoria.
Después de esta declaración, Linus Torvalds, ingeniero de software, creador principal y desarrollador del kernel de Linux, dijo en una entrevista que las discusiones sobre el tema serían mucho más importantes que una larga publicación de Google sobre el lenguaje.
Cuando se le preguntó sobre la sugerencia de utilizar Rust indicó que, «la solución aquí es simple: simplemente use C++ en lugar de Rust».
Después de ello en marzo, fue lanzado el primer soporte que permitió poder colocar en el árbol Linux-Next los controladores Rust para más pruebas antes de su eventual inclusión en el kernel principal.
Justo detrás había una «solicitud de comentarios» reeditada en la lista de correo del kernel sobre la perspectiva del código Rust para el kernel de Linux.
Miguel Ojeda, desarrollador del kernel de Linux, inició una propuesta de Solicitud de comentarios (RFC) en la lista de correo del kernel de Linux.
La publicación de la lista de correo describió las creencias de los desarrolladores involucrados en la adición de código Rust al kernel, los beneficios como la seguridad mejorada de la memoria y más.
“Algunos de ustedes han notado en las últimas semanas y meses que se está forjando un intento serio de traer un segundo idioma al kernel. Finalmente estamos allí, con un RFC que agrega soporte para Rust al kernel de Linux ”, dijo Miguel Ojeja. “Sabemos que existen enormes costos y riesgos involucrados en la introducción de un nuevo lenguaje en el kernel”, agregó.
El equipo del proyecto Rust para Linux ha pasado del compilador beta de Rust al uso de versiones estables, migrando cada vez que se lanza una nueva versión.
“Nos gustaría agradecer a Rust por trabajar con nosotros en estas opciones para que el kernel pueda usarlas”, dijo Miguel.
Al actualizar el compilador, el equipo pudo eliminar de la lista algunas características inestables: const_fn_transmute , const_panic , const_unreachable_unchecked , core_panic y try_reserve .
Además de ello se destaca que se han agregado algunas opciones de modularización más a alloc para deshabilitar algunas funciones innecesarias: no_rc y no_sync .
Upstream, para que el caso de uso del kernel esté bien soportado, o más precisamente, la «combinación» de opciones que necesita el kernel, Upstream core también ha agregado no_fp_fmt_parse .
Por otra parte Rust habilitó una serie de diagnósticos adicionales para el compilador Rust y Clippy. Una diferencia con C es que los diagnósticos de Rust son un poco más fáciles de deshabilitar en el código, que es más estricto en el caso general.
También se han implementado abstracciones y actualizaciones de controladores. El equipo agregó abstracciones para bloqueos de secuencia, devoluciones de llamada de administración de energía, memoria io ( readX/writeX ), chips irq y administradores de flujo de alto nivel, chips gpio (incluidos chips irq ), periféricos, periféricos amba y controladores.
El soporte del controlador se mejora con una infraestructura independiente del bus, objetos revocables, mutex revocables, iteradores de bits eficientes, mejores diagnósticos de pánico y envoltorios de punteros simplificados. Además, mejoró y simplificó los objetos Ref (compatibles con refcount_t ) y reemplazó todas las instancias de Rust.
Y se implementó un nuevo controlador para dispositivos gpio PL061 y se envía como parche RFC.
Finalmente cabe destacar que el soporte de Rust todavía se considera experimental. Sin embargo, el soporte es lo suficientemente bueno como para que los desarrolladores del kernel estén comenzando a trabajar en abstracciones de Rust para subsistemas y controladores de escritura y otros módulos. La serie actual acaba de llegar a Linux-next, por lo que la primera ejecución tendrá lugar esta semana.
Fuente: https://lkml.org/lkml