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?
Antworten:
Es scheint angebracht, Joel Spolsky zu zitieren :
(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.
quelle
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.
quelle
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.
quelle
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.
quelle
Mach einfach .deb :-)
quelle
Es gab verschiedene vorläufige Formate wie Zero-Install und Autopackage . Leider hat keiner an Bodenhaftung gewonnen.
quelle
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.
quelle
Naja es gibt immer statisch kompilierte Binaries in Teerbällen .... ;-)
quelle
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.
quelle
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:
Siehe auch: http://www.osnews.com/story/16956/Decentralised-Installation-Systems
[Hinweis: Ich bin ein 0install-Entwickler]
quelle