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

14

As seleções do formato do pacote binário do fornecedor parecem ser determinadas por uma forma da Lei de Murphy: todas as distribuições que você não usa possuem pacotes. (Corralary: não existe nenhuma 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"?

    
por jldugger 24.05.2009 / 02:54

10 respostas

24

Parece apropriado citar Joel Spolsky neste:

(By the way, for those of you who follow the arcane but politically-charged world of blog syndication feed formats, you can see the same thing happening over there. RSS became fragmented with several different versions, inaccurate specs and lots of political fighting, and the attempt to clean everything up by creating yet another format called Atom has resulted in several different versions of RSS plus one version of Atom, inaccurate specs and lots of political fighting. When you try to unify two opposing forces by creating a third alternative, you just end up with three opposing forces. You haven't unified anything and you haven't really fixed anything.)

(ênfase adicionada)

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

    
por 24.05.2009 / 04:46
20

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

Lembre-se de que quando falamos de "Linux", estamos nos referindo a uma das muitas distribuições Linux . "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 Livre , sob o GNU (GNU's Not Unix) project . Para encurtar a história, os dois convergiram porque o GNU tinha os utilitários associados (compilador C / biblioteca / ferramentas de construção, shell, editores de texto, etc.), mas nenhum núcleo para executá-lo, e o Linux tinha o núcleo, mas não tinha utilidades correr em cima dele para torná-lo útil para as massas.

Essa convergência veio a ser conhecida de forma um pouco oficial como GNU / Linux. Você verá que muitas distribuições ainda se referem a si mesmas como distribuições GNU / Linux.

Por causa da natureza Livre e Aberta do GNU / Linux, qualquer um poderia pegá-lo e criar um sistema integrado 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, o que teve o efeito colateral de criar quase tantos sistemas de gerenciamento de pacotes diferentes para se adequar a cada um deles.

Cada sistema completo diferente tinha seus próprios seguidores strongs que ficaram com eles 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 Autopackage , que estão tentando resolver o problema, mas a evolução contínua dos vários meios de sistemas de gerenciamento de pacotes suportados há muitos alvos móveis a seguir.

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

    
por 24.05.2009 / 03:36
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é mesmo construir o pacote pode ter os mesmos problemas.

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

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

    
por 24.05.2009 / 12:51
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á a mudança do RedHat. Em vez disso, você vê muitas pessoas usando o "apt-rpm" que tenta dar a você algumas das vantagens do apt com arquivos rpm.

    
por 24.05.2009 / 03:32
5

Basta ir para .deb: -)

    
por 30.05.2009 / 20:02
2

Havia vários formatos provisórios, como zero-install e autopackage . Infelizmente nenhum ganhou qualquer tração.

    
por 16.07.2009 / 15:05
2

Eu acho que Cletus, Wayne e Iny responderam isso muito bem. Eu gostaria de acrescentar que realmente, não é um grande negócio. Eu trabalho em um ambiente misto, onde temos o Gentoo (portage), SUSE (rpm / zypper) e 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 é totalmente difícil. Seja o Gentoo, uma distro baseada em RPM, ou uma distro baseada em debos, ela realmente 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 é necessário um pouco mais do que escrever um script de shell glorificado para criar um pacote.

    
por 28.08.2009 / 01:03
1

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

    
por 30.05.2009 / 19:14
1

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

No tópico das boas ferramentas de empacotamento, eu prefiro o Debian GNU / Linux pelo 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 do código-fonte devido à inclusão de componentes não livres ou dependências de bibliotecas compartilhadas com bugs. Quando esses aplicativos precisam ser implementados, eu construo binários personalizados para os clusters de produção.

    
por 27.08.2009 / 21:31
1

Para obter um formato de pacote de compilação única, executado em qualquer lugar, sem forçar todos a usar a mesma distribuição, você precisa de alguns recursos importantes:

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

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

Zero Install fornece os dois recursos:

  • Os nomes são URIs (por exemplo, link ). Somente o proprietário de um domínio pode criar pacotes dentro desse namespace por padrão.

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

Por exemplo, o aplicativo Editar depende do Python < 3 assim:

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

Veja também: link

[Nota: sou um desenvolvedor 0install]

    
por 17.09.2011 / 23:11