Segunda edição de patches para o kernel Linux com suporte para a linguagem Rust

Miguel Ojeda, autor do projeto Rust-for-Linux, propôs uma versão atualizada de componentes para desenvolvimento de drivers de dispositivos na linguagem Rust para consideração dos desenvolvedores do kernel Linux. O suporte ao Rust é considerado experimental, mas já foi acordado para inclusão no branch linux-next. A nova versão elimina os comentários feitos durante a discussão da primeira versão dos patches. Linus Torvalds já entrou na discussão e propôs mudar a lógica de processamento de algumas operações de bits.

Lembre-se que as mudanças propostas possibilitam o uso do Rust como segunda linguagem para o desenvolvimento de drivers e módulos do kernel. O suporte ao Rust é apresentado como uma opção que não é habilitada por padrão e não resulta na inclusão do Rust como uma dependência de construção necessária para o kernel. Usar Rust para desenvolvimento de driver permitirá que você crie 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.

A manipulação de memória segura é fornecida em Rust em tempo de compilação por meio de verificação de referência, acompanhando a propriedade do objeto e o tempo de vida do objeto (escopo), bem como por meio da avaliação da exatidão do acesso à memória durante a execução do código. Rust também fornece proteção contra estouros de número inteiro, requer inicialização obrigatória de valores de variáveis ​​antes do uso, lida melhor com erros na biblioteca padrão, aplica o conceito de referências e variáveis ​​imutáveis ​​por padrão, oferece tipagem estática forte para minimizar erros lógicos.

As mudanças mais visíveis na nova versão dos patches:

  • O código de alocação de memória é liberado da possibilidade de gerar um estado de "pânico" quando ocorrem erros como falta de memória. Está incluída uma variante da biblioteca Rust alloc, que retrabalha o código para lidar com falhas, mas o objetivo final é transferir todos os recursos necessários para o kernel para a edição principal do alloc (as mudanças já foram preparadas e transferidas para o padrão Biblioteca de ferrugem).
  • Em vez de compilações noturnas, agora você pode usar versões beta e versões estáveis ​​do compilador Rustc para compilar um kernel com suporte para Rust. Atualmente, Rustc 1.54-beta1 é usado como compilador de referência, mas após o lançamento da versão 1.54 no final do mês, ele será suportado como compilador de referência.
  • Adicionado suporte para escrever testes usando o atributo padrão “#[test]” para Rust e a capacidade de usar doctests para documentar testes.
  • Adicionado suporte para arquiteturas ARM32 e RISCV, além de x86_64 e ARM64 anteriormente suportados.
  • Implementações aprimoradas de GCC Rust (frontend GCC para Rust) e Rustc_codegen_gcc (backend Rustc para GCC), que agora passa em todos os testes básicos.
  • Um novo nível de abstração é proposto para uso em programas Rust de mecanismos de kernel escritos em C, como árvores vermelho-pretas, objetos contados por referência, criação de descritores de arquivos, tarefas, arquivos e vetores de E/S.
  • Os componentes de desenvolvimento de driver melhoraram o suporte para o módulo file_operations, a macro module!, registro de macro e drivers rudimentares (sondar e remover).
  • O Binder agora oferece suporte à passagem de descritores de arquivo e ganchos LSM.
  • É proposto um exemplo mais funcional de driver Rust - bcm2835-rng para o gerador de números aleatórios de hardware de placas Raspberry Pi.

Adicionalmente, são mencionados projetos de algumas empresas relacionados ao uso de Rust no kernel:

  • A Microsoft manifestou interesse em participar do trabalho de integração do suporte Rust ao kernel Linux e está pronta para fornecer implementações de driver para Hyper-V em Rust nos próximos meses.
  • ARM está trabalhando para melhorar o suporte Rust para sistemas baseados em ARM. O projeto Rust já propôs mudanças que tornariam os sistemas ARM de 64 bits uma plataforma Tier 1.
  • O Google fornece suporte direto para o projeto Rust for Linux, está desenvolvendo uma nova implementação do mecanismo de comunicação entre processos Binder em Rust e está considerando a possibilidade de retrabalhar vários drivers em Rust. Por meio do ISRG (Internet Security Research Group), o Google forneceu financiamento para o trabalho de integração do suporte Rust ao kernel Linux.
  • A IBM implementou suporte de kernel para sistemas Rust para PowerPC.
  • O laboratório LSE (Systems Research Laboratory) desenvolveu um driver SPI em Rust.

Fonte: opennet.ru

Adicionar um comentário