Próximo: , Acima: Inicializando   [Conteúdo][Índice]


20.1 O Bootstrap de código fonte completo

Guix—como outras distribuições GNU/Linux—é tradicionalmente bootstrapado a partir de um conjunto de binários bootstrap: Bourne shell, ferramentas de linha de comando fornecidas pelo GNU Coreutils, Awk, Findutils, “sed’ e ‘grep’ e Guile, GCC, Binutils e a GNU C Library (veja Inicializando). Normalmente, esses binários bootstrap são “considerados garantidos.”

Tomar os binários bootstrap como garantidos significa que os consideramos uma “semente” correta e confiável para construir o sistema completo. Aí está um problema: o tamanho combinado desses binários bootstrap é de cerca de 250 MB (veja Bootstrappable Builds em GNU Mes). Auditar ou mesmo inspecionar isso é quase impossível.

Para i686-linux e x86_64-linux, o Guix agora apresenta um full-source bootstrap. Este bootstrap está enraizado em hex0-seed do pacote Stage0. O programa hex0 é um assembler minimalista: ele lê dígitos hexadecimais separados por espaços (nibbles) de um arquivo, possivelmente incluindo comentários, e emite na saída padrão os bytes correspondentes a esses números hexadecimais. O código-fonte deste programa hex0 inicial é um arquivo chamado hex0_x86.hex0 e é escrito na linguagem hex0.

O Hex0 é auto-hospedado, o que significa que ele pode se construir:

./hex0-seed hex0_x86.hex0 hex0

Hex0 é o equivalente ASCII do programa binário e pode ser produzido fazendo algo muito parecido com:

sed 's/[;#].*$//g' hex0_x86.hex0 | xxd -r -p > hex0
chmod +x hex0

É por causa dessa equivalência ASCII-binário que podemos abençoar esse binário inicial de 357 bytes como fonte e, portanto, ‘bootstrap de fonte completa”.

O bootstrap então continua: hex0 constrói hex1 e então para M0, hex2, M1, mescc-tools e finalmente M2-Planet. Então, usando mescc-tools, M2-Planet nós construímos Mes (veja GNU Mes Reference Manual em GNU Mes, um interpretador Scheme e compilador C em Scheme). A partir daqui começa o bootstrap mais tradicional baseado em C do Sistema GNU.

Outro passo que o Guix tomou foi substituir o shell e todos os seus utilitários por implementações no Guile Scheme, o Scheme-only bootstrap. O Gash (veja Gash em The Gash manual) é um shell compatível com POSIX que substitui o Bash, e vem com o Gash Utils, que tem substituições minimalistas para o Awk, o GNU Core Utilities, Grep, Gzip, Sed e Tar.

Atualmente, construir o Sistema GNU a partir do código-fonte só é possível adicionando alguns pacotes históricos do GNU como etapas intermediárias41. Conforme o Gash e o Gash Utils amadurecem, e os pacotes GNU se tornam mais inicializáveis novamente (por exemplo, novos lançamentos do GNU Sed também serão enviados como tarballs compactados novamente, como alternativa à compressão xz difícil de inicializar), esse conjunto de pacotes adicionados pode ser reduzido novamente.

O grafo abaixo mostra o grafo de dependência resultante para gcc-core-mesboot0, o compilador bootstrap usado para o bootstrap tradicional do restante do Sistema Guix.

Dependency graph of
gcc-core-mesboot0

O trabalho está em andamento para levar esses bootstraps às arquiteturas arm-linux e aarch64-linux e ao Hurd.

Se você estiver interessado, junte-se a nós em ‘#bootstrappable’ na rede IRC Libera.Chat ou discuta em bug-mes@gnu.org ou gash-devel@nongnu.org.


Notas de Rodapé

(41)

Pacotes como gcc-2.95.3, binutils-2.14, glibc-2.2.5, gzip-1.2.4, tar-1.22 e alguns outros. Para detalhes, veja gnu/packages/commencement.scm.


Próximo: Preparando para usar os binários do Bootstrap, Acima: Inicializando   [Conteúdo][Índice]