Pourquoi les développeurs Linux ne peuvent-ils pas créer un format d'emballage universel?


14

Les sélections de format de package binaire du fournisseur semblent être déterminées par une forme de la loi de Murphy: toutes les distributions que vous n'utilisez pas ont des packages. (Corralary: il n'existe aucune distribution satisfaisant les dépendances de distribution de votre pile logicielle).

Est-ce une question de politique, ou quelque chose de plus profond, que nous n'avons pas vu l'émergence d'un format de package "construire une fois, exécuter n'importe où"?


3
vous semblez n'avoir qu'une compréhension superficielle de ce qui différencie les distributions les unes des autres. l'unification du système de packages ne signifierait toujours pas que les packages sont interchangeables entre les distributions. votre question n'a donc aucun sens.

3
hop, pourquoi n'écrivez-vous pas une réponse qui donne une description moins superficielle des différences entre les distributions? La question est posée naïvement, mais une réponse technique approfondie attend d'être donnée.
jldugger

Vous recherchez vraiment la "Linux Standard Base"
Bill Weiss

Pourquoi les développeurs Windows ne peuvent-ils pas non plus créer un format d'emballage universel? Pas ici Windows, mais ils ont autant de méthodes d'installation de logiciels, et aucun référentiel comme Linux n'a non plus ... (c'est une question rhétorique, au fait)
Mark Henderson

Réponses:


24

Il semble approprié de citer Joel Spolsky à ce sujet:

(Soit dit en passant, pour ceux d'entre vous qui suivent le monde mystérieux mais politiquement chargé des formats de flux de syndication de blogs, vous pouvez voir la même chose se produire là-bas. Le RSS est devenu fragmenté avec plusieurs versions différentes, des spécifications inexactes et beaucoup de combats politiques, et la tentative de tout nettoyer en créant un autre format appelé Atom a abouti à plusieurs versions différentes de RSS plus une version d'Atom, des spécifications inexactes et beaucoup de combats politiques. Lorsque vous essayez d'unifier deux forces opposées en créant une troisième alternative, vous vous retrouvez juste avec trois forces opposées. Vous n'avez rien unifié et vous n'avez vraiment rien fixé.)

(pas d'italique dans l'original)

Vous avez (au moins) deux systèmes d'emballage pour Linux. C'est en fait une bonne chose. Un système unique créera simplement un troisième système.


Re: Lorsque vous essayez d'unifier deux forces opposées en créant une troisième alternative, vous vous retrouvez avec trois forces opposées. voir aussi : xkcd.com/927
JamesBarnett

20

Il y a plusieurs raisons à cela, et un peu d'histoire est pour mettre les choses en perspective.

N'oubliez pas que lorsque nous parlons de «Linux», nous faisons généralement référence à l'une des nombreuses distributions Linux différentes . "Linux" n'est en fait qu'un noyau de système d'exploitation.

L'objectif initial de Linux était de créer un système basé sur Unix qui fonctionnerait sur PC (initialement le 386). La première étape a été de créer le noyau lui-même. Alors que Linus Torvalds travaillait sur le noyau, Richard Stallman travaillait sur son propre système Free Unix, dans le cadre du projet GNU (GNU's Not Unix) . Pour faire court, les deux ont quelque peu convergé parce que GNU avait les utilitaires associés (compilateur C / bibliothèque / outils de construction, shell, éditeurs de texte, etc.) mais pas de noyau pour l'exécuter, et Linux avait le noyau mais pas d'utilitaires pour courir dessus pour le rendre utile pour les masses.

Cette convergence est connue officiellement sous le nom de GNU / Linux. Vous verrez que beaucoup de distributions se réfèrent toujours à elles-mêmes comme des distributions GNU / Linux.

En raison de la nature libre et ouverte de GNU / Linux, n'importe qui pouvait le récupérer et créer un système groupé selon ses goûts spécifiques. Le résultat a été que de nombreux flux différents de méthodes de configuration différentes ont été utilisés pour créer ces systèmes, ce qui a eu pour effet secondaire de créer presque autant de systèmes de gestion de packages différents pour s'adapter à chacun d'eux.

