Nick DeSaigne (), que trabalha no Google na compilação do núcleo Linux usando o compilador Clang e também a corrigir bugs no compilador Rust, apresentará na conferência uma sessão para discutir a viabilidade do desenvolvimento de componentes do núcleo na linguagem Rust. Nick está organizando uma micro-conferência dedicada ao LLVM e acredita que seria interessante discutir os aspectos técnicos da possível integração do suporte ao Rust no núcleo (já foi preparado um protótipo funcional para KBuild) e entender se realmente é necessário adicionar tal suporte e quais limitações devem ser consideradas ao usar Rust.
Vale lembrar que, em uma discussão recente na conferência "Open Source Summit and Embedded Linux", Linus Torvalds a possibilidade de criar bindings para o desenvolvimento de subsistemas não principais do núcleo (como drivers) em linguagens como Rust. A possibilidade de desenvolver drivers na linguagem Rust poderia permitir a criação de drivers seguros e de maior qualidade com esforço mínimo, evitando problemas como acessos a áreas de memória após a liberação, desreferenciação de ponteiros nulos e estouros de buffer. Já existem vários projetos de terceiros implementando essa possibilidade:
- Desenvolvedores da empresa "Fish in a Barrel" ferramentas para escrever módulos carregáveis para o núcleo Linux na linguagem Rust, utilizando um conjunto de camadas abstratas sobre as interfaces e estruturas do núcleo para aumentar a segurança. As camadas são geradas automaticamente com base nos arquivos de cabeçalho existentes do núcleo utilizando a ferramenta . Para compilar as camadas, é utilizado o Clang. Os módulos compilados além das camadas utilizam o pacote staticlib.
- Pesquisadores da Universidade Chinesa de Hong Kong projeto para desenvolvimento de drivers em Rust para sistemas embarcados e dispositivos da internet das coisas, que também utiliza bindgen para gerar camadas com base em arquivos de cabeçalho do núcleo. O framework permite aumentar a segurança dos drivers sem fazer alterações no núcleo — em vez de criar níveis adicionais de isolamento para os drivers no núcleo, propõe-se bloquear problemas na fase de compilação, utilizando a linguagem mais segura Rust. Supõe-se que tal abordagem pode ser desejável por fabricantes de hardware que desenvolvem drivers proprietários rapidamente, sem realizar a devida auditoria.
- Desenvolvedores do framework para transição de código C para Rust, experimentações na conversão de módulos do núcleo com mínimas edições manuais. Entre os problemas mencionados está a utilização de código em muitas partes do núcleo que usa extensões do GCC, que ainda não são suportadas pelo C2Rust. Para resolver esse problema, planeja-se adicionar ao C2Rust suporte para atributos do GCC como inline, cold, alias, used e section, além de expandir as capacidades do assembly inline e resolver problemas com estruturas que estão alinhadas e empacotadas ao mesmo tempo (por exemplo, xregs_state). Entre os problemas significativos que requerem trabalho manual, destaca-se a incapacidade de transitar macros C não triviais para macros Rust e a necessidade de redefinição de tipos, já que o C2Rust transita os tipos C para definições no pacote libc, que não podem ser utilizados em módulos do núcleo.
Fonte: opennet.ru
