Porque não é possível instalar aplicativos no formato deb em distribuições baseadas no arch linux?
Não é como se eu fosse um iniciante, mas comecei a questionar a mim mesmo o motivo de alguns formatos de empacotamento de aplicativos serem “universais” e outros não.
Se é possível instalar programas no formato flatpak, snap, appimage, além de compilá-los manualmente em ambas as distribuições, por que os formatos de aplicativos nativos de distribuições baseadas em arch e debian não podem ser instalados em ambos?
Mais precisamente, não seria suficiente simplesmente instalar o suporte a deb no arch e vice versa? Ou esse tipo de coisa não seria possível e quebraria o sistema?
Aproveitando o gancho, pesquisando vi que apesar de não ser recomendável, é possível instalar suporte a apt no arch linux. Então, o que realmente torna “impossível (pois nada é impossível no linux)” instalar aplicativos deb no arch?
Basicamente por causa de algo chamado ABI, todo sistema operacional fornece uma compatibilidade entre seus binários, como o Debian congela as versões dos pacotes não raramente os programas no Arch vão ter uma ABI que quebra compatibilidade com versões antigas eu explico melhor aqui
Recomendo ler o artigo linkado antes, mas vamos supor que você use um programa que depende da versão 2.3.4 de uma biblioteca (libisis por exemplo) no Arch, você instala outro programa que depende da versão 1.2.3 da libisis pelo APT no Arch, um dos dois vai quebrar
O apt gerencia repositórios, o que vai acontecer depende do que tem nesses repositórios
Como o Natanael falou, pacotes de diferentes distribuições poderão estar em diferentes versões. A solução para alguns pacotes é criar slots para várias versões, como muitas distribuições fazem com python ou o compilador C. Isso é um tremendo trabalho, e somente alguns pacotes chave que são slotados.
A solução “definitiva” seria deixar que qualquer pacote em qualquer versão fosse instalado, sem um bloquear o outro. Essa ideia foi levada ao limite no Nix OS, onde qualquer pacote de qualquer versão pode coexistir com outros, independente das dependências. Mas isso ainda está bem incipiente, por hora a instalação e aprender a mexer nesse sistema é algo que demanda alguns conhecimentos de programação.
Uma outra solução seria integrar a outra distribuição (do pacote que vc quer instalar) dentro da sua própria distribuição através da instalação de uma dentro da outra (chroot ou container). Essa solução já existe e ficou mais simples de usar com a distrobox.
A terceira solução e que pode acontecer no AUR é quando algum programador verifica se aquele binário do .deb consegue rodar no arch com nenhuma ou poucas modificações. Se por acaso isso acontecer (e até pode acontecer pois comumente as dependências do debian são de versões anteriores e que não quebram a ABI) ele cria uma receitinha de bolo para a instalação do pacote na distribuição.
Ás vezes, o binário não é compatível, mas o código fonte pode estar disponível em formato .deb (ou tar.gz em algun site), e se algum programador criar uma receitinha de bolo para a compilação no arch, ele pode também disponibilizar um pacote no AUR. Nesse caso o pacote será compilado especificamente pra sua distribuição e, as vezes, para de funcionar e precisa ser recompilado quando alguma dependência é atualizada no arch.
Tem muita gente queimando neurônios para fazer funcionar coisas entre distribuições ou até mesmo entre sistemas operacionais. A facilidade que é instalar um flatpak acaba ocultando todo o imenso trabalho que existe por trás das cortinas, centenas de pessoas trabalhando para um programa funcionar após apertar o botão de “Instalar” na lojinha de aplicativos.
Vou adicionar o adendo, que seria a solução perfeita para rodar o pacote de qualquer distribuição no sistema q vc esta
DistroBox:
Distrobox utiliza podman(ou container) para criar um shell virtual de outra distribuição, com acesso a aplicações graficas, integração dos apps no menu do sistema(boxbudy ajuda bastante)
basta instalar o distrobox, o boxbudy e criar uma container dentro dele da distro q vc quer usar
por exemplo:
distrobox create --image ubuntu:24.04 UbuntuBox
distrobox enter UbuntuBox
Com isso dentro do seu sistema, que pode ser fedora ou qualquer outro, vc vai ter acesso a todos os repositorios e recursos do ubuntu 24.04, e isso funciona com fedora, arch, alpine, rocky, nix…
vc pode simplesmente baixar um .deb, e executar no ubuntu do distrobox pelo terminal, ou usar o boxbudy pra fazer issso de forma grafica.
Eu uso por exemplo, pra manter uma versão estável do gimp2 e uma versão beta do gimp3 dentro de um container