Adaptando o Debian para usar a implementação Rust do coreutils

Sylvestre Ledru, conhecido por seu trabalho construindo Debian GNU/Linux usando o compilador Clang, relatou um experimento bem-sucedido usando um conjunto alternativo de utilitários, coreutils, reescritos na linguagem Rust. Coreutils inclui utilitários como sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. Para a primeira etapa de integração ao Debian da versão Rust do coreutils, foram definidos os seguintes objetivos:

  • Empacote uma alternativa Rust para coreutils para Debian e Ubuntu.
  • Inicializando o Debian com desktop GNOME usando ferrugem-coreutils.
  • Instalando os 1000 pacotes mais populares do repositório.
  • Construa a partir de fontes do kernel Firefox, LLVM/Clang e Linux em um ambiente com ferrugem-coreutils.

Depois de criar mais de 100 patches para Rust/coreutils, conseguimos atingir com sucesso todos os objetivos pretendidos. O trabalho em andamento inclui a implementação de utilitários e opções ausentes, melhorando a qualidade e uniformidade do código, desenvolvendo o conjunto de testes e eliminando travamentos que ocorrem ao executar o conjunto de testes do GNU Coreutils (141 testes de 613 estão sendo executados com sucesso até agora ).

Ao criar o pacote ferrugem-coreutils, foi decidido não substituir o pacote coreutils, mas fornecer a capacidade de trabalharem em paralelo. As opções de utilitário na linguagem Rust são instaladas em /usr/lib/cargo/bin/ e são ativadas adicionando este diretório à variável de ambiente PATH. A criação do pacote ferrugem-coreutils foi complicada pela necessidade de baixar todas as dependências de construção no repositório, incluindo Rust e vários pacotes pequenos de crate.

Criar uma imagem de boot não foi um problema, mas adaptar os pacotes para um ambiente com ferrugem-coreutils exigiu muito trabalho, já que muitos scripts pós-instalação chamam utilitários do conjunto coreutils. O maior número de problemas foi causado pela falta de opções necessárias, por exemplo, o utilitário “cp” não possuía as opções “--archive” e “--no-dereference”, “ln” não suportava o “- Opção relativa”, mktemp não suportava “-t”, na sincronização "-fs", na instalação - "--owner" e "-group". Outros problemas surgiram devido a diferenças de comportamento, por exemplo, o utilitário de instalação não suportava a especificação de /dev/null como arquivo de entrada, mkdir tinha a opção “--parents” em vez de “-parent”, etc.

Ao testar a montagem de grandes bases de código, não surgiram grandes problemas. Ao construir o Firefox e o LLVM/Clang, scripts python e cmake são usados, portanto, a substituição do coreutils não os afetou. A construção do kernel Linux ocorreu de forma relativamente tranquila, com apenas dois problemas surgindo: saída de erro ao usar chown com um link simbólico e a falta de uma opção “-n” no utilitário ln.

Fonte: opennet.ru

Adicionar um comentário