Un marco para escribir controladores seguros para el núcleo de Linux en el lenguaje Rust.

Josh Triplett, quien trabaja en Intel y es parte del comité que supervisa el desarrollo de Crates.io, hizo una presentación en la conferencia Open Source Technology Summit presentó un grupo de trabajo enfocado en llevar el lenguaje Rust a la par con C en el ámbito de la programación de sistemas.

En el grupo de trabajo, que se está formando, los desarrolladores de Rust junto con ingenieros de Intel prepararán especificaciones que definan la funcionalidad que debe implementarse en Rust para programación de sistemas. La programación de sistemas a menudo requiere manipulaciones de bajo nivel, como la ejecución de instrucciones privilegiadas del procesador y la obtención de detalles sobre el estado del procesador. Entre las capacidades que ya se están desarrollando para Rust se destaca el soporte para estructuras no nombradas, uniones (union), inserciones de ensamblador (macro "asm!") y el formato numérico de punto flotante BFLOAT16.

Josh cree que el futuro de la programación de sistemas es Rust, y que el lenguaje C en la actualidad está destinado a ocupar el lugar que anteriormente tenía el ensamblador. Rust
no solo evita que los desarrolladores enfrenten problemas inherentes al lenguaje C que surgen del trabajo de bajo nivel con la memoria, sino que también ofrece la posibilidad de aplicar paradigmas de programación modernos en su desarrollo.

Durante las discusiones presentación
la charla de Josh se sugirió añadir a Linux la capacidad de desarrollar controladores en Rust, lo que permitiría crear controladores seguros y de mayor calidad con un esfuerzo mínimo, libres de problemas como el acceso a memoria después de su liberación, la desreferenciación de punteros nulos y los desbordamientos de búfer.

Greg Kroah-Hartman, responsable del mantenimiento de la rama estable del núcleo de Linux, expresó su disposición a agregar un marco para el desarrollo de controladores en Rust al núcleo, si este ofrece ventajas reales sobre C, como proporcionar envolturas seguras sobre la API del núcleo. Además, Greg considera este marco solo como una opción, no activa por defecto, para no incluir a Rust entre las dependencias de la compilación del núcleo.

Se ha descubierto que varios equipos ya están trabajando en esta dirección. Por ejemplo, los desarrolladores de la empresa "Fish in a Barrel" han preparado han creado herramientas para escribir módulos cargables para el núcleo de Linux en Rust, utilizando un conjunto de capas abstractas sobre las interfaces y estructuras del núcleo para aumentar la protección. Las capas se generan automáticamente a partir de los archivos de encabezado existentes del núcleo mediante la utilidad bindgen. Para la construcción de las capas se utiliza Clang. Los módulos construidos, además de las capas, utilizan el paquete staticlib.

Al mismo tiempo se desarrolla 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 capas basadas en los archivos de encabezado del núcleo. El marco permite aumentar la seguridad de los controladores sin realizar cambios en el núcleo: en lugar de crear niveles adicionales de aislamiento en el núcleo para los controladores, se propone bloquear problemas en la etapa de compilación, aplicando un lenguaje más seguro como Rust. Se espera que este enfoque sea bien recibido por los fabricantes de hardware que desarrollan controladores propietarios de forma rápida sin realizar la auditoría adecuada.

No toda la funcionalidad planeada está implementada todavía, pero el marco ya es bastante adecuado para su uso y se ha utilizado para escribir un controlador operativo para el controlador Ethernet LAN9512 USB, suministrado en la placa Raspberry Pi 3. Como implementación de referencia al escribir el controlador Rust, se utilizó el controlador existente smsc95xx, escrito en C. Se señala que el tamaño del módulo y los gastos generales de los componentes en tiempo de ejecución al desarrollar un controlador en Rust son insignificantes, lo que permite aplicar el marco para dispositivos con recursos limitados.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster