Nick Desaulniers (), quien trabaja en Google asegurando la construcción del núcleo de Linux utilizando el compilador Clang y también a corregir errores en el compilador Rust, dirigió en la conferencia una sesión para discutir la posibilidad de desarrollar componentes del núcleo en el lenguaje Rust. Nick organiza micro-conferencias sobre LLVM y cree que sería útil discutir los aspectos técnicos de la posible integración del soporte para Rust en el núcleo (ya tiene un prototipo funcional preparado para KBuild) y entender si realmente se necesita añadir ese soporte, así como qué limitaciones sobre el uso de Rust deben ser consideradas.
Recordemos que en una reciente discusión en la conferencia «Open Source Summit and Embedded Linux», Linus Torvalds la aparición de enlaces para el desarrollo de subsistemas no esenciales del núcleo (por ejemplo, controladores) en lenguajes como Rust. La posibilidad de desarrollar controladores en Rust permitiría crear controladores seguros y de mayor calidad con un esfuerzo mínimo, eliminando problemas como el acceso a áreas de memoria después de su liberación, la desreferenciación de punteros nulos y el desbordamiento de búfer. Ya existen varios proyectos de terceros que implementan esta posibilidad:
- Desarrolladores de la empresa «Fish in a Barrel» 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 . Para la construcción de las capas se utiliza Clang. Los módulos construidos, además de las capas, utilizan el paquete staticlib.
- Investigadores de la Universidad de Hong Kong un proyecto para el desarrollo de controladores en Rust 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 mejorar 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 de interés para los fabricantes de hardware, que desarrollan controladores propietarios rápidamente sin llevar a cabo una auditoría adecuada.
- Desarrolladores del marco para la traducción de código C a Rust, experimentos para transformar módulos del núcleo con mínimas modificaciones manuales. Se señala como problema la utilización en muchas partes del núcleo de código que emplea extensiones de GCC, que aún no son soportadas por C2Rust. Para abordar este problema, se planea agregar soporte para los atributos de GCC inline, cold, alias, used y section en C2Rust, así como expandir las capacidades de ensamblador en línea y resolver problemas con estructuras que están alineadas y empaquetadas al mismo tiempo (por ejemplo, xregs_state). Entre los problemas significativos que requieren trabajo manual, se destaca la imposibilidad de traducir macros C no triviales a macros Rust y la necesidad de redefinir tipos, ya que C2Rust traduce los tipos C en definiciones en el paquete libc, pero este paquete no se puede usar en módulos del núcleo.
Fuente: opennet.ru
