Warum können Linux-Entwickler kein universelles Verpackungsformat erstellen?


14

Die Auswahl des Binärpaketformats des Herstellers scheint durch eine Form von Murphy's Law bestimmt zu sein: Alle Distributionen, die Sie nicht verwenden, haben Pakete. (Entsprechung: Es gibt keine Verteilung, die die Verteilungsabhängigkeiten Ihres Software-Stacks erfüllt.)

Handelt es sich um eine politische Angelegenheit oder um etwas Tieferes, bei dem das Paketformat "einmal erstellen, überall ausführen" noch nicht aufgetaucht ist?


3
Sie scheinen nur ein oberflächliches Verständnis dafür zu haben, was Verteilungen voneinander unterscheidet. Eine Vereinheitlichung des Paketsystems würde immer noch nicht bedeuten, dass Pakete zwischen Distributionen austauschbar sind. deine frage ist also sinnlos.

3
hop, warum schreibst du nicht eine Antwort auf, die die Unterschiede zwischen den Distributionen weniger oberflächlich beschreibt? Die Frage wird naiv gestellt, aber es gibt eine tiefe technische Antwort, die darauf wartet, gegeben zu werden.
Jldugger

Sie suchen wirklich nach der "Linux Standard Base"
Bill Weiss

Warum können Windows-Entwickler auch kein universelles Verpackungsformat erstellen? Nicht Windows hier einsacken, aber sie haben genauso viele Methoden zur Installation von Software, und kein einziges Repository wie Linux hat auch ... (Dies ist übrigens eine rhetorische Frage)
Mark Henderson

Antworten:


24

Es scheint angebracht, Joel Spolsky zu zitieren :

(Übrigens: Für diejenigen unter Ihnen, die der geheimnisvollen, aber politisch aufgeladenen Welt der Blog-Syndication-Feed-Formate folgen, ist das Gleiche dort zu sehen. RSS wurde mit verschiedenen Versionen, ungenauen Spezifikationen und vielen politischen Kämpfen fragmentiert.) und der Versuch, alles zu bereinigen, indem ein weiteres Format namens Atom erstellt wurde, führte zu mehreren verschiedenen Versionen von RSS plus einer Version von Atom, ungenauen Spezifikationen und vielen politischen Kämpfen. Wenn Sie versuchen, zwei gegnerische Kräfte zu vereinen, indem Sie eine dritte Alternative erstellen, Am Ende haben Sie nur drei gegnerische Kräfte. Sie haben nichts vereinheitlicht und nichts wirklich repariert.)

(Betonung hinzugefügt)

Sie haben (mindestens) zwei Verpackungssysteme für Linux. Das ist eigentlich eine gute Sache. Ein einzelnes System erstellt einfach ein drittes System.


Betreff: Wenn Sie versuchen, zwei gegnerische Kräfte zu vereinen, indem Sie eine dritte Alternative schaffen, erhalten Sie nur drei gegnerische Kräfte. siehe auch : xkcd.com/927
JamesBarnett

20

Dafür gibt es viele Gründe, und ein bisschen Geschichte dient dazu, die Dinge ins rechte Licht zu rücken.

Denken Sie daran, dass es sich bei dem Begriff "Linux" im Allgemeinen um eine von vielen verschiedenen Linux-Distributionen handelt . "Linux" ist eigentlich nur ein Betriebssystemkernel.

Das ursprüngliche Ziel von Linux war es, ein Unix-basiertes System zu entwickeln, das auf PCs (ursprünglich 386) ausgeführt werden kann. Der erste Schritt bestand darin, den Kernel selbst zu erstellen. Während Linus Torvalds am Kernel arbeitete, arbeitete Richard Stallman im Rahmen des GNU-Projekts (Not Unix) an seinem eigenen freien Unix-System . Um es kurz zu machen, die beiden waren sich einig, dass GNU die dazugehörigen Dienstprogramme (C-Compiler / Bibliothek / Build-Tools, Shell, Texteditoren usw.) hatte, aber keinen Kern, auf dem es ausgeführt werden konnte, und Linux hatte den Kern, aber keine Dienstprogramme laufen Sie darauf, um es für die Massen nützlich zu machen.

Diese Konvergenz wurde etwas offiziell als GNU / Linux bekannt. Sie werden sehen, dass sich viele Distributionen immer noch als GNU / Linux-Distributionen bezeichnen.

Aufgrund des freien und offenen Charakters von GNU / Linux konnte jeder es aufgreifen und ein gebündeltes System für seinen speziellen Geschmack erstellen. Das Ergebnis war, dass viele verschiedene Streams unterschiedlicher Konfigurationsmethoden verwendet wurden, um diese Systeme zu erstellen. Dies hatte den Nebeneffekt, dass fast genauso viele verschiedene Paketverwaltungssysteme erstellt wurden, die in jedes System passen.