Chaque système complet différent avait ses propres adeptes qui sont restés avec eux au fil des ans, ce qui a abouti à ce que nous avons aujourd'hui: une poignée de systèmes de gestion de packages largement utilisés, profondément enracinés et stables tels que RPM , APT / dpkg et Gentoo's Portage .

Il existe des projets, tels que Autopackage , qui tentent de résoudre le problème, mais l'évolution continue des différents systèmes de gestion de packages pris en charge signifie qu'il existe de nombreuses cibles mobiles à suivre.

Certains éditeurs de logiciels finissent par regrouper les fichiers binaires spécifiques et les copies des dépendances dont ils ont besoin dans un seul grand package qui fonctionnera sur des systèmes spécifiques.


8
Il y a plus que cela. Même si le monde entier s'unifiait à un certain nombre de tours par minute, vous n'auriez toujours pas le package une seule fois, exécuté n'importe où dans le monde envisagé par l'OP. Les packages sont spécifiques pour la plupart à leur distribution, car ils reposent sur tous les autres packages. La seule façon d'avoir un monde "package une fois, exécuté n'importe où" serait d'avoir non seulement un seul système de package, mais aussi une seule distribution.
Cian

9

Avoir le même format de package ne serait pas utile de toute façon. Vous ne pouvez tout simplement pas utiliser le même package dans d'autres distributions. Vous ne pouvez même pas souvent l'utiliser dans les différentes versions de la même distribution. Et même la construction du package peut avoir les mêmes problèmes.

Pour installer un package, vous devez respecter les dépendances qui se sont formées lors de la construction du package. Pour construire un package, vous devez respecter les dépendances de construction. Et ces choses changent. Pour pouvoir implémenter les modifications, il est plus facile de prendre en charge uniquement les packages que vous pouvez modifier pour fonctionner après les modifications.

Si toutes les dépendances étaient identiques, ce ne serait pas une distribution différente ou une version différente de la même distribution.


4
Ne serait-il pas possible de versionner des bibliothèques et d'utiliser des dépendances de version pour résoudre le problème que vous mentionnez?
jldugger

Vous mentionnez que vous ne pouvez pas utiliser les debs d'une version sur une autre. Ce n'est pas tout à fait vrai, il y a des exceptions à cette règle. Si le paquet est principalement en python, ou si tous les bits ont été compilés statiquement, vous pouvez. Il y a même quelques fournisseurs qui incluent simplement toutes les dépendances dans le package, cela gaspille de l'espace disque, mais fait un package multi-plateforme.
Zoredache

Même si un paquet est arch: all, ou langage de script, il existe des différences significatives entre python2.4 et python2.6 qui provoqueront un paquet qui fonctionnera dans la plate-forme pour laquelle il a été conçu et échouera sur d'autres.
jldugger

Oui, il ne s'agit pas seulement des dépendances de bibliothèque.
Iny

Certaines des mises à jour de Debian ont changé où les fichiers étaient censés être placés, ou ont fourni des systèmes standardisés pour mettre à jour les fichiers de configuration qui étaient précédemment gérés manuellement. Ce genre de chose est très spécifique à la version / distribution.
pjc50

7

Il y a un peu de "syndrome non inventé ici", je pense. Le système d'empaquetage de Debian est antérieur à RedHat, et pourtant il est supérieur à bien des égards, mais vous ne verrez jamais la commutation de RedHat. Au lieu de cela, vous voyez beaucoup de gens utiliser "apt-rpm" qui essaie de vous donner certains des avantages d'apt avec les fichiers rpm.


