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