Jedes einzelne Komplettsystem hatte seine eigenen starken Anhänger, die im Laufe der Jahre daran festhielten, was zu dem führte, was wir heute haben: eine Handvoll weit verbreiteter, tief verwurzelter und stabiler Paketverwaltungssysteme wie RPM , APT / dpkg und Gentoos Portage .

Es gibt Projekte wie Autopackage , die versuchen, das Problem zu lösen, aber die ständige Weiterentwicklung der verschiedenen unterstützten Paketverwaltungssysteme bedeutet, dass viele bewegliche Ziele verfolgt werden müssen.

Einige Softwareanbieter bündeln die spezifischen Binärdateien und Kopien der Abhängigkeiten, die sie benötigen, in einem großen Paket, das auf bestimmten Systemen funktioniert.


8
Es steckt mehr dahinter. Selbst wenn die ganze Welt mit rpm vereinheitlicht wäre, hätten Sie das Paket nicht einmal, sondern könnten es auf einer beliebigen Welt ausführen, die das OP vorsieht. Pakete sind zum größten Teil für ihre Distribution spezifisch, da sie auf alle anderen Pakete angewiesen sind. Die einzige Möglichkeit, eine Welt "einmal paketieren, überall ausführen" zu lassen, besteht darin, nicht nur ein einziges Paketsystem, sondern auch nur eine einzige Distribution zu haben.
Cian,

9

Dasselbe Paketformat zu haben, würde sowieso nicht helfen. Sie können nicht dasselbe Paket in anderen Distributionen verwenden. Sie können es nicht einmal in verschiedenen Versionen derselben Distribution verwenden. Und selbst das Erstellen des Pakets kann die gleichen Probleme haben.

Um ein Paket zu installieren, müssen Sie die Abhängigkeiten berücksichtigen, die beim Erstellen des Pakets entstehen. Um ein Paket zu erstellen, müssen Sie die Build-Abhängigkeiten erfüllen. Und diese Dinge ändern sich. Um die Änderungen implementieren zu können, ist es einfacher, nur Pakete zu unterstützen, die Sie ändern können, um nach den Änderungen zu funktionieren.

Wenn alle Abhängigkeiten gleich wären, wäre dies keine andere Distribution oder eine andere Version derselben Distribution.


4
Wäre es nicht möglich, Bibliotheken zu versionieren und Versionsabhängigkeiten zu verwenden, um das von Ihnen erwähnte Problem zu lösen?
Jldugger

Sie erwähnen, dass Sie Debs von einer Version auf einer anderen nicht verwenden können. Das ist nicht ganz richtig, es gibt Ausnahmen von dieser Regel. Wenn das Paket hauptsächlich aus Python besteht oder wenn alle Bits statisch kompiliert wurden, können Sie dies tun. Es gibt sogar einige Anbieter, die einfach alle Abhängigkeiten als Teil des Pakets einbeziehen. Dadurch wird Speicherplatz verschwendet, es wird jedoch ein plattformübergreifendes Paket erstellt.
Zoredache

Selbst wenn ein Paket arch: all oder Skriptsprachen ist, gibt es erhebliche Unterschiede zwischen python2.4 und python2.6, die dazu führen, dass ein Paket auf der Plattform, für die es erstellt wurde, funktioniert und auf anderen fehlschlägt.
Jldugger

Ja, es geht nicht nur um Bibliotheksabhängigkeiten.
Iny

Einige der Debian-Updates haben sich geändert, wo Dateien abgelegt werden sollten, oder es wurden standardisierte Systeme zum Aktualisieren von Konfigurationsdateien bereitgestellt, die zuvor manuell verwaltet wurden. Dies ist sehr versions- / distro-spezifisch.
pjc50

7

Es gibt ein bisschen "Not Invented Here Syndrome", denke ich. Debians Verpackungssystem ist älter als RedHat, und es ist in vielerlei Hinsicht überlegen, aber Sie werden nie feststellen, dass RedHat wechselt. Stattdessen sehen Sie eine Menge Leute, die "apt-rpm" verwenden, um Ihnen einige der Vorteile von apt mit rpm-Dateien zu bieten.


4
apt-rpm ist seit einiger Zeit tot (letzte Veröffentlichung vor mehr als 1½ Jahren) und die meisten Leute sind dazu übergegangen, Yum zu verwenden. Yum selbst bietet eine Menge netter Funktionen, die die Angebote von apt übertreffen.
rasjani

1
Ich glaube nicht, dass Debians Verpackung besser ist als die heutige von Redhat. Früher hatte Debian ein besseres Aktualisierungssystem , aber das scheint bei weitem nicht mehr zu stimmen. Yum ist sehr gut geworden. Immer noch langsam im Vergleich zu Smart , aber sehr überschaubar.
niXar

