Sylvestre Ledru, conhecido por seu trabalho na compilação do Debian GNU/Linux utilizando o compilador Clang, anunciou a realização bem-sucedida de um experimento utilizando um conjunto alternativo de utilitários coreutils, reescrito na linguagem Rust. O coreutils inclui utilitários como sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. Para a primeira fase da integração da versão do coreutils em Rust no Debian, foram estabelecidos os seguintes objetivos:
- Criar um pacote com a versão alternativa do coreutils em Rust para Debian e Ubuntu.
- Baixar o Debian com a interface GNOME, utilizando rust-coreutils.
- Instalar os 1000 pacotes mais populares do repositório.
- Compilar a partir do código-fonte do Firefox, LLVM/Clang e do núcleo Linux em um ambiente com rust-coreutils.
Após a criação de mais de 100 patches para Rust/coreutils, todos os objetivos estabelecidos foram alcançados com sucesso. O trabalho contínuo inclui a implementação de utilitários e opções que estavam faltando, melhoria da qualidade e uniformidade do código, desenvolvimento do conjunto de testes e correção de falhas, com 141 testes de 613 sendo realizados com sucesso a partir do conjunto de testes do GNU Coreutils.
Ao criar o pacote rust-coreutils, foi decidido não substituir o pacote coreutils, mas garantir a possibilidade de operação paralela. As variantes de utilitários em Rust são instaladas em /usr/lib/cargo/bin/ e ativadas adicionando este diretório à variável de ambiente PATH. A criação do pacote rust-coreutils foi complicada pela necessidade de carregar no repositório todas as dependências de construção, incluindo o Rust e vários pequenos pacotes crate.
A criação da imagem de inicialização não apresentou problemas significativos, mas a adaptação dos pacotes para o ambiente com rust-coreutils exigiu um grande trabalho, pois muitos scripts post-install chamam utilitários do conjunto coreutils. O maior número de problemas foi causado pela falta de opções necessárias, por exemplo, no utilitário 'cp' faltavam as opções '--archive' e '--no-dereference', no 'ln' não havia suporte para a opção '--relative', no mktemp '-t', em sync '-fs', em install '--owner' e '--group'. Outros problemas surgiram devido a diferenças no comportamento, por exemplo, o utilitário install não suportava a especificação de /dev/null como arquivo de entrada, e em mkdir a opção '--parents' estava disponível em vez de '--parent', e assim por diante.
Durante os testes de construção de grandes bases de código, não surgiram grandes problemas. Na construção do Firefox e LLVM/Clang são utilizados scripts em Python e cmake, portanto, a substituição do coreutils por eles não afetou. A construção do núcleo do Linux foi relativamente tranquila, surgindo apenas dois problemas: uma mensagem de erro ao usar chown com um link simbólico e a ausência da opção "-n" na ferramenta ln.
Fonte: opennet.ru
