Miguel Ojeda, autor do projeto Rust-for-Linux, apresentou para consideração dos desenvolvedores do kernel Linux uma quinta versão dos componentes para desenvolvimento de drivers de dispositivos na linguagem Rust. O suporte ao Rust é considerado experimental, mas já foi incluído na branch linux-next e está suficientemente desenvolvido para iniciar o trabalho na criação de camadas de abstração sobre subsistemas do kernel, bem como para a escrita de drivers e módulos. O desenvolvimento é financiado pela Google e pela organização ISRG (Internet Security Research Group), que é a fundadora do projeto Let’s Encrypt e contribui para a promoção do HTTPS e para o desenvolvimento de tecnologias que aumentam a segurança da internet.
Vale lembrar que as mudanças propostas permitem o uso do Rust como uma segunda linguagem para o desenvolvimento de drivers e módulos do kernel. O suporte para Rust é apresentado como uma opção, que não está ativa por padrão e não resulta na inclusão do Rust entre as dependências obrigatórias de compilação do kernel. O uso do Rust para o desenvolvimento de drivers permitirá a criação de drivers seguros e de melhor qualidade com um mínimo de esforço, livres de problemas como acesso à memória após sua liberação, desreferenciação de ponteiros nulos e estouros de buffer.
A segurança no manuseio da memória é garantida no Rust durante a compilação através da verificação de referências, rastreamento da propriedade dos objetos e consideração do tempo de vida dos objetos (escopo), bem como pela avaliação da correção do acesso à memória durante a execução do código. O Rust também oferece ferramentas para proteção contra estouros inteiros, exige a inicialização obrigatória dos valores das variáveis antes do uso, lida melhor com erros na biblioteca padrão, aplica o conceito de imutabilidade (immutable) para referências e variáveis por padrão e oferece forte tipagem estática para minimizar erros lógicos.
Na nova versão dos patches, a eliminação das observações feitas durante as discussões da primeira, segunda, terceira e quarta edições dos patches foi continuada. Na nova versão:
- No sistema de integração contínua baseado no bot 0DAY/LKP, suportado pela Intel, foi adicionada uma verificação dos componentes para suporte ao Rust e começou a publicação de relatórios sobre testes. A integração do suporte ao Rust no sistema de testes automatizados KernelCI está em preparação. O teste baseado no GitHub CI foi transferido para a utilização de contêineres.
- Os módulos do kernel em Rust não precisam mais definir os atributos crate "#![no_std]" e "#![feature(…)]".
- Suporte a objetivos de compilação únicos (.o, .s, .ll e .i) foi adicionado.
- As orientações de formatação de código definiram regras sobre a separação de comentários ("//") e documentação de código ("///").
- O script is_rust_module.sh foi refeito.
- Adicionado suporte a primitivas de sincronização estáticas (variáveis globais comuns) baseadas na implementação de "CONFIG_CONSTRUCTORS".
- Simplificada a gestão de bloqueios: Guard e GuardMut foram combinados em um único tipo parametrizado.
- Possibilidade de definir parâmetros adicionais ao registrar dispositivos foi fornecida.
- Adicionada a abstração "RwSemaphore", que atua como uma camada sobre a estrutura em C rw_semaphore.
- Um novo módulo mm e a abstração VMA (camada sobre a estrutura vm_area_struct) foram adicionados para utilização de mmap.
- O driver GPIO PL061 foi adaptado para utilizar o macro "dev_*!".
- Uma limpeza geral do código foi realizada.
Fonte: opennet.ru
