Linux-разработчик, соавтор графического протокола Wayland и окружения Sway Дрю Деволт опубликовал объявление в личном блоге:
«Я заплачу всем, кто удалит свой модуль из npm. Чем больше у модуля скачиваний и меньше строк кода — тем больше денег вы получите. Важное условие: модуль нужно удалить без предупреждения, чтобы пользователи проснулись с повреждённой сборкой».
Дрю предупредил, что итоговая сумма не может превышать 1 тысячи долларов и даже привёл схему расчёта:
Разработчик пообещал, что будет самостоятельно проверять количество скачиваний, размер пакетов, наличие накруток и искусственное сокращение кода. А ещё он предупредил, что может попросить владельца подождать с удалением модулей, чтобы «растянуть хаос от каждого удаления на несколько недель».
Те, кто дочитал объявление до конца и кликнул «Click here to apply», поняли, что это был розыгрыш. Дрю надеется, что шутка вызовет страх у разработчиков Node.js и у всех, кто перешёл на npm. По его мнению, сотни и тысячи зависимостей от разных поставщиков, которыми обросли веб-приложения, угрожают глобальной безопасности. Разработчики привыкли скачивать готовые модули для решения даже самых тривиальных задач, хотя могли бы справиться сами за несколько минут:
«Многие разработчики понятия не имеют, из чего состоят их деревья зависимостей. В большинстве из них тысячи записей, которые никогда не подвергались аудиту. Пора бы уже остановить это безрассудство».
Впервые об угрозе, которую несёт npm, заговорили в 2016 году. Тогда разработчик и автор 272 модулей Азер Кочулу удалил все свои пакеты из репозитория и заблокировал сборку в npm множества проектов. Больше всего проблем возникло из-за пакета left-pad: он содержал функцию, которая дополняет строку нулями и пробелами. Она использовалась в Node.js и Babel.
Надо отметить, что не все дочитали пост до конца. Вот как отреагировали пользователи Reddit:
«npm — это дерьмовая вещь. Но так его исправить точно не получится. Лучше провести аудит бесполезных пакетов, хоть он и потребует кучу времени. А просто вырывать ковёр из-под ног разработчиков, не предлагая альтернативы, — уж слишком токсично».
«С управлением пакетами в JavaScript действительно всё плохо. Деревья зависимостей не должны разрастаться до тысячи узлов.
Я думаю, так случилось из-за того, что у JavaScript нет стандартной библиотеки, как у Java, C#, C++ и так далее. Многие служебные функции переданы на аутсорсинг тысячам сторонних библиотек, каждая из которых заставляет разработчиков запускать свой миниатюрный пакет. Пришло время создать стандартную библиотеку для JavaScript с общим пространством имён. Правда, тут, скорее всего, возникнут проблемы с обратной совместимостью.
«Как найти Дрю в Reddit? Я готов скинуть немного наличных на его инициативу…
Я никого не троллю и подозреваю, что Дрю тоже. У меня уже началась бессонница из-за того, насколько ужасна экосистема JavaScript. Даже у моих простых приложений огромное дерево зависимостей. Люди заслуживают лучшего, чем тот мусор, который мы им продаём.
UPD: Неловко как-то вышло. Оказывается, это шутка. Посижу здесь в одиночестве с мыслью о том, что у меня есть родственная душа в лице Дрю… LOL».