Чому розробники Linux не можуть створити універсальний формат упаковки?


14

Вибір формату двійкового пакету постачальника визначається формою Закону Мерфі: усі дистрибутиви, якими ви не користуєтесь, мають пакунки. (Корралярі: не існує дистрибутива, який би задовольняв залежності розподілу вашого програмного забезпечення).

Це питання політики чи щось глибше, що ми не бачили появи формату пакетів "побудувати один раз, біжи куди завгодно"?


3
ви, здається, маєте лише поверхневе розуміння того, що відрізняє розподіли один від одного. Об'єднання пакетної системи все ще не означатиме, що пакети взаємозамінні між дистрибутивами. ваше запитання, таким чином, безглуздо.

3
хоп, чому ти не напишеш відповідь, яка дає менш поверхневий опис відмінностей між розподілами? Питання викладено наївно, але чекає глибокої технічної відповіді.
jldugger

Ви дійсно шукаєте "Стандартну базу Linux"
Білл Вайс

Чому розробники Windows також не можуть створити універсальний формат упаковки? Тут не зберігається Windows, але у них є стільки ж методів установки програмного забезпечення, і жодного сховища, як Linux, немає ... (це риторичне питання, btw)
Марк Хендерсон

Відповіді:


24

Здається, цитувати Джоела Спольського на цьому:

(До речі, для тих із вас, хто дотримується затаємничого, але політично зарядженого світу форматів каналів синдикації блогу, ви можете бачити те саме, що відбувається там. RSS роздроблений на кілька різних версій, неточних специфікацій та багатьох політичних боїв, і спроба очистити все, створивши ще один формат під назвою Atom, призвів до декількох різних версій RSS плюс одна версія Atom, неточних специфікацій та безлічі політичних боїв. Коли ви намагаєтесь об'єднати дві протилежні сили, створивши третю альтернативу, у вас лише три протилежні сили. Ви нічого не об'єднали і нічого не виправили.)

(наголос додано)

У вас є (принаймні) дві системи упаковки для Linux. Це насправді гарна річ. Єдина система просто створить третю систему.


Re: Коли ви намагаєтеся об'єднати дві протилежні сили, створивши третю альтернативу, ви просто в кінцевому підсумку три протилежні сили. дивіться також : xkcd.com/927
JamesBarnett

20

Причин для цього багато, і трохи історії - для того, щоб поставити речі в перспективу.

Пам'ятайте, що коли ми говоримо про "Linux", то, що ми зазвичай маємо на увазі, є одним із багатьох різних дистрибутивів Linux . "Linux" - це фактично ядро ​​операційної системи.

