Suporte multiarch do Debian

Sobre

Multiarch é o termo usado para se referir à capacidade de um sistema instalar e executar aplicativos de diversos alvos binários diferentes em um mesmo sistema. Por exemplo, executar um aplicativo i386-linux-gnu em um sistema amd64-linux-gnu. Esse exemplo é o caso mais comum, mas muitas outras combinações de funcionamento são possíveis, tais como armel e armhf.

O Multiarch também simplifica a compilação cruzada (cross-building), onde bibliotecas de arquiteturas externas e cabeçalhos (headers) são necessárias em um sistema durante a compilação.

As propostas existentes permitem a co-instalação de bibliotecas e cabeçalhos para diferentes arquiteturas, mas não (ainda) de binários. Então, você pode ter tanto a versão i386 de um binário, quanto a versão amd64, mas não ambas (usando caminhos (paths) /bin convencionais). Todas as dependências estarão instaladas e disponíveis para o binário correspondente.

O multiarch é uma evolução poderosa e significativa, e afeta muitos processos e aspectos do sistema. Os efeitos práticos imediatos são livrar-se dos pacotes ia32-libs e permitir dependências de arquiteturas cruzadas para compilação cruzada.

Ele esteve funcionando primeiro no Ubuntu Natty e Debian Wheezy assim como usado para os bootstraps dos portes arm64 e mips64el.

Documentação

Estes documentos definem a implementação e devem conter tudo o que você precisa saber.

O caso para multiarch
Porque estamos nos pondo em todo esse sofrimento? A lib64 não é boa o suficiente para todos?

Especificação do gerenciamento de pacotes multiarch
Especificação principal, detalhando como os arquivos são estabelecidos, como as dependências são definidas, e como ele funciona em combinação com apt e dpkg.

Multiarch/Tuples. O esquema de tuplas usado para caminhos (paths) multiarch (ao invés de triplas GNU).

HOWTO multiarch para usuários
Informação destinada aos usuários de como usar multiarch: configuração, instalação, compilação cruzada.

Howto de conversão para multiarch
Um documento destinado ao mantenedor, detalhando como você pode converter o seu pacote de biblioteca ao longo de caminhos (paths) multiarch.

Bootstrapping O processo/ordenação/cronograma para obtenção do Debian "unstable" com multiarch.

Problemas para ferramentas O processo de conversão pode provocar problemas para ferramentas que usem apt e dpkg, e os mesmos podem estar documentados aqui.

Especificação da compilação cruzada Multiarch
Como o multiarch é usado para compilação cruzada, incluindo as extensões para suportar dependências de compilação cruzada (cross- build-dependencies).

Linkador e comportamento multilib
Detalhes explicativos sobre o linkador, gcc, libc e multilib. Não fala estritamente de parte da especificação multiarch, mas explica porque ela funciona, e esclarece a discussão sobre desenvolvimentos futuros.

Há muitos outros documentos agora substituídos. O links existentes abaixo são para quem se importa com o histórico do desenvolvimento.

Recursos

Canal de IRC: #multiarch em irc.debian.org (OFTC).

Não há uma lista de discussão específica. A discussão é feita na(s) lista/canais dos pacotes afetados e ferramentas, tais como dpkg, apt, gcc e listas de desenvolvimentos em geral (ex. debian-devel).

Estado atual

Entrando no Ubuntu Natty e Debian Wheezy.

O suporte do apt está no Debian Squeeze e Ubuntu Maverick.

Patches para gcc, eglibc, e uma série de bibliotecas básicas estão disponíveis no Ubuntu natty.ch

O suporte do dpkg está disponível a partir da versão 1.16.2.

Ferramenta Tuple: https://code.launchpad.net/~vorlon/+junk/multiarch-tools

Desenvolvimento futuro

A adição de suporte para binários co-instaláveis é uma provável extensão futura, mas não faz parte do escopo do trabalho de multiarch atual (apenas para isso leva 7 anos, não 15).

O multiarch torna várias coisas possíveis ou até mesmo fáceis: dependências de arquitetura cruzadas, cruzamento de compiladores no repositório, arquiteturas parciais. Uma reunião realizada na debconf11 discutiu essas questões. Multiarch/Debconf11MultiarchRelatedMinutes

Histórico

A gênese do Multiarch tem sido (muito!) longa, e a proposta tem mudado significativamente ao longo do caminho (path). Aqui estão algumas das datas quando as coisas aconteceram, com links para os documentos escritos no momento. Todos eles foram substituídos pelos documentos referidos acima.

Recursos antigos