Na conferência Linux Plumbers 2022, que está ocorrendo atualmente, um engenheiro da empresa Western Digital apresentou uma palestra sobre o desenvolvimento de um driver experimental para SSDs com interface NVM-Express (NVMe), escrito em Rust e funcionando no nível do núcleo Linux. Embora o projeto ainda esteja em estágio inicial de desenvolvimento, os testes realizados mostraram que o desempenho do driver NVMe em Rust é equivalente ao do driver NVMe existente no núcleo, escrito em C.


Na palestra, foi mencionado que o driver NVMe atual escrito em C atende completamente às necessidades dos desenvolvedores, mas a subsistema NVMe é uma boa plataforma para explorar a viabilidade do desenvolvimento de drivers em Rust, pois é suficientemente simples, amplamente utilizada, exige alto desempenho, tem uma implementação de referência comprovada para comparação e suporta várias interfaces (dev, pci, dma, blk-mq, gendisk, sysfs).
É observado que o driver PCI NVMe em Rust já oferece a funcionalidade necessária para operação, mas ainda não está pronto para uso geral, pois requer melhorias específicas. Entre os planos futuros, destaca-se a remoção de blocos unsafe do código, suporte para operações de remoção de dispositivo e descarregamento do driver, suporte para a interface sysfs, implementação de inicialização adiada, criação de um driver para blk-mq e experimentos com a utilização de modelo de programação assíncrona para queue_rq.

Adicionalmente, podem ser destacados os experimentos conduzidos pela NCC Group no desenvolvimento de drivers em Rust para o núcleo FreeBSD. Como exemplo, é detalhado um simples echo-driver que retorna os dados gravados no arquivo /dev/rustmodule. Na próxima fase dos experimentos, a NCC Group está considerando a possibilidade de reescrever em Rust componentes básicos do núcleo para aumentar a segurança das operações de rede e de arquivos.
No entanto, embora tenha sido demonstrada a possibilidade de criação de módulos simples na linguagem Rust, uma integração mais profunda do Rust no núcleo do FreeBSD exigirá trabalho adicional. Por exemplo, menciona-se a necessidade de criar um conjunto de camadas de abstração sobre subsistemas e estruturas do núcleo, semelhantes às extensões preparadas pelo projeto Rust for Linux. No futuro, planeja-se realizar experimentos semelhantes com o núcleo do Illumos e identificar abstrações comuns em Rust que poderiam ser usadas em drivers escritos em Rust para Linux, BSD e Illumos.
De acordo com as empresas Microsoft e Google, cerca de 70% das vulnerabilidades em seus produtos de software são causadas por manipulações de memória inseguras. Acredita-se que o uso da linguagem Rust permitirá reduzir o risco de surgimento de vulnerabilidades causadas por manipulações inseguras de memória e eliminar erros, como acessar áreas de memória após sua liberação e estouro 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.
Fonte: opennet.ru
