Debian запрещает использование в пакетах секции со специфичными для вендоров патчами

Технический комитет проекта Debian принял решение запретить использование специфичных для вендоров наборов патчей в пакетах (секция vendor-specific). Наличие подобных патчей в пакете теперь будет приравниваться к наличию ошибки с необходимостью её устранения. После выхода Debian 10 «Buster» использование секции vendor-specific в пакетах будет запрещено.

Комитет пришёл к заключению, что пакеты, по разному ведущие себя в разных дистрибутивах, должны распространяться в отдельных исходных пакетах. Специфичные изменения также могут применяться с использованием существующих в dpkg условных операторов или применения патчей в процессе сборки, но не на уровне подстановки разных патчей на стадии распаковки исходного пакета. В качестве причины запрета также упоминается возникновение проблем с отладкой ошибок и несовместимость с используемыми проектом инструментами для обработки патчей, такими как dgit.

Секция vendor-specific позволяет определить альтернативный набор патчей, который будет применяться при распаковке исходного пакета в других дистрибутивах (напрмер, выполнение «dpkg-source -x foo.dscdpkg-source -x foo.dsc» в Debian и Ubuntu приведёт к применению разных наборов патчей к распакованным исходным текстам). Данная секция активно используется разработчиками Ubuntu для включения специфичных для Ubuntu исправлений, что позволяет поддерживать один общий пакет и для Debian и для Ubuntu. Подобный подход упрощает сопровождение производных от Debian дистрибутивов, так как не требует поддержки отдельных ответвлений пакетов с небольшими изменениями, которые можно распространять в основном Debian-пакете.

С другой стороны, на основе одного исходного пакета формируется несколько вариантов сборок, что приводит к путанице при выпуске обновлений и при разборе поступающих от пользователей уведомлений об ошибках. Обычно исходные пакеты в Debian поставляются в форме переносимых архивов (tar), разбирая подобный архив в другом дистрибутиве пользователь может полагать, что будет применён основной набор патчей, в то время как будет задействованы другие патчи из секции vendor-specific. Кроме того, в случае обновления только специфичных для вендоров патчей возникает замешательство, так как пакет не требует обновления в Debian, но при этом изменился.

Что касается отладки, она усложняется так как ошибка может проявляться только при активации дополнительных патчей, что требует определения какой вариант пакета приводит к проблеме и воссоздания условий его использования. Например, кто-то может попытаться использовать Debian для разбора ошибки в Ubuntu и загрузит для этого пакет из репозитория Ubuntu, но так как пакет общий с Debian он соберётся с другими патчами и поведение приложения будет отличаться от поведения в Ubuntu, но для разработчика это будет не очевидно.

Вместо секции vendor-specific для выделения специфичного для других дистрибутивов изменений предлагается использовать условные операторы, например, «#ifdef ubuntu». Подобные изменения видны в коде и при разборе изменений сразу позволяют понять логику применения предлагаемых исправлений. Кроме того, применение условных конструкций не создаёт проблем при использовании утилит, таких как dgit.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.