Marco para escribir controladores seguros para o núcleo Linux en Rust

Josh Triplett, que traballa en Intel e forma parte do comité que supervisa o desenvolvemento de Crates.io, falando no Open Source Technology Summit introducido un grupo de traballo destinado a achegar a linguaxe Rust á paridade coa linguaxe C no campo da programación de sistemas.

Nun grupo de traballo que está en proceso de creación, os desenvolvedores de Rust, xunto con enxeñeiros de Intel, elaborarán especificacións que definen a funcionalidade que hai que implementar en Rust para a programación de sistemas. A programación do sistema require moitas veces unha manipulación de baixo nivel, como executar instrucións do procesador privilexiado e obter información detallada sobre o estado do procesador. Das características similares que xa se están a desenvolver para Rust, nótase o soporte para estruturas sen nome, unións, insercións de linguaxe ensambladora (a macro "asm!") e o formato de número de coma flotante BFLOAT16.

Josh cre que o futuro da programación de sistemas pertence a Rust, e a linguaxe C nas realidades modernas está a reclamar o lugar que nos últimos anos ocupaba Assembly. Ferruxe
non só alivia aos desenvolvedores dos problemas inherentes á linguaxe C que xorden debido ao traballo de baixo nivel coa memoria, senón que tamén ofrece a oportunidade de utilizala no desenvolvemento de paradigmas de programación modernos.

Durante discusións actuacións
A Josh tivo a idea de engadir a posibilidade de desenvolver controladores no núcleo Linux na linguaxe Rust, o que permitiría crear controladores máis seguros e mellores cun mínimo esforzo, libres de problemas como o acceso á memoria despois da liberación, nulo. desreferencias de punteiro e desbordamentos do búfer.

Greg Kroah-Hartman, responsable de manter a rama estable do núcleo de Linux, expresou a súa disposición a engadir un marco para o desenvolvemento de controladores na linguaxe Rust ao núcleo se ten vantaxes reais sobre C, por exemplo, proporcionará seguridade. enlaces sobre a API do núcleo. Ademais, Greg considera este marco só como unha opción, non activa por defecto, para non incluír Rust como unha dependencia de compilación do núcleo.

Resultou que varios equipos xa están a traballar neste sentido. Por exemplo, os 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.

Paralelo desenvólvese Outro proxecto centrouse no desenvolvemento de controladores para sistemas integrados e dispositivos IoT, 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.

Aínda non se implementou toda a funcionalidade prevista, pero o marco xa é bastante axeitado para traballar e utilizouse para escribir un controlador de traballo para o controlador Ethernet USB LAN9512 que se proporciona na placa Raspberry Pi 3. O controlador smsc95xx existente, escrito por en Linguaxe C. Nótase que o tamaño do módulo e a sobrecarga dos compoñentes de execución ao desenvolver un controlador en Rust son insignificantes, o que permite que o marco se use para dispositivos con recursos limitados.

Fonte: opennet.ru

Engadir un comentario