Terceira edição dos patches para o núcleo do Linux com suporte ao idioma Rust

Miguel Ojeda, autor do projeto Rust-for-Linux, propôs aos desenvolvedores do núcleo do Linux uma terceira versão dos componentes para o desenvolvimento de drivers de dispositivos na linguagem Rust. O suporte ao Rust é considerado experimental, mas já foi aprovado para inclusão na ramificação linux-next. O desenvolvimento é financiado pela Google e pela organização ISRG (Internet Security Research Group), fundadora do projeto Let’s Encrypt e que promove o HTTPS e o desenvolvimento de tecnologias para aumentar a segurança da internet.

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.

Na nova versão dos patches, continuou-se a eliminar as observações feitas durante a discussão das primeiras e segundas versões dos patches. As alterações mais notáveis são:

  • Foi feito o deslocamento para o uso da versão estável do compilador Rust 1.57 como referência e a vinculação à edição estabilizada da linguagem Rust 2021. Anteriormente, os patches estavam vinculados ao branch beta do Rust e usavam algumas funcionalidades da linguagem que pertencem à categoria de instáveis. A transição para a especificação Rust 2021 permitiu iniciar o trabalho para abandonar o uso nos patches de funcionalidades instáveis, como const_fn_transmute, const_panic, const_unreachable_unchecked e core_panic e try_reserve.
  • Continuou o desenvolvimento da variante da biblioteca alocadora Rust incluída nos patches, modificada para eliminar funções de alocação de memória de possíveis gerações de estado 'panic' em caso de erros, como falta de memória. Na nova versão, foram implementadas opções 'no_rc' e 'no_sync' para desativar funcionalidades não utilizadas no código Rust para o núcleo, tornando a biblioteca mais modular. O trabalho com os principais desenvolvedores da alloc prossegue, visando transferir as alterações necessárias para o núcleo para o conjunto principal da biblioteca. A opção 'no_fp_fmt_parse', necessária para o funcionamento da biblioteca no nível do núcleo, foi transferida para a biblioteca base do Rust (core).
  • Foi feita uma limpeza de código para eliminar possíveis avisos do compilador ao compilar o núcleo no modo CONFIG_WERROR. Ao compilar o código em Rust, foram incluídos modos de diagnóstico adicionais do compilador e avisos do linter Clippy.
  • Abstrações foram propostas para uso em código Rust bloqueios seqlock (locks de sequência), chamadas de callback para gerenciamento de energia, memória I/O (readX/writeX), manipuladores de interrupção e threads, GPIO, acesso a dispositivos, drivers e credenciais.
  • Expandidos os recursos para o desenvolvimento de drivers utilizando mutexes deslocáveis, iteradores de bits, simplificações sobre ponteiros, melhor diagnóstico de falhas e infraestrutura independente do barramento de dados.
  • Melhorado o trabalho com referências através de um tipo simplificado Ref, baseado no backend refcount_t, que utiliza a API correspondente do kernel para contagem de referências. O suporte aos tipos Arc e Rc, fornecidos na biblioteca padrão alloc, foi removido e não está disponível em código executado no nível do kernel (opções foram preparadas para desativar esses tipos na própria biblioteca).
  • Um driver PL061 GPIO reescrito em Rust foi adicionado aos patches. A particularidade do driver é que sua implementação praticamente replica linha por linha o driver GPIO existente em C. Para desenvolvedores que desejam aprender sobre a criação de drivers em Rust, uma comparação linha a linha foi preparada, permitindo entender em quais construções em Rust o código em C foi transformado.
  • O rustc_codegen_gcc, backend do rustc para GCC, que implementa a capacidade de compilação antecipada (AOT) utilizando a biblioteca libgccjit, foi aceito na base de código principal do Rust. Com o adequado desenvolvimento do backend, ele permitirá compilar o código Rust utilizado no kernel através do GCC.
  • Além das empresas ARM, Google e Microsoft, a Red Hat também expressou interesse no uso da linguagem Rust no núcleo do Linux. Vale lembrar que o Google fornece suporte direto ao projeto Rust for Linux, desenvolve uma nova implementação do mecanismo de comunicação entre processos Binder em Rust, e está considerando a reescrita de vários drivers em Rust. A Microsoft começou a implementar drivers para Hyper-V em Rust. A ARM está trabalhando na melhoria do suporte a Rust em sistemas baseados em processadores ARM. A IBM implementou suporte a Rust no núcleo para sistemas PowerPC.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster