Por que os desenvolvedores do Linux não podem criar um formato de empacotamento universal?


14

As seleções de formato de pacote binário do fornecedor parecem ser determinadas por uma forma da Lei de Murphy: todas as distros que você não usa têm pacotes. (Corralário: não existe distribuição que satisfaça as dependências de distribuição da sua pilha de software).

É uma questão de política ou algo mais profundo que não vimos o surgimento de um formato de pacote "construa uma vez, execute em qualquer lugar"?


3
você parece ter apenas uma compreensão superficial do que diferencia as distribuições umas das outras. unificar o sistema de pacotes ainda não significaria que os pacotes são intercambiáveis ​​entre distribuições. sua pergunta é, portanto, sem sentido.

3
hop, por que você não escreve uma resposta que fornece uma descrição menos superficial das diferenças entre distribuições? A pergunta é declarada ingenuamente, mas há uma resposta técnica profunda aguardando resposta.
Jldugger #

Você está realmente procurando pelo "Linux Standard Base"
Bill Weiss

Por que os desenvolvedores do Windows também não podem criar um formato de empacotamento universal? Não ensacamento do Windows aqui, mas eles têm apenas como muitos métodos de instalação de software, e nenhum repositório único como o Linux tem também ... (esta é uma pergunta retórica, btw)
Mark Henderson

Respostas:


24

Parece apropriado citar Joel Spolsky sobre este:

(A propósito, para aqueles que seguem o mundo arcano, mas politicamente carregado, dos formatos de feed de distribuição de blogs, é possível ver o mesmo acontecendo por lá. O RSS ficou fragmentado com várias versões diferentes, especificações imprecisas e muita luta política, e a tentativa de limpar tudo criando outro formato chamado Atom resultou em várias versões diferentes do RSS, mais uma versão do Atom, especificações imprecisas e muita luta política.Quando você tenta unificar duas forças opostas criando uma terceira alternativa, você acaba com três forças opostas. Você não unificou nada e realmente não consertou nada.)

(enfase adicionada)

Você possui (pelo menos) dois sistemas de empacotamento para Linux. Isso é realmente uma coisa boa. Um único sistema simplesmente criará um terceiro sistema.


Re: Quando você tenta unificar duas forças opostas criando uma terceira alternativa, você acaba com três forças opostas. Veja também : xkcd.com/927
JamesBarnett

20

Existem muitas razões para isso, e um pouco de história é para colocar as coisas em perspectiva.

Lembre-se de que, quando falamos em "Linux", geralmente nos referimos a uma das muitas distribuições Linux diferentes . "Linux" é na verdade apenas um kernel do sistema operacional.

