Próximo: Preparando para usar os binários do Bootstrap, Acima: Inicializando [Conteúdo][Índice]
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.
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.
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]