Какие гарантии предоставляет Ubuntu в отношении бинарной совместимости между выпусками?

Я знаю, что в общем случае ответ «использовать PPA», но отдельно от этого ...

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

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

7
задан 30 January 2013 в 20:16

2 ответа

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

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

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

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

  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.

1
ответ дан 30 January 2013 в 20:16

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

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

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

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

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

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

  • В новых выпусках Ubuntu всегда предлагается новейшее программное обеспечение, включая новейшие библиотеки программного обеспечения. [ +1117]

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

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

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

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

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

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

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

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

0
ответ дан 30 January 2013 в 20:16

Другие вопросы по тегам:

Похожие вопросы: