Eles são abordagens diferentes para o mesmo problema geral, com escopos um pouco diferentes: executar binários criados para diferentes arquiteturas.
Quando você recebe um binário para executar, precisa de três coisas: as bibliotecas necessárias (se houver, incluindo seu carregador dinâmico), suporte para as chamadas do sistema feitas e a capacidade de interpretar as instruções da máquina que ele contém . Multilib e multiarch abordam o primeiro.
O Multilib funciona com uma tabela de variantes conhecidas, por arquitetura. Isso abordou originalmente as variantes ABI, por exemplo, no MIPS, mas seu uso mais comum hoje em dia é o suporte a 32 bits no x86: ele normalmente define lib32 como o diretório da biblioteca de 32 bits (e essa definição é x86 -específico). Portanto, uma configuração de multilib pode fornecer o carregador de 64 bits em /lib e o de 32 bits em /lib32 . No lado do compilador, você especifica -m32 para construir um binário de 32 bits usando multilib.
O multiarch é mais geral: suas definições não dependem da arquitetura do host. Todas as bibliotecas são encontradas em um subdiretório lib correspondente à arquitetura de destino. /usr/lib/x86_64-linux-gnu/ , /usr/lib/i386-linux-gnu , etc. No lado do compilador, você usa o compilador apropriado.
Qual abordagem você usa para executar um binário de 32 bits depende da distribuição. Debian e seus derivados agora usam multiarch, outras distribuições usam multilib.