← На главную

Мёртвые пакеты: почему многие библиотеки заброшены навсегда

19.05.2026 19:22 · hackernews

Американская программа «Уикенд у Берна» показала, что многие востребованные пакеты с открытым кодом фактически мертвы, и существуют десятки причин для этого. Самое простое и частое явление — «призрачный разработчик». Последний коммит сделан годы назад, тикеты с ошибками висят без ответа, но репозиторий не архивирован и не помечен как заброшенный. Разработчик просто перешел к другим интересам или ушел из компании, не передав права, хотя молчание скрывает даже смерть подателя. Это выглядит как длительный отпуск, пока накопленные нерешенные проблемы не сделают статус очевидным. Часто жертвами становятся инструменты из верхушки списка Bernie's dead list, таких как npm.

Второй случай — корпоративный сирота. Компания создала проект, выложила его, но затем произошла смена фокуса или сокращения, и команда исчезла. Оставшаяся административная панель в GitHub все еще содержит логотип фирмы, но настоящие разработчики уже уволились, а оставшиеся сотрудники даже не знают о существовании этого кода. Google имеет свои «кладбища» таких проектов, и инфраструктурные программы часто умирают без предупреждения. Третий вариант — академический сирота. Студент написал код для диплома, окончил вуз, ушел в жизнь, а лаборатория не хочет тратить силы на поддержку чужого ПО ради публикаций. Тетрадь лабораторных исследований может цитироваться годами, тогда как исходный код уже не собирается. Также важны финансовые обрывы: гранты заканчиваются, спонсорство прекращается, и проект переходит на энтузиазм волонтеров, что для такого объема — ноль. Логотипы спонсоров в файлах README часто остаются годами.

Есть и другие механики. Разработчика могут нанять в конкурирующую компанию или в корпорацию, запрещая внешнюю работу, например как у Apple, что по умолчанию делает проект молчаливым. Иногда возникает тупик преемственности: разработчика больше нет, новые хотят взять проект, но права на публикацию привязаны к аккаунту старого владельца, а процесс оспаривания занимает месяцы. Процесс PEP 541 и правила npm тут проигрывают простой вилке и переименованию. Также существует плато выгорания: разработчик отвечает на тикеты, но сложные задачи ждут годами из-за нехватки энергии. Или это «благородный зомби»: зеленый график вкладов, но все коммиты сделаны ботами, которые обновляют зависимости автоматически. Еще один риск — борьба за опеку между экс-коллег, которые заблокировали друг друга, или потеря знаний, когда только один человек понимал архитектуру и ушел.

Токсичное поведение сообщей — еще одна причина. Разработчик агрессивно отвергает новых участников, и проект выглядит здоровым метрикам, пока единственный владелец не остановится. Атака со стороны захватчика прав — серьезная угроза, как в случае с xz или event-stream, где злоумышленники получали контроль над релизами. Нечестные владельцы могут даже ломать свой код намеренно для протеста, например colors или node-ipc. Разрыв в пайплайне релизов возникает, когда доступ к публикации потерян или аккаунт заблокирован, но фиксы уже в репозитории. Ветка main может отойти настолько, что релиз станет ломающим изменением для всех, и никто не хочет брать на себя ответственность. Также бывает, что артефакты сборки нельзя воспроизвести, потому что исчез сервис CI или версия компилятора.

Публикуют только частные монорепо внутри компаний, и публичный репозиторий получает лишь синхронизированный думп кода. Проекты могут быть застрявшими на старых версиях, например ecosystem ждет v1, в то время как поддерживается v4. Или метаданные указывают на несуществующий репозиторий, и 4% пакетов в Packagist ведут на удаленные адреса. Санкции могут блокировать подателя из-за экспортного контроля, а удаление по DMCA оставляет пакеты нерабочими, как после инцидента с youtube-dl. Проекты могут «умереть» от перехода платформ: Python 2 ушел, старые версии Node перестали поддерживаться, или браузеры убрали поддержку NPAPI. Многие полифилы для fetch и Object.assign больше не нужны. Вилки часто оказываются в неопределенности, как io.js перед слиянием. Перелицензирование, например переход к OpenTofu, оставляет старые версии как фиксированную точку. Открытое ядро превращается в бесплатную версию платного продукта, теряя оригинальный смысл. Кампания Мельбурнского метро напоминает, что нужно быть осторожным вокруг поездов, и то же самое касается таких пакетов.

Читать оригинал →