4
apt-rpm est mort depuis un certain temps (dernière version il y a plus d'un an et demi) et la plupart des gens ont décidé d'utiliser yum. Yum lui-même offre beaucoup de fonctionnalités intéressantes qui surpassent les offres d'apt ..
rasjani

1
Je ne pense pas que l'empaquetage de Debian soit meilleur que celui de Redhat d'aujourd'hui. Auparavant, Debian avait un meilleur système de mise à jour , mais cela ne semble plus être vrai de loin. Miam est devenu très bon. Toujours lent par rapport à Smart , mais très gérable.
niXar

1
Tout ce que je sais, c'est que la dernière fois que je travaillais sur CentOS, nous étions beaucoup plus susceptibles de tomber dans l'enfer des dépendances, et le passage à apt-rpm a résolu la plupart de ces problèmes.
Paul Tomblin

1
L'emballage RPM de Redhat souffre d'EDS (syndrome de dépendance extrême). Ce n'est pas un commentaire sur RPM mais plutôt Redhat. Yum est une belle copie de apt-get plus apt-search, et apporte la convivialité au monde auparavant mystérieux de l'invocation de la ligne de commande RPM.
kmarsh

3
en fait, les formats de package .deb et .rpm sont à peu près même techniquement (mais, IMO .deb a une meilleure gestion des dépendances, en particulier les dépendances versionnées, les fournitures, les conflits et les packages virtuels). apt-get est ce qui brille au niveau de la technologie, mais ce qui fait vraiment ressortir les paquets de debian, c'est l'ensemble bien défini de politiques de développement qui définit les normes auxquelles les paquets doivent se conformer. Les packages ubuntu héritent de cela dans une large mesure, et ubuntu hérite également de la culture développeur qui l'accompagne.
cas



2

Je pense que cletus, Wayne et iny ont assez bien répondu à cette question. J'aimerais vraiment ajouter que ce n'est pas énorme. Je travaille dans un environnement mixte où nous avons Gentoo (portage), SUSE (rpm / zypper) et OpenBSD (packages et ports). L'installation de packages sur l'un d'eux n'est pas difficile, et je ne me soucie pas vraiment du format qu'ils utilisent.

Du point de vue du packaging de logiciels, ce n'est pas non plus trop difficile. Que ce soit Gentoo, une distribution basée sur RPM ou une distribution basée sur deb, cela se résume vraiment à avoir des recettes pour construire le logiciel et ajouter des métadonnées. À condition que le système de construction de ce que vous essayez de compiler ne soit pas totalement fou, il suffit généralement de peu d'écriture d'un script shell glorifié pour créer un package.


1

Eh bien, il y a toujours des binaires compilés statiquement dans les boules de goudron .... ;-)


1
AKA "Slackware".
Paul Tomblin

Malheureusement, il existe des problèmes avec les binaires compilés statiquement qui doivent charger les bibliothèques système au moment de l'exécution (en particulier nsswitch).
pjc50

1

Il n'y a pas de définition d'une interface binaire standard pour "Linux" car ce n'est qu'un noyau. Il y a fort à parier que votre pile logicielle devra s'interfacer avec plus que votre noyau, ce qui présente un défi particulier de maintenir un ABI standard entre des centaines d'arbres sources disparates.

Concernant les bons outils de packaging, je préfère Debian GNU / Linux pour son excellent format de packaging binaire. Il a répondu à 90% de mes besoins en outils et applications standard. Les 10% restants sont construits à partir de la source en raison de l'inclusion de composants non libres ou de dépendances de bibliothèque partagée boguées. Lorsque ces applications doivent être déployées, je crée des binaires personnalisés pour les clusters de production.


1

Pour obtenir une version unique, exécutez n'importe quel format de package sans forcer tout le monde à utiliser la même distribution, vous avez besoin de quelques fonctionnalités importantes:

  • Dénomination de package unique au monde, de sorte que deux personnes / distributions ne peuvent pas créer indépendamment des packages différents avec le même nom.

  • La possibilité d'installer en parallèle différentes versions de bibliothèques lorsque les packages ont des exigences contradictoires. Une distribution peut décider quelle version de chaque bibliothèque utiliser et forcer tous les packages à utiliser cette version. Un système qui fonctionne sur plusieurs distributions doit être plus flexible.

Zero Install offre ces deux fonctionnalités:

  • Les noms sont des URI (par exemple http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Seul le propriétaire d'un domaine peut créer des packages dans cet espace de noms par défaut.

  • Chaque version de chaque package va dans son propre répertoire. Chaque application ne voit que les bibliothèques dont elle a besoin, avec les versions avec lesquelles elle est compatible.

Par exemple, l' application Edit dépend de Python <3 comme ceci:

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

Voir également: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Remarque: je suis un développeur 0install]

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.