Proposta para discutir a questão da adição de ferramentas de desenvolvimento Rust ao kernel Linux

Nick Desagnier (Nick Desaulniers), que trabalha no Google para fornecer apoiar construindo o kernel Linux usando o compilador Clang e também ajudando corrigir bugs no compilador Rust, sugerido realizar em uma conferência Conferência de Encanadores Linux 2020 sessão para discutir a possibilidade de desenvolver componentes do kernel em Rust. Nick está organizando uma microconferência dedicada ao LLVM e acredita que seria bom discutir os aspectos técnicos da possível integração do suporte Rust ao kernel (ele já preparou um protótipo funcional para KBuild) e entender se tal suporte deveria ser adicionado e quais restrições ao uso do Rust devem ser aceitas.

Lembremos que em uma discussão recente na conferência Open Source Summit e Embedded Linux, Linus Torvalds não descartou o surgimento de ligações para o desenvolvimento de subsistemas de kernel não essenciais (por exemplo, drivers) em linguagens como Rust. A capacidade de desenvolver drivers em Rust nos permitiria criar drivers melhores e mais seguros com o mínimo de esforço, livres de problemas como acesso à memória após a liberação, desreferências de ponteiro nulo e saturação de buffer. Já existem vários projetos de terceiros para implementar este recurso:

  • Desenvolvedores da empresa “Fish in a Barrel” подготовили um kit de ferramentas para escrever módulos carregáveis ​​para o kernel Linux na linguagem Rust, usando um conjunto de camadas abstratas sobre as interfaces e estruturas do kernel para aumentar a segurança. As camadas são geradas automaticamente com base nos arquivos de cabeçalho do kernel existentes usando o utilitário vincular. Clang é usado para construir camadas. Além dos interlayers, os módulos montados usam o pacote staticlib.
  • Pesquisadores da Universidade Chinesa de Hong Kong desenvolver um projeto de desenvolvimento de drivers para sistemas embarcados e dispositivos de Internet das Coisas em Rust, que também usa bindgen para gerar camadas baseadas em arquivos de cabeçalho do kernel. A estrutura permite melhorar a segurança do driver sem fazer alterações no kernel - em vez de criar níveis de isolamento adicionais para drivers no kernel, propõe-se bloquear problemas no estágio de compilação, usando a linguagem Rust, mais segura. Supõe-se que tal abordagem pode ser exigida por fabricantes de equipamentos que desenvolvem drivers proprietários às pressas, sem realizar uma auditoria adequada.
  • Desenvolvedores de estrutura C2ferrugem para transmitir código C para Rust, conduta experimentos na conversão de módulos do kernel com edições manuais mínimas. Um dos problemas observados é o uso em muitas partes do kernel de código que utiliza extensões GCC que ainda não são suportadas no C2Rust. Para resolver este problema, C2Rust planeja adicionar suporte para atributos GCC inline, cold, alias, used e section, bem como expandir os recursos do montador inline e resolver problemas com estruturas alinhadas e compactadas (por exemplo, xregs_state) . Problemas significativos que exigem trabalho manual incluem a incapacidade de traduzir macros C não triviais em macros Rust e a necessidade de redefinir tipos, uma vez que C2Rust traduz tipos C em definições no pacote libc, mas este pacote não pode ser usado em módulos do kernel.

Fonte: opennet.ru

Adicionar um comentário