Miguel Ojeda, autor do projeto Rust-for-Linux, propôs aos desenvolvedores do kernel Linux uma versão atualizada dos componentes para o desenvolvimento de drivers de dispositivo na linguagem Rust. O suporte a Rust é considerado experimental, mas já foi acordado para inclusão no branch linux-next. Na nova versão, foram removidas as críticas feitas durante a discussão da primeira versão dos patches. Linus Torvalds já participou da discussão e sugeriu alterar a lógica de processamento de algumas operações bit a bit.
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.
As alterações mais notáveis na nova versão dos patches:
- O código para distribuição de memória foi isento de possíveis gerações de estado de "panic" ao encontrar erros, como falta de memória. Incluiu uma versão da biblioteca Rust alloc, na qual o código para tratamento de falhas foi reescrito, mas o objetivo final é transferir para a edição principal da alloc todas as funcionalidades necessárias para o kernel (as alterações já foram preparadas e enviadas para a biblioteca padrão do Rust).
- Em vez de compilações noturnas para compilar o kernel com suporte a Rust, agora é possível usar versões beta e lançamentos estáveis do compilador rustc. Atualmente, o compilador de referência é o rustc 1.54-beta1, mas após o lançamento da versão 1.54 no final do mês, ele será mantido como o compilador de referência.
- Foi adicionada a suporte para escrita de testes utilizando o atributo padrão do Rust "#[test]" e a possibilidade de aplicar doctests para documentar testes.
- Foi adicionada a suporte a arquiteturas ARM32 e RISCV, além dos anteriormente suportados x86_64 e ARM64.
- As implementações do GCC Rust (front-end do GCC para Rust) e rustc_codegen_gcc (back-end do rustc para GCC) foram melhoradas, e agora passam em todos os testes básicos.
- Foi proposto um novo nível de abstração para o uso em programas na linguagem Rust de mecanismos do kernel escritos em C, como árvores vermelho-preto, objetos com contagem de referências, criação de descritores de arquivo, tarefas, arquivos e vetores de entrada/saída.
- Nos componentes para desenvolvimento de drivers, o suporte ao módulo "file_operations", ao macro "module!", ao registro de macros e a drivers rudimentares (probe e remove) foi melhorado.
- No Binder, foi implementado o suporte para a transmissão de descritores de arquivos e hooks LSM.
- Foi proposto um exemplo mais funcional de driver em Rust — bcm2835-rng para o gerador de números aleatórios hardware das placas Raspberry Pi.
Adicionalmente, são mencionados projetos de algumas empresas relacionados ao uso do Rust no núcleo:
- A empresa Microsoft expressou interesse em participar do trabalho de integração do suporte ao Rust no núcleo Linux e está pronta para fornecer, nos próximos meses, implementações de drivers para Hyper-V em Rust.
- A empresa ARM está trabalhando na melhoria do suporte ao Rust para sistemas baseados em processadores ARM. O projeto Rust já recebeu alterações que transferem sistemas ARM de 64 bits para a categoria de plataformas de primeiro nível de suporte (Tier-1).
- A empresa Google apoia diretamente o projeto Rust for Linux, desenvolve uma nova implementação do mecanismo de comunicação entre processos Binder em Rust e considera a possibilidade de reescrever diversos drivers em Rust. Através do ISRG (Internet Security Research Group), a Google financiou o trabalho para integrar o suporte ao Rust no núcleo Linux.
- A empresa IBM implementou o suporte ao Rust no núcleo para sistemas PowerPC.
- O laboratório LSE (Systems Research Laboratory) desenvolveu um driver SPI em Rust.
Fonte: opennet.ru