O objetivo original do Linux era criar um sistema baseado em Unix que rodasse em PCs (inicialmente o 386). O primeiro passo foi criar o próprio kernel. Enquanto Linus Torvalds estava trabalhando no kernel, Richard Stallman estava trabalhando em seu próprio sistema Free Unix, sob o projeto GNU (GNU's Not Unix) . Para encurtar a história, os dois convergiram um pouco porque o GNU tinha os utilitários associados (compilador C / biblioteca / ferramentas de construção, shell, editores de texto etc.), mas não tinha núcleo para executá-lo, e o Linux tinha o núcleo, mas não tinha utilitários para correr em cima dele para torná-lo útil para as massas.

Essa convergência passou a ser conhecida oficialmente como GNU / Linux. Você verá que muitas distros ainda se referem a si mesmas como distribuições GNU / Linux.

Devido à natureza livre e aberta do GNU / Linux, qualquer um poderia buscá-lo e criar um sistema agrupado para seus gostos específicos. O resultado foi que muitos fluxos diferentes de métodos de configuração variados foram usados ​​para criar esses sistemas, que tiveram o efeito colateral de criar quase tantos sistemas de gerenciamento de pacotes diferentes para se encaixarem em cada um.

Cada sistema completo diferente tinha seus próprios seguidores fortes que os mantiveram ao longo dos anos, resultando no que temos hoje: um punhado de sistemas de gerenciamento de pacotes amplamente usados, profundamente enraizados e estáveis, como RPM , APT / dpkg e Portage do Gentoo .

Existem projetos, como o Autopackage , que estão tentando resolver o problema, mas a evolução contínua dos vários sistemas de gerenciamento de pacotes suportados significa que existem muitos objetivos móveis a serem seguidos.

O que alguns fornecedores de software acabam fazendo é agrupar os binários e cópias específicos das dependências necessárias em um pacote grande que funcionará em sistemas específicos.


8
Há mais do que isso. Mesmo que o mundo inteiro esteja unificado, digamos rpm, você ainda não teria o pacote uma vez, rodando em qualquer lugar que o OP visse. Os pacotes são específicos, em sua maioria, para sua distribuição, pois contam com todos os outros pacotes. A única maneira de ter um mundo "pacote uma vez, execute em qualquer lugar" seria não apenas ter um sistema de empacotamento único, mas também uma única distribuição.
Cian

9

Ter o mesmo formato de pacote não ajudaria de qualquer maneira. Você simplesmente não pode usar o mesmo pacote em outras distribuições. Você nem sempre pode usá-lo na versão diferente da mesma distribuição. E até a construção do pacote pode ter os mesmos problemas.

Para instalar um pacote, você precisa atender às dependências que são formadas durante a criação do pacote. Para compilar um pacote, você precisa atender às dependências de compilação. E essas coisas mudam. Para poder implementar as alterações, é mais fácil oferecer suporte apenas aos pacotes que você pode modificar para funcionar após as alterações.

Se todas as dependências fossem iguais, não haveria uma distribuição diferente ou uma versão diferente da mesma distribuição.


4
Não seria possível criar versões de bibliotecas e usar dependências de versões para resolver o problema mencionado?
Jldugger #

Você menciona que não pode usar debs de uma versão para outra. Isso não é inteiramente verdade, há exceções a essa regra. Se o pacote for principalmente python, ou se todos os bits foram compilados estaticamente, você poderá. Existem até alguns fornecedores que simplesmente incluem todas as dependências como parte do pacote, isso desperdiça espaço em disco, mas cria um pacote de plataforma cruzada.
Zoredache

Mesmo que um pacote seja arch: all, ou linguagens de script, há diferenças significativas entre python2.4 e python2.6 que causarão um pacote que funcione na plataforma para a qual foi construído e falhará nos outros.
Jldugger # 25/09

Sim, não se trata apenas de dependências da biblioteca.
iny

Algumas das atualizações do debian mudaram onde os arquivos deveriam ser colocados ou forneceram sistemas padronizados para atualizar os arquivos de configuração que foram gerenciados anteriormente manualmente .. esse tipo de coisa é muito específica da versão / distribuição.
Pjc50 10/09/09

7

Há um pouco de "síndrome não inventada aqui", eu acho. O sistema de empacotamento do Debian é anterior ao RedHat, e ainda é superior em muitos aspectos, mas você nunca verá o RedHat alternando. Em vez disso, você vê muitas pessoas usando o "apt-rpm" que tenta oferecer a você algumas das vantagens do apt com arquivos rpm.


4
O apt-rpm está morto há um bom tempo (última versão há mais de 1 ano e meio) agora e a maioria das pessoas mudou para usar o yum. Yum si oferece um monte de características interessantes que ofuscam das ofertas Apt ..
rasjani

1
Não acredito que a embalagem do Debian seja melhor que a do Redhat de hoje. Costumava ser que o Debian tinha um sistema de atualização melhor , mas isso não parece mais ser verdade, de longe. Yum ficou muito bom. Ainda lento comparado ao Smart , mas muito gerenciável.
NiXar 06/08/2009

1
Tudo o que sei é que da última vez em que trabalhei no CentOS, éramos muito mais propensos a entrar no inferno das dependências e a mudança para o apt-rpm corrigiu a maioria desses problemas.
Paul Tomblin

1
O pacote RPM da Redhat sofre de EDS (síndrome de dependência extrema). Este não é um comentário sobre o RPM, mas o Redhat. Yum é uma boa cópia do apt-get e apt-search, e traz usabilidade ao mundo anteriormente misterioso da chamada de linha de comando do RPM.
kmarsh

3
na verdade, os formatos de pacote .deb. O apt-get é o que brilha no nível tecnológico, mas o que realmente destaca os pacotes debian é o conjunto bem definido de políticas de desenvolvedor que definem os padrões que os pacotes devem cumprir. Os pacotes do ubuntu herdam isso em grande parte, e o ubuntu também herda também a cultura do desenvolvedor que o acompanha.
cas



2

Acho que Cletus, Wayne e Iny responderam muito bem a isso. Eu gostaria de acrescentar que realmente, não é um grande negócio. Eu trabalho em um ambiente misto, onde temos o Gentoo (portage), o SUSE (rpm / zypper) e o OpenBSD (pacotes e portas). Instalar pacotes em qualquer um deles não é difícil, e eu realmente não me importo com o formato que eles estão usando.

Da perspectiva do software de empacotamento, também não é abertamente difícil. Seja o Gentoo, uma distribuição baseada em RPM ou uma distribuição baseada em deb, tudo se resume a ter receitas para construir o software e adicionar alguns metadados. Desde que o sistema de compilação do que você está tentando empacotar não seja totalmente insano, geralmente é preciso pouco mais do que escrever um script de shell glorificado para criar um pacote.


1

Bem, sempre existem binários estaticamente compilados em bolas de alcatrão .... ;-)


