Dlaczego programiści systemu Linux nie mogą stworzyć uniwersalnego formatu opakowania?

14

Wybór formatu pakietu binarnego dostawcy wydaje się być określony przez formę prawa Murphy'ego: wszystkie dystrybucje, których nie używasz, mają pakiety. (Corralary: nie istnieje dystrybucja, która spełniałaby zależności dystrybucji stosu oprogramowania).

Czy to kwestia polityki, czy coś głębszego, że nie widzieliśmy pojawienia się formatu pakietu „buduj raz, uruchamiaj gdziekolwiek”?

jldugger
źródło
3
wydaje się, że masz tylko powierzchowne zrozumienie tego, co odróżnia rozkłady od siebie. ujednolicenie systemu pakietów nadal nie oznaczałoby, że pakiety są wymienne między dystrybucjami. twoje pytanie jest więc bez znaczenia.
3
chmiel, dlaczego nie napiszesz odpowiedzi, która daje mniej powierzchowny opis różnic między dystrybucjami? Pytanie zostało postawione naiwnie, ale czeka na niego głęboka odpowiedź techniczna.
jldugger
Naprawdę szukasz „Linux Standard Base”
Bill Weiss,
Dlaczego programiści systemu Windows nie mogą również stworzyć uniwersalnego formatu opakowania? Nie pakujemy tu Windowsa, ale mają tyle samo metod instalowania oprogramowania i żadne repozytorium jak Linux nie ma ... (to retoryczne pytanie, btw)
Mark Henderson

Odpowiedzi:

24

Wydaje się właściwe zacytowanie Joela Spolsky'ego na ten temat:

(Nawiasem mówiąc, dla tych z was, którzy śledzą tajemny, ale politycznie naładowany świat formatów kanałów syndykacji blogów, można zobaczyć, że dzieje się tam to samo. RSS zostało podzielone na kilka różnych wersji, niedokładne specyfikacje i wiele walk politycznych, a próba oczyszczenia wszystkiego poprzez utworzenie jeszcze jednego formatu o nazwie Atom spowodowała powstanie kilku różnych wersji RSS plus jednej wersji Atom, niedokładnych specyfikacji i wielu walk politycznych. Gdy spróbujesz zjednoczyć dwie przeciwne siły, tworząc trzecią alternatywę, po prostu masz trzy przeciwne siły. Nic nie zjednoczyłeś i tak naprawdę niczego nie naprawiłeś.)

(podkreślenie dodane)

Masz (przynajmniej) dwa systemy pakowania dla systemu Linux. To właściwie dobra rzecz. Pojedynczy system po prostu utworzy trzeci system.

Cletus
źródło
Re: Kiedy próbujesz zjednoczyć dwie przeciwne siły, tworząc trzecią alternatywę, po prostu dostajesz trzy przeciwne siły. patrz także : xkcd.com/927
JamesBarnett,
20

Jest tego wiele przyczyn, a trochę historii ma na celu ujęcie perspektywy.

Pamiętaj, że kiedy mówimy o „Linuksie”, ogólnie mamy na myśli jedną z wielu różnych dystrybucji Linuksa . „Linux” jest w rzeczywistości tylko jądrem systemu operacyjnego.

Pierwotnym celem Linuksa było stworzenie systemu uniksowego, który działałby na komputerach PC (początkowo 386). Pierwszym krokiem było stworzenie samego jądra. Podczas gdy Linus Torvalds pracował nad jądrem, Richard Stallman pracował nad własnym systemem Free Unix, w ramach projektu GNU (Not Unix) GNU . Krótko mówiąc, oba były w pewnym stopniu zbieżne, ponieważ GNU miał powiązane narzędzia (kompilator C / biblioteki / narzędzia do budowania, powłokę, edytory tekstu itp.), Ale nie miał rdzenia, na którym można go uruchomić, a Linux miał rdzeń, ale nie miał narzędzi do biegnij na nim, aby był użyteczny dla mas.

Ta konwergencja stała się nieco oficjalnie znana jako GNU / Linux. Przekonasz się, że wiele dystrybucji wciąż nazywa się dystrybucjami GNU / Linux.

Ze względu na darmową i otwartą naturę GNU / Linuksa każdy mógł go podnieść i stworzyć pakiet według własnego gustu. Rezultat był taki, że do stworzenia tych systemów wykorzystano wiele różnych strumieni różnych metod konfiguracji, co miało efekt uboczny polegający na utworzeniu prawie tyle różnych systemów zarządzania pakietami, które pasowałyby do każdego z nich.

