Азбука переносимости: введение
Как и обещал, начинаю серию постов по переносимости свободного ПО, которую когда-нибудь соберу в что-то типа энциклопедии.
Уже без малого 15 лет я занимаюсь созданием и поддержкой портов FreeBSD, и с сожалением вынужден констатировать что сложность создания портов/пакетов свободного ПО за это время значительно не уменьшилась. В чем причина?
Ведь, с одной стороны, во FreeBSD активно развивается сам фреймворк
портов, появляются новые инструменты, улучшается pkg
. С другой,
в СПО мире появляются качественные инструменты сборки, улучшается
взаимодействие между разработчиками и мантейнерами, упрощается приём
изменений в апстрим, растёт число независимых пакетных репозиториев
(а значит, потенциальных источников этих изменений). Но несмотря
на это всё ещё нельзя просто взять и написать сценарий сборки пакета
в виде минимального набора необходимых атрибутов:
- Название пакета
- Версия
- URL дистрибутива с исходниками
- Список зависимостей
- Тип системы сборки
Серьёзно, я пока не встречал ни одного проекта которому бы этого хватило. Обязательно понадобится что-то изменить, что-то пропатчить, добавить или убрать каких-то флагов, что-то доставить руками. И всё бы ничего если бы требовались только FreeBSD-специфичные изменения - всё-таки система во многих местах отличается от мейнстримного Linux под которым пишут софт, но большинство проблем никак не связаны с FreeBSD, и упомянуты в том числе в гайдлайнах по пакетированию основных дистрибутивов Linux.
Вывод напрашивается простой - несмотря на улучшение инструментов в сообществе пока не появилось культуры оформления проектов, репозиториев с кодом и сценариев сборки, равно как и представления о различиях между системой автора и целевыми системами и понимания требований возникающих при создании пакетов.
Попытаюсь использовать накопленный за эти 15 лет опыт чтобы улучшить ситуацию, задокументировав частые заблуждения и ошибки, ухудшающие переносимость ПО и мешающие опакечиванию.