Usando Rust em sistemas de arquivos
Objetivos
- Usar o sistema de tipos do Rust para detectar mais erros em tempo de compilação
- Aumentar a produtividade em relação ao código em C automatizando tarefas como limpeza de recursos
- Reduzir vulnerabilidades relacionadas à memória e encurtar o tempo de depuração
Vantagens do Rust
- O Rust elimina comportamento indefinido e oferece recursos para ver o que está acontecendo dentro do código
- É possível provar a correção do código escrito em Rust, reduzindo bugs que atrapalham o desenvolvimento de funcionalidades
Exemplo do sistema de tipos do Rust
- A função
iget_locked() tem requisitos complexos
- Em Rust, ela pode ser substituída pela função
get_or_create_inode(), com o sistema de tipos impondo esses requisitos
Discussão sobre mudança de nomes de API
- Problema de inconsistência entre os nomes da API em C e da API em Rust
- Isso pode não ser familiar para a comunidade de desenvolvimento existente
- Pode ser necessário alinhar os nomes
Problemas gerais
- É preciso decidir se as abstrações em Rust serão usadas de forma geral em todos os sistemas de arquivos do kernel ou se o foco ficará apenas em sistemas de arquivos simples escritos em Rust
- À medida que o código em C evolui, podem surgir problemas de sincronização com o código em Rust
Problemas do ciclo de vida dos objetos
- O ciclo de vida dos objetos pode variar conforme o sistema de arquivos
- Codificar um único ciclo de vida na API Rust pode fazer com que ela não funcione em alguns sistemas de arquivos
Problemas dos bindings em Rust
- Nem todos os sistemas de arquivos vão migrar imediatamente para Rust
- À medida que o código em C evolui, os bindings em Rust podem quebrar
- Se os bindings em Rust quebrarem, isso continuará sendo um problema dos desenvolvedores do Rust-for-Linux
Conclusão
- Continuar desenvolvendo os bindings em Rust enquanto o código em C continua evoluindo
- Com o tempo, ficará mais claro se codificar muito significado no sistema de tipos do Rust é algo bom ou ruim
Resumo do GN⁺
- Introduzir Rust em sistemas de arquivos deve ajudar bastante a aumentar a segurança de memória e a produtividade
- O sistema de tipos do Rust pode impor requisitos complexos de API, aumentando a correção do código
- Se os desenvolvedores de C existentes não aprenderem Rust, podem surgir dificuldades como problemas de sincronização
- Se os bindings em Rust quebrarem, caberá aos desenvolvedores do Rust-for-Linux corrigi-los
- Um projeto com funcionalidade semelhante é o Fuchsia OS, do Google
1 comentários
Comentários do Hacker News
Gerenciar todos com a mesma função, enquanto cada sistema de arquivos administra o ciclo de vida de
inodede forma diferente, vai contra a própria camada de abstraçãoinodedeve ser gerenciado por sistema de arquivosHá questionamentos sobre se o Rust precisa mudar para facilitar mais chamadas em C
Não está claro se a API Rust envolve a API C ou a reimplementa
Adicionar Rust ao kernel traz complexidade extra
A discussão está sendo muito civilizada
Ter mais opções no kernel Linux é sempre benéfico
unsafeAlguns comentários no fim da página da lwn.net são rudes
Há discussão sobre o problema de incompatibilidade de nomes entre a API C e a API Rust