Każdy inny kompletny system miał swoich silnych naśladowców, którzy utknęli z nimi przez lata, w wyniku czego mamy dzisiaj: garść szeroko używanych, głęboko zakorzenionych i stabilnych systemów zarządzania pakietami, takich jak RPM , APT / dpkg i Portage Gentoo .

Istnieją projekty, takie jak Autopackage , które próbują rozwiązać problem, ale ciągła ewolucja różnych obsługiwanych systemów zarządzania pakietami oznacza, że ​​istnieje wiele ruchomych celów do naśladowania.

W końcu niektórzy dostawcy oprogramowania łączą określone pliki binarne i kopie zależności, których potrzebują, w jeden duży pakiet, który będzie działał w określonych systemach.

Wayne Koorts
źródło
8
Jest w tym coś więcej. Nawet jeśli cały świat zjednoczy się na powiedzmy rpm, nadal nie będziesz mieć pakietu raz, uruchom gdziekolwiek świat, który przewiduje OP. Pakiety są specyficzne dla ich dystrybucji, ponieważ opierają się na wszystkich innych pakietach. Jedynym sposobem na posiadanie świata „paczka raz, uruchom w dowolnym miejscu” byłoby posiadanie nie tylko jednego systemu pakowania, ale także tylko jednej dystrybucji.
Cian
9

Posiadanie tego samego formatu pakietu i tak by nie pomogło. Po prostu nie możesz użyć tego samego pakietu w innych dystrybucjach. Często nie można go nawet użyć w innej wersji tej samej dystrybucji. Nawet zbudowanie pakietu może mieć te same problemy.

Aby zainstalować pakiet, musisz spełnić zależności, które powstają podczas budowania pakietu. Aby zbudować pakiet, musisz spełnić zależności kompilacji. I te rzeczy się zmieniają. Aby móc wprowadzić zmiany, łatwiej jest obsługiwać tylko te pakiety, które można zmodyfikować, aby działały po zmianach.

Jeśli wszystkie zależności byłyby takie same, nie byłaby to inna dystrybucja ani inna wersja tej samej dystrybucji.

iny
źródło
4
Czy nie byłoby możliwe wersjonowanie bibliotek i używanie zależności wersji do rozwiązania wspomnianego problemu?
jldugger
Wspominasz, że nie możesz używać debów z jednej wersji w innej. To nie do końca prawda, są wyjątki od tej zasady. Jeśli pakiet to głównie python lub wszystkie bity zostały skompilowane statycznie, możesz. Jest nawet kilku dostawców, którzy po prostu uwzględniają wszystkie zależności jako część pakietu, marnuje to miejsce na dysku, ale tworzy pakiet wieloplatformowy.
Zoredache
Nawet jeśli pakiety są arch: wszystkie lub języki skryptowe, istnieją znaczące różnice między python2.4 i python2.6, które spowodują, że pakiet będzie działał na platformie, dla której został zbudowany, i zawiedzie na innych.
jldugger
Tak, nie chodzi tylko o zależności bibliotek.
iny
Niektóre aktualizacje Debiana zmieniły się w miejscu, w którym miały być umieszczone pliki, lub zapewniły znormalizowane systemy do aktualizacji plików konfiguracyjnych, które były wcześniej zarządzane ręcznie. Jest to bardzo zależne od wersji / dystrybucji.
pjc50,
7

Myślę, że jest trochę „syndromu niewymienionego tutaj”. System pakowania Debiana jest wcześniejszy niż RedHat, a mimo to jest lepszy pod wieloma względami, ale nigdy nie zobaczysz przełączania RedHata. Zamiast tego widzisz wielu ludzi używających „apt-rpm”, którzy próbują dać ci pewne zalety apt z plikami rpm.

