Как Fedora и Debian решают проблему зависимостей в дистрибутивах?

С каждым годом в дистрибутивах Linux появляется всё больше зависимостей. В Ruby или Perl зависимости есть, но в адекватных рамках. А вот в проектах на JS нормой стало делить всё на маленькие библиотеки с одной функцией. В NPM пакетов уже больше миллиона, а приложения работают через зависимости от зависимостей. В итоге Linux плохо дружит JavaScript-приложениями.

Обновления пакетов с зависимыми библиотеками ломает другие пакеты, а привязка к версиям делает всё ещё хуже. Одной библиотеке для стабильной работы нужна одна версия зависимости, другой — другая. На выходе получается, что для работы приложения нужна версия, которая не соответствует требованиям стабильности дистрибутива.

Если зафиксировать версии пакетов, то они быстро устареют. Если прекратить их поддержку, это отразится на других пакетах и проблем станет ещё больше. Из-за перекрёстных зависимостей некоторые библиотеки Node.js нельзя удалить, что значит нельзя удалить и программы.

Проект Fedora прекратит формировать отдельные пакеты с библиотеками по умолчанию в проектах на Node.js. В Fedora 34 для Node.js будут поставлять базовые пакеты с интерпретатором, первичными библиотеками, заголовочными файлами, бинарными модулями и инструментами для управления пакетами.

В использующих Node.js приложениях в Fedora можно встраивать все зависимости в один пакет без дробления библиотек. Это даёт избавиться от кучи мелких пакетов и сделать их сопровождение проще. Инфраструктура не будет конфликтовать с библиотеками и привязываться к их версиям: в пакеты будут входить уже протестированные сопровождающими версии.

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

Аналогичную модель обсуждают и в Debian: кроме Node.js там ещё планируют создавать целостные пакеты для Kubernetes и проектов на PHP и Go. К конечному итогу команда не пришла, но она понимает, что проблема есть и дальше всё будет только хуже.

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

Если у сопровождающего не получится решить проблему с gsa, то его придётся просто удалить из Debian. А со временем таких проблем может стать ещё больше.

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

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