Miguel Ojeda, autor do projeto Rust-for-Linux, proposto para consideração pelos desenvolvedores do kernel Linux пятый вариант компонентов для разработки драйверов устройств на языке Rust. Поддержка Rust рассматривается как экспериментальная, но уже включена в ветку linux-next и достаточно развита для начала работы по созданию слоёв абстракции над подсистемами ядра, а также для написания драйверов и модулей. Разработка финансируется компанией Google и организацией ISRG (Internet Security Research Group), которая является учредителем проекта Let’s Encrypt и способствует продвижению HTTPS и развитию технологий для повышения защищённости интернета.
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
