Perché gli sviluppatori Linux non possono creare un formato di packaging universale?


14

Le selezioni del formato del pacchetto binario del fornitore sembrano essere determinate da una forma della Legge di Murphy: tutte le distro che non si usano hanno pacchetti. (Corralary: non esiste alcuna distribuzione che soddisfi le dipendenze di distribuzione dello stack software).

È una questione di politica, o qualcosa di più profondo, che non abbiamo visto emergere un formato di pacchetto "costruisci una volta, corri ovunque"?


3
sembri avere solo una comprensione superficiale di ciò che differenzia le distribuzioni l'una dall'altra. unificare il sistema di pacchetti non significherebbe ancora che i pacchetti sono intercambiabili tra le distribuzioni. la tua domanda è quindi insignificante.

3
hop, perché non scrivi una risposta che dia una descrizione meno superficiale delle differenze tra le distribuzioni? La domanda è dichiarata ingenua, ma c'è una profonda risposta tecnica in attesa di essere data.
jldugger,

Stai davvero cercando la "Base standard Linux"
Bill Weiss, il

Perché neanche gli sviluppatori Windows possono creare un formato di packaging universale? Non insacchettando Windows qui, ma hanno altrettanti metodi di installazione del software e nessun repository come Linux ha ... (questa è una domanda retorica, tra l'altro)
Mark Henderson

Risposte:


24

Sembra appropriato citare Joel Spolsky su questo:

(A proposito, per quelli di voi che seguono il mondo arcano ma politicamente carico dei formati di feed di syndication dei blog, potete vedere accadere la stessa cosa laggiù. RSS è diventato frammentato con diverse versioni diverse, specifiche imprecise e molti combattimenti politici, e il tentativo di ripulire tutto creando un altro formato chiamato Atom ha portato a diverse versioni di RSS più una versione di Atom, specifiche imprecise e molti combattimenti politici. Quando si tenta di unificare due forze opposte creando una terza alternativa, finisci con tre forze opposte. Non hai unificato nulla e non hai riparato nulla.)

(enfasi aggiunta)

Hai (almeno) due sistemi di packaging per Linux. In realtà è una buona cosa. Un singolo sistema creerà semplicemente un terzo sistema.


Ri: Quando provi a unificare due forze opposte creando una terza alternativa, finisci con tre forze opposte. vedi anche : xkcd.com/927
JamesBarnett,

20

Ci sono molte ragioni per questo, e un po 'di storia è al fine di mettere le cose in prospettiva.

Ricorda che quando parliamo di "Linux" ciò a cui ci riferiamo generalmente è una delle molte diverse distribuzioni Linux . "Linux" è in realtà solo un kernel del sistema operativo.

L'obiettivo originale di Linux era quello di creare un sistema basato su Unix che potesse funzionare su PC (inizialmente il 386). Il primo passo è stato creare il kernel stesso. Mentre Linus Torvalds stava lavorando sul kernel Richard Stallman stava lavorando sul suo sistema Free Unix, nell'ambito del progetto GNU (GNU's Not Unix) . Per farla breve, i due in qualche modo convergevano perché GNU aveva le utilità associate (compilatore C / libreria / strumenti di compilazione, shell, editor di testo ecc.) Ma nessun core su cui eseguirlo, e Linux aveva il core ma nessuna utility per corri sopra per renderlo utile per le masse.

Questa convergenza divenne nota in qualche modo ufficialmente come GNU / Linux. Vedrai che molte distro si riferiscono ancora a se stesse come distribuzioni GNU / Linux.

A causa della natura libera e aperta di GNU / Linux, chiunque può prenderlo e creare un sistema in bundle secondo i propri gusti. Il risultato è stato che molti flussi diversi di metodi di configurazione diversi sono stati utilizzati per creare questi sistemi, il che ha avuto l'effetto collaterale di creare quasi tutti i diversi sistemi di gestione dei pacchetti per adattarsi a ciascuno di essi.

Ogni diverso sistema completo aveva i suoi seguaci forti che si sono uniti a loro nel corso degli anni, risultando in ciò che abbiamo oggi: una manciata di sistemi di gestione dei pacchetti ampiamente usati, profondamente radicati e stabili come RPM , APT / dpkg e Portage di Gentoo .

Esistono progetti, come Autopackage , che stanno tentando di risolvere il problema, ma la continua evoluzione dei vari sistemi di gestione dei pacchetti supportati significa che ci sono molti obiettivi mobili da seguire.

Ciò che alcuni produttori di software finiscono per fare è raggruppare i binari specifici e le copie delle dipendenze di cui hanno bisogno in un unico pacchetto di grandi dimensioni che funzionerà su sistemi specifici.


8
C'è di più. Anche se tutto il mondo unificato su rpm, non avresti ancora il pacchetto una volta, corri ovunque nel mondo previsto dall'OP. I pacchetti sono specifici per la maggior parte della loro distribuzione, poiché si basano su tutti gli altri pacchetti. L'unico modo per avere un mondo "pacchetto una volta, corri ovunque" sarebbe quello di avere non solo un singolo sistema di pacchetti, ma anche una sola distribuzione.
Cian,

9

Avere lo stesso formato di pacchetto non sarebbe comunque d'aiuto. Non puoi semplicemente usare lo stesso pacchetto in altre distribuzioni. Spesso non puoi nemmeno usarlo nella diversa versione della stessa distribuzione. E anche la creazione del pacchetto può avere gli stessi problemi.

Per installare un pacchetto è necessario soddisfare le dipendenze che si formano durante la creazione del pacchetto. Per compilare un pacchetto è necessario soddisfare le dipendenze di compilazione. E queste cose cambiano. Per poter implementare le modifiche, è più semplice supportare solo i pacchetti che è possibile modificare per funzionare dopo le modifiche.

Se tutte le dipendenze fossero uguali, non si tratterebbe di una distribuzione diversa o di una versione diversa della stessa distribuzione.


4
Non sarebbe possibile utilizzare le librerie di versioni e utilizzare le dipendenze di versione per risolvere il problema menzionato?
jldugger,

Dici che non puoi usare i debs da una versione su un'altra. Questo non è del tutto vero, ci sono eccezioni a quella regola. Se il pacchetto è principalmente Python, o se tutti i bit sono stati compilati staticamente, puoi farlo. Ci sono anche un paio di venditori che includono semplicemente tutte le dipendenze come parte del pacchetto, questo spreca spazio su disco, ma crea un pacchetto multipiattaforma.
Zoredache,

Anche se un pacchetto è arch: tutti o i linguaggi di scripting, ci sono differenze significative tra python2.4 e python2.6 che causeranno un pacchetto che funziona nella piattaforma per la quale è stato costruito, e falliranno su altri.
jldugger,

Sì, non si tratta solo di dipendenze delle biblioteche.
Iny

Alcuni degli aggiornamenti di Debian sono cambiati nel luogo in cui dovevano essere collocati i file o hanno fornito sistemi standardizzati per l'aggiornamento dei file di configurazione precedentemente gestiti manualmente. Questo tipo di cose è molto specifico per versione / distribuzione.
pjc50,

7

C'è un po 'di "sindrome non inventata qui", credo. Il sistema di packaging di Debian precede RedHat, eppure è superiore in molti modi, ma non vedrai mai il cambio RedHat. Invece, vedi molte persone che usano "apt-rpm" che tenta di darti alcuni dei vantaggi di apt con i file rpm.


4
apt-rpm è morto da un po 'di tempo (ultima versione oltre 1 anno e mezzo fa) ora e la maggior parte delle persone ha iniziato a usare yum. Lo stesso Yum offre molte caratteristiche interessanti che superano le offerte di apt ..
rasjani,

1
Non credo che il packaging di Debian sia migliore di quello di oggi Redhat. In passato Debian aveva un sistema di aggiornamento migliore , ma questo non sembra più vero, di gran lunga. Yum è diventato molto bravo. Ancora lento rispetto a Smart , ma molto gestibile.
niXar,

1
Tutto quello che so è che l'ultima volta che stavo lavorando su CentOS, eravamo molto più propensi a entrare nell'inferno delle dipendenze e il passaggio a apt-rpm ha risolto la maggior parte di questi problemi.
Paul Tomblin,

1
Il packaging RPM di Redhat soffre di EDS (sindrome da dipendenza estrema). Questo non è un commento su RPM ma piuttosto Redhat. Yum è una bella copia di apt-get plus apt-search e porta l'usabilità al mondo precedentemente arcano dell'invocazione della riga di comando RPM.
kmarsh

3
in realtà, i formati di pacchetto .deb e .rpm sono tecnicamente persino (ma IMO .deb ha una migliore gestione delle dipendenze, specialmente dipendenze con versione, fornisce, conflitti e pacchetti virtuali). apt-get è ciò che brilla a livello tecnologico, ma ciò che distingue davvero i pacchetti di Debian è l'insieme ben definito di politiche per gli sviluppatori che stabiliscono gli standard ai quali i pacchetti devono conformarsi. I pacchetti di Ubuntu ereditano questo in larga misura, e anche Ubuntu eredita anche la cultura degli sviluppatori che ne consegue.
Cas



2

Penso che Cletus, Wayne e Iny abbiano risposto abbastanza bene. Vorrei aggiungerlo davvero, non è un grosso problema. Lavoro in un ambiente misto in cui abbiamo Gentoo (portage), SUSE (rpm / zypper) e OpenBSD (pacchetti e porte). Installare pacchetti su uno di essi non è difficile e non mi interessa davvero quale formato stiano usando.

Dal punto di vista del software di packaging, non è nemmeno palesemente difficile. Che si tratti di Gentoo, una distro basata su RPM o una distro basata su deb, si riduce davvero ad avere ricette per la creazione del software e l'aggiunta di alcuni metadati. A condizione che il sistema di compilazione di ciò che si sta tentando di impacchettare non sia del tutto folle, di solito ci vuole poco più che scrivere uno script di shell glorificato per creare un pacchetto.


1

Bene ci sono sempre binari compilati staticamente in tar ball .... ;-)


1
AKA "Slackware".
Paul Tomblin,

Sfortunatamente ci sono problemi con i binari compilati staticamente che devono caricare le librerie di sistema in fase di esecuzione (in particolare nsswitch).
pjc50,

1

Non esiste una definizione di un'interfaccia binaria standard per "Linux" poiché si tratta solo di un kernel. Probabilmente il tuo stack software dovrà interfacciarsi con qualcosa di più del semplice kernel, presentando una sfida particolare nel mantenere un ABI standard tra centinaia di alberi di sorgenti disparate.

Per quanto riguarda i buoni strumenti di packaging, preferisco Debian GNU / Linux per il suo eccellente formato binario di packaging. Ha soddisfatto il 90% delle mie esigenze di strumenti e applicazioni standard. Il restante 10% viene generato dall'origine a causa dell'inclusione di componenti non liberi o dipendenze di librerie condivise con errori. Quando è necessario distribuire tali applicazioni, creo binari personalizzati per i cluster di produzione.


1

Per ottenere un build-once, esegui ovunque il formato del pacchetto senza forzare tutti a utilizzare la stessa distribuzione di cui hai bisogno di un paio di funzionalità importanti:

  • Denominazione dei pacchetti univoca a livello globale, in modo che due persone / distribuzioni non possano creare indipendentemente pacchetti diversi con lo stesso nome.

  • La possibilità di installare in parallelo diverse versioni di librerie quando i pacchetti hanno requisiti contrastanti. Una distribuzione può decidere quale versione di ciascuna libreria utilizzare e forzare tutti i pacchetti a utilizzare quella versione. Un sistema che funziona attraverso le distribuzioni deve essere più flessibile.

Zero Install fornisce entrambe queste funzionalità:

  • I nomi sono URI (ad es. Http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Solo il proprietario di un dominio può creare pacchetti all'interno di quello spazio dei nomi per impostazione predefinita.

  • Ogni versione di ciascun pacchetto va nella sua directory. Ogni applicazione vede solo quelle librerie di cui ha bisogno, con le versioni con cui è compatibile.

Ad esempio, l' applicazione Modifica dipende da Python <3 in questo modo:

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

Vedi anche: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Nota: sono uno sviluppatore 0install]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.