Quinta 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 quinta versão 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á está incluído no ramo linux-next e está suficientemente desenvolvido para começar a trabalhar na criação de camadas de abstração sobre subsistemas do kernel, bem como na gravação de drivers e módulos. O desenvolvimento é financiado pelo Google e pelo ISRG (Internet Security Research Group), que é o fundador do projeto Let's Encrypt e promove o HTTPS e o desenvolvimento de tecnologias para melhorar a segurança da Internet.

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.

A nova versão dos patches continua eliminando os comentários feitos durante a discussão da primeira, segunda, terceira e quarta edições dos patches. Na nova versão:

  • O teste de componentes para suporte a Rust foi adicionado ao sistema de integração contínua baseado no bot 0DAY/LKP com suporte da Intel e a publicação de relatórios de teste começou. Estamos nos preparando para integrar o suporte Rust ao sistema de testes automatizados KernelCI. Os testes baseados no GitHub CI foram transferidos para o uso de contêineres.
  • Os módulos do kernel Rust ficam livres da necessidade de definir os atributos de caixa “#![no_std]” e “#![feature(…)]”.
  • Adicionado suporte para destinos de assembly único (.o, .s, .ll e .i).
  • As diretrizes de código definem regras para separar comentários (“//”) e documentar código (“///”).
  • O script is_rust_module.sh foi reformulado.
  • Adicionado suporte para primitivas de sincronização estáticas (variáveis ​​globais compartilhadas) baseadas na implementação "CONFIG_CONSTRUCTORS".
  • O gerenciamento de bloqueios é simplificado: Guard e GuardMut são combinados e um tipo parametrizado.
  • É possível definir parâmetros adicionais ao cadastrar dispositivos.
  • Adicionada a abstração "RwSemaphore", que atua como um wrapper sobre a estrutura C rw_semaphore.
  • Para usar o mmap, um novo módulo mm e uma abstração VMA foram adicionados (um wrapper sobre a estrutura vm_area_struct).
  • O driver GPIO PL061 foi alterado para usar a macro “dev_*!”.
  • Foi realizada uma limpeza geral do código.

Fonte: opennet.ru

Adicionar um comentário