Parece que desenvolvimento de patches para suporte ao driver Rust no Linux pegou um bom ritmo Pois bem, foi há pouco mais de um mês que a proposta removida foi lançada, pois desde a terceira versão uma nova proposta é entregue todos os meses e agora a nova proposta foi lançada, sendo esta a sexta edição.
Miguel Ojeda propôs o novo lançamento dos componentes de desenvolvimento de driver de dispositivo Rust para os desenvolvedores do kernel Linux considerarem. Esta é a sexta edição ainda considerado experimental mas já está incluído na ramificação linux-next e está maduro o suficiente para começar a trabalhar na criação de camadas de abstração em cima dos subsistemas do kernel, bem como na escrita de drivers e módulos.
Para aqueles que ainda desconhecem este desenvolvimento, devem saber que é 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 aumentar a segurança da Internet.
Lembre-se que as mudanças propostas tornam possível usar Rust como segunda língua para desenvolver drivers e módulos de kernel. O suporte a Rust é apresentado como uma opção que não está habilitada por padrão e não resulta na inclusão de Rust entre as dependências de compilação necessárias para o kernel.
Usar Rust para desenvolver drivers permitirá que você crie drivers melhores e mais seguros com o mínimo de esforço, sem problemas como acessar uma área de memória após liberá-la, desreferenciar ponteiros nulos e estouros de buffer.
A segurança da memória é fornecida no Rust eEm tempo de compilação, verificando referências, rastreando a propriedade do objeto e o tempo de vida do objeto (escopo), bem como avaliando a correção do acesso à memória durante a execução do código. Rust também fornece proteção contra estouro de inteiros, requer que as variáveis sejam inicializadas antes do uso, lida melhor com erros na biblioteca padrão, reforça o conceito de variáveis e referências imutáveis por padrão e oferece tipagem estática forte para minimizar erros lógicos.
Na nova versão dos patches, os comentários feitos durante a discussão do primeiro continuaram sendo deletados, segundo, terceiro, quarto y quinta edições dos patches (dos quais deixo os links correspondentes).
Principais novidades na sexta proposta
Com a chegada desta nova proposta O kit de ferramentas foi atualizado antes do lançamento do Rust 1.59.0, junto com o qual uma variante da biblioteca alloc ele também sincroniza com a nova versão do Rust, eliminando a possibilidade de um estado de "pânico" quando ocorrem erros, como falta de memória.
Outra mudança que foi feita é que agora, em vez de fornecer arquivos de especificação de plataforma destino pré-criado eles são gerados dinamicamente com base na configuração do kernel.
Também é observado que o parâmetro do kernel HAVE_RUST foi adicionado para habilitá-lo para arquiteturas compatíveis com Rust e que abstrações foram propostas para uso no código Rust para um gerador de números pseudo-aleatórios de hardware.
Por outro lado, é mencionado que a capacidade de usar inserções do montador foi estabilizada ("feature(global_asm)") e suporte adicionado para criar programas host em Rust que são usados no processo de compilação do kernel.
Das outras mudanças que se destacam desta nova proposta:
- O uso de códigos de erro sem o prefixo "Error::" (por exemplo, "return Err(EINVAL)") foi permitido para aproximar o tratamento de códigos de erro em C.
- Adicionado tipo "CString" para strings C nativas. Tipos combinados de formatador e buffer.
- Adicionados os traços Bool e LockInfo.
- Implementação simplificada de spin-locks.
Finalmente se você estiver interessado em saber mais sobre isso sobre esta nova proposta, você pode consultar os detalhes no link a seguir.