Em março deste ano na filial linux-next em que na época estava trabalhando para o kernel Linux 5.13, Um conjunto inicial de componentes foi incluído para desenvolver drivers de dispositivo em a linguagem Rust e agora o pedido foi feito para incluir uma segunda edição de patches para adicionar suporte Rust ao kernel do Linux.
Quem enviou o pedido aos programadores Linux é Miguel Ojeda, autor do projecto Rust-for-Linux e de quem também falámos há alguns dias, uma vez que foi contratado para dirigir o projecto "Prossimo", que basicamente se concentra na coordenação de esforços para mover a infraestrutura crítica de software para um código seguro para proteger a memória do kernel do Linux com Rust (se você quiser saber mais sobre o projeto, pode consultar postando no link abaixo.)
O pedido enviado por Miguel Ojeda é uma segunda versão atualizada dos componentes para o desenvolvimento de drivers de dispositivos em linguagem Rust e nos quais os comentários feitos durante a discussão da primeira versão dos patches são excluídos e aos quais Linus Torvalds já entrou na discussão e sugeriu alterar a lógica para processar algumas operações de bits.
Por dentro dos benefícios que são mencionados são aqueles gerenciamento seguro de memória é garantido no Rust em tempo de compilação, verificando referências, rastreando a propriedade do objeto e o tempo de vida do objeto, bem como avaliando a exatidão do acesso à memória em tempo de execução.
A ferrugem também fornece proteção contra estouro de inteiro, requer inicialização obrigatória de valores de variáveis antes do uso, trata melhor os erros na biblioteca padrão, adota o conceito de referências e variáveis imutáveis por padrão e oferece escrita estática forte para minimizar erros lógicos.
Das mudanças que se destacam desta nova versão dos patches é mencionado:
- O código de alocação de memória evita a possibilidade de gerar pânico quando ocorrerem erros como falta de memória.
- Inclui-se uma variante da biblioteca de alocação Rust, na qual o código foi retrabalhado para lidar com bloqueios, mas o objetivo final é trazer todos os recursos necessários para o kernel para a edição principal do alloc (as alterações já foram preparadas e transportadas para a biblioteca Rust padrão).
- Em vez de compilações noturnas, as versões beta e estáveis agora podem ser usadas compilador rustc para compilar um kernel habilitado para Rust. Atualmente o rustc 1.54-beta1 é usado como um compilador de referência, mas após o lançamento 1.54 no final do mês, ele terá suporte como um compilador de referência.
- Adicionado suporte para escrever testes usando o atributo Rust padrão "# [test]" e a capacidade de usar doctests para usar códigos de amostra da documentação como testes.
- O suporte para arquiteturas ARM32 e RISCV foi adicionado, além do x86_64 e ARM64 anteriormente suportado.
Implementações aprimoradas do GCC Rust (o frontend do GCC para Rust) e rustc_codegen_gcc (o backend do rustc para o GCC), que agora passa em todos os benchmarks. - UMA novo nível de abstração para programas Rust usarem mecanismos de kernel escritos em C, como árvores, objetos de contagem de referência, criação de descritores de arquivo, tarefas, arquivos e vetores de E / S.
- Os componentes de desenvolvimento de driver melhoraram o suporte para o módulo "file_operations", a macro "module!", Criação de log de macro e drivers rudimentares (teste e exclusão).
- O Binder tem suporte para passar descritores de arquivo e links LSM.
- Um exemplo mais funcional de um driver Rust, bcm2835-rng, é proposto para um gerador de números aleatórios de hardware para placas Raspberry Pi.
Por fim, se você tiver interesse em saber mais sobre o assunto, pode consultar os detalhes no link a seguir.