Proposta para discutir o tema de engadir ferramentas de desenvolvemento Rust ao núcleo de Linux

Nick Desagnier (Nick Desaulniers), que traballa en Google para proporcionar apoio construír o núcleo de Linux usando o compilador Clang e tamén axudando corrixir erros no compilador Rust, suxeriu realizar nunha conferencia Conferencia de fontaneiros de Linux 2020 sesión para discutir como é posible desenvolver compoñentes do núcleo en Rust. Nick está a organizar unha microconferencia dedicada a LLVM, e cre que sería bo discutir os aspectos técnicos da posible integración do soporte Rust no núcleo (xa preparou un prototipo de traballo para KBuild) e entender se tal soporte debería engadirse en absoluto e que restricións no uso de Rust deberían aceptarse.

Lembremos que nunha discusión recente na conferencia Open Source Summit e Embedded Linux, Linus Torvalds non descartou a aparición de ligazóns para o desenvolvemento de subsistemas do núcleo non básicos (por exemplo, controladores) en linguas como Rust. A capacidade de desenvolver controladores en Rust permitiríanos crear controladores máis seguros e mellores cun mínimo esforzo, libres de problemas como o acceso á memoria despois da liberación, desreferencias de punteiro nulo e desbordamentos do búfer. Xa hai varios proxectos de terceiros para implementar esta función:

  • Desenvolvedores da empresa "Fish in a Barrel" preparado un conxunto de ferramentas para escribir módulos cargables para o núcleo Linux na linguaxe Rust, utilizando un conxunto de capas abstractas sobre as interfaces e estruturas do núcleo para aumentar a seguridade. As capas xéranse automaticamente en función dos ficheiros de cabeceira do núcleo existentes mediante a utilidade vincular. Clang úsase para construír capas. Ademais das capas intermedias, os módulos ensamblados usan o paquete staticlib.
  • Investigadores da Universidade Chinesa de Hong Kong desenvolver un proxecto para desenvolver controladores para sistemas integrados e dispositivos de Internet das cousas en Rust, que tamén usa bindgen para xerar capas baseadas nos ficheiros de cabeceira do núcleo. O marco permítelle mellorar a seguridade dos controladores sen facer cambios no núcleo; en lugar de crear niveis de illamento adicionais para os controladores no núcleo, proponse bloquear os problemas na fase de compilación, utilizando a linguaxe Rust máis segura. Suponse que tal enfoque pode ser demandado polos fabricantes de equipos que desenvolven controladores propietarios con présa sen realizar unha auditoría adecuada.
  • Desenvolvedores de frameworks C2 Ferruxe para transmitir código C a Rust, conduta experimentos sobre a conversión de módulos do núcleo con edicións manuais mínimas. Un dos problemas sinalados é o uso en moitas partes do núcleo de código que usa extensións GCC que aínda non están soportadas en C2Rust. Para resolver este problema, C2Rust planea engadir compatibilidade con atributos GCC en liña, frío, alias, usado e sección, así como ampliar as capacidades do ensamblador en liña e resolver problemas con estruturas que están aliñadas e empaquetadas (por exemplo, xregs_state) . Os problemas significativos que requiren traballo manual inclúen a incapacidade de traducir macros C non triviais a macros Rust e a necesidade de redefinir tipos, xa que C2Rust traduce os tipos C en definicións no paquete libc, pero este paquete non se pode usar nos módulos do núcleo.

Fonte: opennet.ru

Engadir un comentario