1
Alles, was ich weiß, ist, dass ich das letzte Mal an CentOS gearbeitet habe, dass wir viel wahrscheinlicher in die Abhängigkeits-Hölle gerieten und dass der Wechsel zu apt-rpm die meisten dieser Probleme behoben hat.
Paul Tomblin

1
Die RPM-Verpackung von Redhat leidet unter EDS (Extreme Dependency Syndrome). Dies ist kein Kommentar zu RPM, sondern eher zu Redhat. Yum ist eine nette Kopie von apt-get plus apt-search und bringt Benutzerfreundlichkeit in die bisher arkane Welt des RPM-Befehlszeilenaufrufs.
kmarsh

3
Tatsächlich handelt es sich bei den Paketformaten .deb und .rpm sogar um technische Formate (IMO .deb bietet jedoch eine bessere Handhabung von Abhängigkeiten, insbesondere versionierte Abhängigkeiten, Bereitstellungen, Konflikte und virtuelle Pakete). apt-get ist das, was auf der Tech-Ebene glänzt, aber was Debians Pakete wirklich auszeichnet, sind die genau definierten Entwicklerrichtlinien, die die Standards festlegen, denen Pakete entsprechen müssen. Ubuntu-Pakete erben das zu einem großen Teil, und Ubuntu erbt auch die dazugehörige Entwicklerkultur.
cas



2

Ich denke, Cletus, Wayne und ich haben das ziemlich gut beantwortet. Ich möchte das wirklich hinzufügen, es ist keine große Sache. Ich arbeite in einer gemischten Umgebung, in der wir Gentoo (Portierung), SUSE (rpm / zypper) und OpenBSD (Pakete und Ports) haben. Das Installieren von Paketen auf einem von ihnen ist nicht schwierig, und es ist mir egal, welches Format sie verwenden.

Aus der Sicht der Verpackungssoftware ist es auch nicht allzu schwierig. Sei es Gentoo, eine RPM-basierte Distribution oder eine Deb-basierte Distribution, es läuft einfach darauf hinaus, Rezepte für das Erstellen der Software und das Hinzufügen einiger Metadaten zu haben. Vorausgesetzt, das Build-System für das, was Sie zu packen versuchen, ist nicht völlig verrückt. In der Regel ist es nicht viel mehr als das Schreiben eines verherrlichten Shell-Skripts, um ein Paket zu erstellen.


1

Naja es gibt immer statisch kompilierte Binaries in Teerbällen .... ;-)


1
AKA "Slackware".
Paul Tomblin

Leider gibt es Probleme mit statisch kompilierten Binärdateien, die zur Laufzeit Systembibliotheken laden müssen (insbesondere nsswitch).
pjc50

1

Es gibt keine Definition einer Standard-Binärschnittstelle für "Linux", da dies nur ein Kernel ist. Wahrscheinlich muss Ihr Software-Stack nicht nur mit Ihrem Kernel kommunizieren, was eine besondere Herausforderung für die Aufrechterhaltung eines Standard-ABI zwischen Hunderten von unterschiedlichen Quellbäumen darstellt.

In Bezug auf gute Verpackungstools bevorzuge ich Debian GNU / Linux wegen seines ausgezeichneten Binärverpackungsformats. Es hat 90% meines Bedarfs an Standardwerkzeugen und -anwendungen gedient. Die restlichen 10% stammen aus dem Quellcode, da nicht freie Komponenten oder fehlerhafte Abhängigkeiten von gemeinsam genutzten Bibliotheken enthalten sind. Wenn diese Anwendungen bereitgestellt werden müssen, erstelle ich benutzerdefinierte Binärdateien für die Produktionscluster.


1

Um eine einmalige Erstellung zu erhalten, müssen Sie ein beliebiges Paketformat ausführen, ohne dass alle Benutzer dieselbe Distribution verwenden müssen. Dazu benötigen Sie einige wichtige Funktionen:

  • Global eindeutige Paketnamen, sodass zwei Personen / Distributionen nicht unabhängig voneinander unterschiedliche Pakete mit demselben Namen erstellen können.

  • Die Möglichkeit, verschiedene Versionen von Bibliotheken parallel zu installieren, wenn Pakete widersprüchliche Anforderungen haben. Eine Distribution kann entscheiden, welche Version jeder Bibliothek verwendet werden soll, und alle Pakete zwingen, diese Version zu verwenden. Ein verteilungsübergreifendes System muss flexibler sein.

Zero Install bietet diese beiden Funktionen:

  • Namen sind URIs (zB http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Nur der Eigentümer einer Domain kann standardmäßig Pakete in diesem Namespace erstellen.

  • Jede Version jedes Pakets befindet sich in einem eigenen Verzeichnis. Jede Anwendung sieht nur die Bibliotheken, die sie benötigt, und die Versionen, mit denen sie kompatibel ist.

Zum Beispiel hängt die Edit- Anwendung von Python <3 wie folgt ab:

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

Siehe auch: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Hinweis: Ich bin ein 0install-Entwickler]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.