Linux Adictos David Naranjo  

Un marco en Rust podría ser implementado en el Kernel para mejorar los controladores

Rust Linux Kernel

Josh Triplett, una compañía con sede en Intel y miembro del comité de supervisión del desarrollo Crates.io, presentó ya hace algunos días un grupo de trabajo en su discurso en la Open Source Technology Summit que tiene como objetivo llevar a Rust a la par con C en la programación del Kernel de Linux.

En el grupo de trabajo, que está en proceso de creación, los desarrolladores de Rust, junto con los ingenieros de Intel, prepararán especificaciones que puedan destacar la funcionalidad que Rust necesita implementar para la programación dentro del núcleo de Linux. La programación del sistema a menudo requiere manipulaciones de bajo nivel, como la ejecución de instrucciones privilegiadas del procesador y la obtención de información detallada sobre el estado del procesador.

De las capacidades similares que ya se están desarrollando para Rust, se admite el soporte para estructuras sin nombre, uniones (union), insertos de ensamblador (la macro “asm!”) Y el formato de número de punto flotante BFLOAT16.

Josh cree que el futuro de la programación del sistema es para Rust, y el lenguaje C en las realidades modernas afirma ser el lugar que ocupaba Assembler en el pasado. Rust no solo alivia a los desarrolladores de los problemas específicos del lenguaje C que surgen debido al trabajo de bajo nivel con la memoria, sino que también brinda la posibilidad de aplicación en el desarrollo de paradigmas de programación modernos.

Durante la discusión del discurso de Josh, se expresó la idea de:

agregar la posibilidad de desarrollar controladores en el lenguaje Rust al kernel de Linux, lo que permitiría con un mínimo esfuerzo crear controladores mejores y más seguros que alivien problemas tales como acceder al área de memoria después de liberarla, hacer referencia a punteros nulos y salir más allá de los límites del búfer.

Greg Kroah-Hartman, responsable de mantener una rama estable del kernel de Linux, expresó su disposición a agregar un marco de controlador Rust al kernel si tiene ventajas reales sobre C, por ejemplo, proporcionará enlaces seguros sobre API del núcleo Además, Greg considera este marco solo como una opción que no está activa de manera predeterminada, para no incluir Rust en el número de dependencias de ensamblaje del núcleo.

Resultó que varios equipos ya están trabajando en esta dirección. Por ejemplo, los desarrolladores de Fish in a Barrel prepararon un juego de herramientas para escribir módulos cargables para el kernel de Linux en el lenguaje Rust, utilizando un conjunto de capas abstractas sobre las interfaces y estructuras del kernel para aumentar la seguridad.

Las capas intermedias se generan automáticamente en función de los archivos de encabezado del núcleo disponibles utilizando la utilidad bindgen . Clang se usa para construir capas intermedias. Los módulos ensamblados, además de las capas, usan el paquete staticlib.

Paralelamente, se está desarrollando otro proyecto, centrado en el desarrollo de controladores para sistemas embebidos y dispositivos de Internet de las cosas, que también utiliza bindgen para generar intercalares basados ​​en archivos de encabezado del núcleo.

El marco le permite mejorar la seguridad del controlador sin realizar cambios en el núcleo; en lugar de crear niveles de aislamiento adicionales para los controladores en el núcleo, se propone bloquear los problemas en la etapa de compilación utilizando un lenguaje Rust más seguro.

Se supone que los fabricantes de equipos pueden desarrollar este enfoque de forma apresurada sin una auditoría adecuada.

Todavía no se ha implementado toda la funcionalidad planificada, pero el marco ya es bastante adecuado para el trabajo y se utiliza para escribir un controlador que funcione para el controlador LAN9512 USB Ethernet suministrado en la placa Raspberry Pi 3.

El controlador smsc95xx existente se escribió como una implementación de referencia al escribir el controlador Rust en lenguaje C.

Se observa que el tamaño del módulo y la sobrecarga de los componentes de tiempo de ejecución no son significativos cuando se desarrolla un controlador para Rust, que le permite usar el marco para dispositivos con recursos limitados.

Fuente: https://hub.packtpub.com

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.