Початкова мета Linux полягала у створенні системи на базі Unix, яка працюватиме на ПК (спочатку 386). Першим кроком було створення самого ядра. Поки Лінус Торвальдс працював над ядром, Річард Сталлман працював над власною системою Free Unix, в рамках проекту GNU (GNU's Not Unix) . Щоб скоротити довгу історію, вони дещо зблизилися, оскільки GNU мав пов'язані з ними утиліти (інструменти для компіляції / бібліотеки / збирання, оболонки, текстові редактори тощо), але не було ядра для його запуску, а Linux мав ядро, але не утиліти для бігайте поверх нього, щоб зробити його корисним для мас.

Ця конвергенція стала офіційно відома як GNU / Linux. Ви побачите, що багато дистрибутивів все ще називають себе дистрибутивами GNU / Linux.

Через вільний та відкритий характер GNU / Linux кожен бажаючий міг підібрати його та створити пакетну систему відповідно до своїх специфічних смаків. Результатом було те, що для створення цих систем було використано багато різних потоків різних методів конфігурації, що спричинило побічний ефект від створення майже такої кількості різних систем управління пакетами, щоб вони вміщувались у кожну.

У кожної різної повної системи були свої сильні послідовники, які трималися з ними протягом багатьох років, в результаті чого ми маємо сьогодні: кілька широко використовуваних, глибоко вкорінених і стабільних систем управління пакетами, таких як RPM , APT / dpkg та Gentoo's Portage .

Є такі проекти, як Автопакет , які намагаються вирішити проблему, але безперервна еволюція різноманітної підтримуваної системи управління пакетами означає, що є багато рухомих цілей.

Деякі постачальники програмного забезпечення в кінцевому підсумку - це поєднання конкретних бінарних файлів та копій залежностей, які вони потребують, в один великий пакет, який працюватиме на конкретних системах.


8
Тут є більше, ніж це. Навіть якби весь світ уніфікований у скажіть rpm, у вас все одно не було б пакету жодного разу, бігайте в будь-який світ, який передбачає ОП. Пакети здебільшого характерні для їхнього дистрибуції, оскільки вони покладаються на всі інші пакунки. Єдиний спосіб мати "пакет один раз, бігай куди завгодно" у світі - це мати не лише єдину систему упаковки, а й лише один дистрибутив.
Cian

9

Ідентичний формат пакета все одно не допоможе. Ви просто не можете використовувати той самий пакет в інших дистрибутивах. Ви навіть не можете часто використовувати його в різних версіях одного і того ж дистрибутива. І навіть зі складанням пакету можуть виникнути однакові проблеми.

Щоб встановити пакет, вам потрібно відповідати залежностям, які утворюються під час складання пакету. Щоб скласти пакет, вам потрібно відповідати залежностям побудови. І ці речі змінюються. Щоб мати змогу реалізувати зміни, простіше підтримувати лише ті пакунки, які ви можете змінити для роботи після змін.

Якщо всі залежності були б однаковими, це не був би інший розподіл або інша версія одного і того ж розподілу.


4
Чи не вдалось би створити бібліотеки версій і використовувати залежності версій для вирішення проблеми, яку ви згадуєте?
jldugger

Ви згадуєте, що не можете використовувати debs з однієї версії на іншу. Це не зовсім вірно, з цього правила є винятки. Якщо пакет здебільшого python, або якщо всі біти, де статично складено, ви можете. Навіть є кілька постачальників, які просто включають усі залежності як частину пакету, це витрачає дисковий простір, але робить межплатформенний пакет.
Зоредаче

Навіть якщо пакети є аркою: всі або мови скриптів, є суттєві відмінності між python2.4 та python2.6, що спричинить пакет, який працює на платформі, для якої він був побудований, і вийшов з ладу для інших.
jldugger

Так, справа не лише в залежності від бібліотеки.
iny

Деякі з оновлень debian змінилися там, де слід було розмістити файли, або надали стандартизовані системи для оновлення конфігураційних файлів, якими раніше керували вручну. Такий варіант дуже специфічний для версії / дистрибутива.
pjc50

7

Я думаю, що "Синдром не придуманий тут". Система упаковки Debian передує RedHat, і все ж вона багато в чому перевершує, але RedHat ніколи не побачить перемикання. Натомість ви бачите багато людей, які використовують "apt-rpm", який намагається надати вам деякі переваги apt з rpm-файлами.


4
apt-rpm мертвий вже досить довгий час (останній реліз понад 1½ роки тому) зараз, і більшість людей перейшли використовувати yum. Сам Yum надає досить багато приємних функцій, які перебільшують прихильні пропозиції ..
rasjani

1
Я не вірю, що упаковка Debian є кращою, ніж сьогоднішня Redhat. Раніше Debian мав кращу систему оновлень , але, здається, це вже далеко не так. Yum вийшов дуже добре. Ще повільно порівняно зі Smart , але дуже керований.
niXar

1
Все, що я знаю, це те, що востаннє, коли я працював над CentOS, ми набагато частіше потрапляли в пекло залежностей, і перехід на apt-rpm виправляв більшість цих проблем.
Пол Томблін

1
Упаковка RPM Redhat страждає від ЕЦП (синдром крайньої залежності.) Це не коментар до RPM, а швидше Redhat. Yum - це приємна копія apt-get plus apt-пошуку та приносить зручність використання в раніше затаємниче світ виклику командного рядка RPM.
kmarsh

3
насправді формати пакетів .deb та .rpm приблизно технічно (але IMO .deb має кращу обробку залежностей, особливо залежних залежностей, надає, конфлікти та віртуальні пакети). apt-get - це те, що сяє на рівні техніки, але те, що насправді виділяє пакети debian, - це чітко визначений набір політик для розробників, який встановлює стандарти, яким пакунки повинні відповідати. Пакети ubuntu значною мірою успадковують це, а ubuntu також успадковує культуру розробника, яка йде разом з цим.
cas



2

Я думаю, що клетус, Уейн і Іні відповіли на це досить добре. Я хотів би додати, що це дійсно, це не велика справа. Я працюю в змішаному середовищі, де у нас є Gentoo (portage), SUSE (rpm / zypper) та OpenBSD (пакети та порти). Встановити пакети на будь-який з них не складно, і мені не дуже важливо, який формат вони використовують.

З точки зору пакувального програмного забезпечення, це теж не надто складно. Будь то Gentoo, дистрибутив на основі RPM або дистрибутив на основі деб, він дійсно просто зводиться до рецептів для створення програмного забезпечення та додавання деяких метаданих. За умови, що система побудови того, що ви намагаєтесь упакувати, не є абсолютно божевільним, як правило, для створення пакету потрібно трохи більше, ніж написання прославленого сценарію оболонки.


1

Ну, завжди є статично складені двійкові файли в кулях дьогтю .... ;-)


1
AKA "Slackware".
Пол Томблін

На жаль, є проблеми зі статично складеними бінарними файлами, які потребують завантаження системних бібліотек під час виконання (особливо nsswitch).
pjc50

1

Немає визначення стандартного бінарного інтерфейсу для "Linux", оскільки це лише ядро. Шанси, що вашому стеку програмного забезпечення потрібно буде поєднувати більше, ніж просто ваше ядро, що представляє особливу проблему підтримки стандартного ABI між сотнями розрізнених дерев.

Що стосується хороших інструментів упаковки, то я віддаю перевагу Debian GNU / Linux, оскільки це відмінний бінарний формат упаковки. Він обслуговував 90% моїх потреб у стандартних інструментах та програмах. Решта 10% створюється з джерела завдяки включенню невільних компонентів або баггі-залежних бібліотечних залежностей. Коли ці програми потрібно розгорнути, я будую власні бінарні файли для виробничих кластерів.


1

Щоб отримати вбудований раз, запустіть будь-який формат пакета, не змушуючи всіх використовувати один і той же дистрибутив, вам потрібно пару важливих функцій:

  • Унікальне глобальне найменування пакунків, щоб двоє людей / дистрибуторів не могли самостійно створювати різні пакети з однаковою назвою.

  • Можливість паралельної установки різних версій бібліотек, коли пакети мають суперечливі вимоги. Розподіл може вирішити, яку версію кожної бібліотеки використовувати, і змусити всі пакети використовувати цю версію. Система, яка працює в різних дистрибутивах, повинна бути більш гнучкою.

Zero Install надає обидві ці функції:

  • Назви - це URI (наприклад, http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Лише власник домену за замовчуванням може створювати пакети в цій області імен.

  • Кожна версія кожного пакета знаходиться у власному каталозі. Кожна програма бачить лише ті бібліотеки, які їй потрібні, з версіями, з якими вона сумісна.

Наприклад, програма редагування залежить від Python <3, як це:

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

Дивіться також: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Примітка: я розробник 0встановлення]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.