1
Também conhecido como "Slackware".
Paul Tomblin

Infelizmente, há problemas com binários estaticamente compilados que precisam carregar bibliotecas do sistema em tempo de execução (especialmente o nsswitch).
Pjc50 10/09/09

1

Não há definição de uma interface binária padrão para o "Linux", pois é apenas um kernel. As probabilidades incluem que sua pilha de software precisará interagir com mais do que apenas seu kernel, apresentando um desafio particular de manter uma ABI padrão entre centenas de árvores de origem diferentes.

No tópico de boas ferramentas de empacotamento, eu prefiro o Debian GNU / Linux por seu excelente formato de empacotamento binário. Atendeu 90% das minhas necessidades de ferramentas e aplicativos padrão. Os 10% restantes são criados a partir da origem devido à inclusão de componentes não livres ou dependências de bibliotecas compartilhadas com bugs. Quando esses aplicativos precisam ser implantados, eu construo binários personalizados para os clusters de produção.


1

Para obter uma compilação única, execute o formato de pacote em qualquer lugar sem forçar todos a usar a mesma distribuição, são necessários alguns recursos importantes:

  • Nomeação de pacotes globalmente exclusiva, para que duas pessoas / distribuições não possam criar pacotes diferentes com o mesmo nome de forma independente.

  • A capacidade de instalar em paralelo versões diferentes de bibliotecas quando os pacotes têm requisitos conflitantes. Uma distribuição pode decidir qual versão de cada biblioteca usar e forçar todos os pacotes a usarem essa versão. Um sistema que funciona em distribuições deve ser mais flexível.

A Instalação Zero fornece esses dois recursos:

  • Os nomes são URIs (por exemplo, http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Somente o proprietário de um domínio pode criar pacotes dentro desse espaço para nome por padrão.

  • Cada versão de cada pacote entra em seu próprio diretório. Cada aplicativo vê apenas as bibliotecas de que precisa, com as versões compatíveis.

Por exemplo, o aplicativo Edit depende de Python <3 como este:

<command name="run" path="Edit/AppRun">
  <runner interface="http://repo.roscidus.com/python/python">
    <version before="3"/>
  </runner>
</command>

Consulte também: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Nota: eu sou desenvolvedor 0install]

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.