Por que o linux não permite múltiplas versões no repositório central?

2

Parece-me que muitos dos problemas que usam o Linux são causados por dependências incompatíveis. Especificamente, você não pode instalar duas versões de uma biblioteca.

Portanto, se o programa A requer "lib1.2" e o programa B requer "lib1.3", então eles não podem ser executados juntos.

Pergunta:

  1. Isso está correto?
  2. Por que o repositório central não suporta apenas a lib1.2 e a lib1.3 ao mesmo tempo e que os programas receberão a versão solicitada?
por Martin Clemens Bloch 28.09.2015 / 14:37

3 respostas

6

Ter múltiplas versões de uma biblioteca no sistema não é um problema na maioria das distribuições do Linux: bibliotecas compartilhadas com diferentes sonames pode coexistir dentro do mesmo diretório /usr/lib . Além disso, os gerenciadores de pacotes podem ser instruídos a instalar várias dessas bibliotecas, especificando nomes corretos de pacotes:

apt-get install libjpeg7
apt-get install libjpeg8

Na realidade, você pode encontrar duas falhas com este sistema:

  1. A maioria das distribuições fornece apenas uma versão de biblioteca por versão de distribuição para economizar espaço. Por exemplo, meu Debian Wheezy possui apenas libjpeg8 . Ainda será possível instalar uma versão de biblioteca específica (por exemplo, libjpeg7 ) das origens e ela coexistirá com outras versões sem problemas. Você pode até mesmo tentar instalar um pacote a partir de outra distribuição, mas cuidado, pois isso pode gerar muitas dependências.

  2. Às vezes, duas versões de bibliotecas com o mesmo soname (que são compatíveis) funcionam com alguns programas e não com outros. Essa é a principal razão para ter várias versões de distribuições, a propósito. A solução neste caso é manter bibliotecas incompatíveis fora de /usr/lib e torná-las acessíveis a um programa em particular via LD_LIBRARY_PATH ou chroot.

por 28.09.2015 / 16:12
4

Resposta curta:

  1. Não.
  2. Para algumas distribuições, este é o caso.

Resposta mais longa:

Linux é o kernel, não uma distribuição. Se você usa uma distribuição como NixOS , é fácil ter várias versões da mesma biblioteca instaladas ao mesmo tempo.

    
por 28.09.2015 / 14:49
4

RE: seu comentário sobre "nunca foi visto no Windows"

O Windows evita isso, porque quase todo programa instala uma cópia extra das principais bibliotecas que usa em seu próprio diretório, assim você acaba com dezenas de cópias das mesmas bibliotecas instaladas. É por isso que você frequentemente vê setup.exe ou instaladores similares reinstalando as mesmas libs como Direct X ou Dot Net ou Visual C.

O Windows suporta DLLs com versão, semelhante a como o Linux suporta bibliotecas compartilhadas com versão, mas a Microsoft incentiva os desenvolvedores de aplicativos a incluírem em seu aplicativo a versão específica da qual seu software depende - algo que talvez fosse necessário na era pré-internet. ser difícil para os usuários adquirir cópias de bibliotecas essenciais.

É possível fazer o mesmo no Linux, mas a) é desencorajado como sendo um desperdício e preguiçoso (por parte dos desenvolvedores de aplicativos e desenvolvedores de lib) eb) o Linux não procura, por padrão, o mesmo diretório como um programa para suas bibliotecas compartilhadas - ele procura apenas nos diretórios especificados por LD_LIBRARY_PATH. Alguns programas vêm com wrappers de script de shell para alterar LD_LIBRARY_PATH antes de executar o executável binário.

    
por 29.09.2015 / 01:12