Paul Tomblin
źródło
4
apt-rpm już od dawna nie działa (ostatnie wydanie ponad półtora roku temu) i większość ludzi zaczęła używać mniam. Sam Yum zapewnia całkiem sporo fajnych funkcji, które przyćmiewają oferty apt. ..
rasjani
1
Nie wierzę, że opakowanie Debiana jest lepsze niż dzisiejsze Redhat. Kiedyś Debian miał lepszy system aktualizacji , ale to chyba nie jest prawda. Mniam bardzo dobrze. Wciąż powolny w porównaniu do Smart , ale bardzo łatwy w zarządzaniu.
niXar
1
Wiem tylko, że kiedy ostatnio pracowałem nad CentOS, znacznie bardziej prawdopodobne było, że wpadniemy w piekło zależności, a przejście na apt-rpm naprawiło większość z tych problemów.
Paul Tomblin,
1
Opakowanie RPM Redhat cierpi na EDS (syndrom ekstremalnej zależności). To nie jest komentarz do RPM, ale raczej Redhat. Yum to niezła kopia apt-get plus apt-search, która zapewnia użyteczność w tajemniczym świecie wywoływania wiersza poleceń RPM.
kmarsh
3
w rzeczywistości formaty pakietów .deb i .rpm dotyczą nawet technicznie (ale IMO .deb ma lepszą obsługę zależności, zwłaszcza wersje zależne, zapewnia, konflikty i pakiety wirtualne). apt-get jest tym, co błyszczy na poziomie technicznym, ale tak naprawdę wyróżnia pakiety Debiana, to dobrze zdefiniowany zestaw zasad programistycznych, które określają standardy, które muszą spełniać pakiety. Pakiety ubuntu dziedziczą to w dużym stopniu, a ubuntu dziedziczy również odziedziczoną z nim kulturę programistów.
cas
2

Myślę, że Cletus, Wayne i iny odpowiedzieli na to całkiem nieźle. Chciałbym dodać, że to naprawdę nie jest wielka sprawa. Pracuję w mieszanym środowisku, w którym mamy Gentoo (portage), SUSE (rpm / zypper) i OpenBSD (pakiety i porty). Instalowanie pakietów na jednym z nich nie jest trudne i nie obchodzi mnie, jakiego formatu używają.

Z punktu widzenia oprogramowania do pakowania nie jest to również zbyt trudne. Niezależnie od tego, czy jest to Gentoo, dystrybucja oparta na RPM, czy dystrybucja debowa, tak naprawdę sprowadza się to do posiadania przepisów na tworzenie oprogramowania i dodawanie metadanych. Pod warunkiem, że system kompilacji tego, co próbujesz spakować, nie jest całkowicie szalony, zwykle potrzeba niewiele więcej niż napisanie gloryfikowanego skryptu powłoki, aby utworzyć pakiet.

Kamil Kisiel
źródło
1

Cóż, zawsze są skompilowane statycznie pliki binarne w kulkach smoły .... ;-)

Jason Tan
źródło
1
AKA „Slackware”.
Paul Tomblin
Niestety występują problemy ze statycznie skompilowanymi plikami binarnymi, które muszą ładować biblioteki systemowe w czasie wykonywania (szczególnie nsswitch).
pjc50,
1

Nie ma definicji standardowego interfejsu binarnego dla „Linuksa”, ponieważ jest to tylko jądro. Szanse na to, że twój stos oprogramowania będzie musiał współpracować z więcej niż tylko jądrem, co stanowi szczególne wyzwanie w utrzymaniu standardowego ABI między setkami różnych drzew źródłowych.

Jeśli chodzi o dobre narzędzia do pakowania, wolę Debian GNU / Linux, ponieważ jest to doskonały format pakowania binarnego. Zaspokoiło 90% moich potrzeb w zakresie standardowych narzędzi i aplikacji. Pozostałe 10% jest zbudowane ze źródła ze względu na włączenie niewolnych komponentów lub błędnych zależności biblioteki współdzielonej. Kiedy aplikacje te muszą zostać wdrożone, tworzę niestandardowe pliki binarne dla klastrów produkcyjnych.

zawietrzny
źródło
1

Aby uzyskać kompilację raz, uruchom format pakietu w dowolnym miejscu, nie zmuszając wszystkich do korzystania z tej samej dystrybucji, potrzebujesz kilku ważnych funkcji:

  • Unikalne w skali globalnej nazewnictwo pakietów, dzięki czemu dwie osoby / dystrybucje nie mogą niezależnie tworzyć różnych pakietów o tej samej nazwie.

  • Możliwość równoległego instalowania różnych wersji bibliotek, gdy pakiety mają sprzeczne wymagania. Dystrybucja może zdecydować, której wersji każdej biblioteki użyć, i zmusić wszystkie pakiety do korzystania z tej wersji. System działający w różnych dystrybucjach musi być bardziej elastyczny.

Instalacja zerowa zapewnia obie te funkcje:

  • Nazwy to identyfikatory URI (np. Http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Tylko właściciel domeny może domyślnie tworzyć pakiety w tej przestrzeni nazw.

  • Każda wersja każdego pakietu znajduje się we własnym katalogu. Każda aplikacja widzi tylko te biblioteki, których potrzebuje, z wersjami, z którymi jest kompatybilna.

Na przykład aplikacja Edytuj zależy od Pythona <3 w następujący sposób:

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

Zobacz także: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Uwaga: Jestem programistą 0install]

użytkownik5746
źródło