Por que haveria uma incompatibilidade binária entre pacotes para diferentes distribuições Linux? [duplicado]

0

O projeto Linux Standard Base é um esforço para criar uma compatibilidade binária entre diferentes distribuições Linux. Mas por que isso seria necessário? A implicação é que o código-fonte do pacote funciona em qualquer distribuição, mas quando compilado, ele não funcionará mais em nenhum, exceto aquele para o qual ele é compilado. Eu achava que o kernel do Linux era monolítico e não mudava de distribuição para distribuição. Por que os ganchos binários para o kernel seriam diferentes em uma distribuição do que em outra?

    
por Tyler Durden 17.11.2018 / 13:53

1 resposta

1

Depois de fazer mais algumas pesquisas sobre essa questão, descobri que há basicamente duas razões pelas quais um binário às vezes não funciona em uma distribuição diferente (com o mesmo hardware) e ambas envolvem bibliotecas compartilhadas. Já que as outras perguntas similares têm respostas obtusas bastante obtusas que não deixam isso claro, estou postando uma resposta simplificada aqui.

(1) A primeira questão é que as bibliotecas compartilhadas podem estar localizadas em locais diferentes em distribuições diferentes. Isso não deve importar, porque os aplicativos devem sempre procurar por bibliotecas no LD_LIBRARY_PATH. No entanto, aparentemente alguns aplicativos mal escritos não usam LD_LIBRARY_PATH, mas usam um caminho codificado para uma biblioteca, resultando em uma incompatibilidade de nível de distribuição.

(2) A segunda questão é que as bibliotecas compartilhadas podem variar de distribuição para distribuição. Geralmente são apenas funções relativamente obscuras ou avançadas que são diferentes, mas se o aplicativo usar uma chamada de API que por algum motivo esteja no .so de uma distribuição, mas não presente na de outra, haverá uma incompatibilidade. É uma espécie de análogo ao "inferno DLL" em um PC.

    
por 17.11.2018 / 14:15