Какие гарантии предоставляет Ubuntu относительно совместимости двоичных файлов в разных версиях?

7

Я знаю, как правило, ответ «использовать PPA», но отдельно от этого ...

Что такое политика Ubuntu по совместимости между версиями Ubuntu для данной архитектуры? Например, если двоичный файл в пакете построен на 10.04 LTS и существуют те же библиотеки в Ubuntu 12.04 LTS, совместима ли Ubuntu с совместимостью? Существуют ли какие-либо рекомендации для независимых поставщиков программного обеспечения?

Я немного искал и нашел ссылки на совместимость с LSB, другими дистрибутивами и т. д. Я не нахожу документ, описывающий версии выпусков Ubuntu.

    
задан Matt Ingenthron 30.01.2013 в 15:31
источник

2 ответа

6

Что делает бинарный пакет несовместимым с библиотекой, это переполнение API или ABI.

  • Разрыв API происходит, когда интерфейс, предлагаемый библиотекой, изменяется таким образом, который больше не совместим с предыдущей версией. Примером является добавление или удаление аргумента из сигнатуры метода.

    Разрывы API обычно требуют, чтобы вы адаптировали свое программное обеспечение к новому интерфейсу и избегали как можно больше разработчиков библиотеки.

  • Разрыв ABI происходит, когда изменяются размер или выравнивание типов данных или изменяются соглашения низкого уровня (например, соглашения о вызовах). Примером является изменение типа параметра функции из int в size_t . Разрывы ABI обычно вводятся только исправлениями ошибок или изменениями в API.

    Разрывы ABI требуют, чтобы вы просто перекомпилировали свою программу с помощью новейших заголовков библиотек.

Сказав это, что нарушает правила Ubuntu для API и ABI?

  • Новые выпуски Ubuntu стараются всегда предлагать новейшее программное обеспечение, включая новейшие программные библиотеки.

  • Новые версии Ubuntu стараются быть максимально совместимыми по сравнению с предыдущими версиями. Например, Ubuntu одновременно предлагает GTK + 2 и GTK + 3.

  • После выпуска версии Ubuntu это заморожено в том смысле, что только важные исправления ошибок могут попасть в архив для этой версии (есть исключения и особые случаи, касающиеся этого правила, но такие исключения ограничены небольшим набором приложений).

  • Во всех обновлениях выпусков Ubuntu нет шансов на разрывы API. Это подразумевается политикой «только исправления».

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

  • Во всех основных выпусках Ubuntu могут быть введены как переходы API, так и ABI. Это потому, что пытается всегда предлагать новейшее программное обеспечение.

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

Это была самая техническая часть. Сказав это важное предисловие, мы можем бороться с этой проблемой с другой точки зрения: считайте, что 1. существует множество стандартов, 2. свободное программное обеспечение пытается уважать стандарты как можно больше насколько возможно, и 3. большинство библиотек (даже небольших и несущественных) очень маловероятно изменят их API / ABI между выпусками.

Итак, не стесняйтесь предлагать один бинарный пакет для нескольких версий Ubuntu, но следите за изменениями. Кроме того, не забудьте четко определить ваши зависимости пакета: например. не говорите, что это зависит от GTK + 3, но четко укажите диапазоны (от 3.X до 3.Y). Это поможет вашим пользователям предотвратить серьезные ошибки.

    
ответ дан Andrea Corbellini 30.01.2013 в 16:49
1

Возможно, я немного отпущу, но позвольте мне сказать, что мало я знаю об этом. Я буду использовать в качестве примера пакет nvidia-313 с версией 313.18-0ubuntu1~xedgers~raring2

На базовом уровне, когда пакет создается для конкретной версии Ubuntu, он удерживает:

  • Архитектура, для которой она была создана (например: 32 бит, 64 бит)
  • Для какого выпуска он был создан (например: 12.04, 12.10, raring, oneric ..)
  • Какая конкретная версия этого пакета (В моем примере выше вы можете увидеть raring2, что будет означать либо его 3-ю версию, если начинать с 0 или 2-го, если начинать с 1. Это, конечно, зависит от PPA I используется и что имел в виду сопровождающий).

Что все это гарантирует. Это гарантирует, что:

  1. Пакет будет работать «правильно» для этой конкретной версии Ubuntu с этой конкретной архитектурой. Предполагается, что библиотеки, которые могут быть использованы пакетом, не были вручную изменены или иным образом изменены в чистой среде.

  2. Пакет будет знать, для каких архитектур он является версией. Если он используется в другом, он даст вам предупреждение или просто не сможет установить.

  3. Большинство разработчиков PPA и основных репозиториев Ubuntu будут иметь версию пакета. Это может быть одна и та же версия (например, Nvidia 313 для 13.04, 12.10, 12.04 ...), но когда она была упакована, она использовала конкретные версии некоторых других пакетов (зависимости или предварительно зависит) и некоторые конкретные версии некоторых библиотек необходимых для этой версии Ubuntu. Следовательно, видя тот же пакет для разных версий Ubuntu.

Будет ли он работать, если он используется в будущей или более ранней версии, к той, для которой он был создан, а больше не нравится. В некоторых случаях это будет, но, по крайней мере, это даст вам предупреждение. В большинстве случаев это зависит от зависимостей упомянутого пакета, поскольку, если он использовал некоторые библиотеки, например, в 12.04, которые не изменились или немного изменились, когда 13.04, этот пакет может даже работать корректно на 13.04 (даже если он был сделан для 12.04), предполагая, что, по крайней мере, такая же архитектура позволяет избежать других проблем.

Чтобы получить конкретный вопрос, который вы делаете:

  

, если двоичный файл в пакете построен на 10.04 LTS и те же библиотеки   существуют в Ubuntu 12.04 LTS, совместима ли Ubuntu с совместимостью?

Если одни и те же библиотеки существуют как в 10.04, так и 12.04, с той же версией, одинаковой архитектурой (и с теми же предварительными зависимостями, версиями и т. д.), то я считаю, что пакет будет работать в обеих версиях Ubuntu. Теперь это маловероятно, так как скорость, с которой любой дистрибутив Linux меняется в течение нескольких месяцев, огромна.

Многие библиотеки меняются, происходит множество обновлений, добавлено много улучшений. Так, например, что-то, что не существовало в 10.04, например, могло существовать в 12.04, что избавит от необходимости, например, использовать меньше библиотек (например, если упакованные библиотеки использовали 12 библиотек в 10.04, но в 12.04 для этого потребовалось бы всего 2 выполнить той же цели). Это также учитывает изменения, внесенные в инструменты, которые собирают и упаковывают каждое приложение. Многие новые методы появляются каждый год, многие способы оптимизировать пакеты, сжимать их, читать их и т. Д.

Итак, основываясь на этом, я бы предположил, что чем больше времени существует между пакетом в разных версиях Ubuntu, тем меньше вероятность того, что пакет будет работать между обеими версиями Ubuntu.     

ответ дан Luis Alvarado 30.01.2013 в 16:41