Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Культура npm создает серьезную опасность для защиты программного обеспечения в мировых масштабах. Это крайне безответственно – позволять деревьям зависимостей разрастаться до таких размеров, что в них входят тысячи зависимостей, связывающих вас с производителями, о которых вы никогда не слышали и которых едва ли могли критически оценить. И всё это служит для разрешения простых задач, с которыми и без этого можно было бы справиться в два счета, или, если всё как следует обдумать, вообще обойтись без них.
Нужно что-то придумать, чтобы остановить это безумие, но что? У меня есть идея. Помните историю с left-pad? Неплохо бы устраивать такое почаще.
Предлагаю вознаграждение настоящими деньгами всем, кто удалит свой модуль npm. Точная сумма будет рассчитываться по приведенной формуле; она предполагает, что модули с большим количеством скачиваний и малым числом строк кода будут оцениваться выше. Есть еще одно условие: модуль вы должны удалить без предупреждения, чтобы все, кто от него зависят, просто проснулись и обнаружили поломанный билд.
Давайте рассмотрим isArray в качестве примера. Там всего четыре строки кода.
Если учесть, что число скачиваний составляет 51 миллион, получается итоговая сумма в 710 $.
Чтобы избежать мошенничества, согласовывать каждое удаление мы должны заранее. Я ознакомлюсь с вашим модулем, чтобы убедиться, что он соответствует требованиям и проверить, нет ли там чего подозрительного – например, накрутки в скачиваниях или минификации в коде. Удалять модуль можно только после того, как мы обо всем договоримся, иначе я уже не смогу узнать число скачиваний и строк.
Возможно, я попрошу вас немного подождать с удалением, чтобы между исчезновениями модулей и сопутствующими вспышками хаоса проходило по несколько недель – это нужно, чтобы добиться максимального эффекта. И наконец, сумма выплат в каждом случае будет составлять не более 1000 $, а то жить мне тоже на что-то надо.
Ну что, по рукам? Подать заявку можно здесь.
Ну ладно, шутки в сторону – это несерьезный пост. Я не собираюсь платить вам деньги за удаление модулей npm и погружать экосистему Node в мрачную эпоху смуты тоже не планирую. Тем более что это все равно не сработало бы.
Но я надеюсь, что сама мысль породила страх в сердцах многих разработчиков на Node, которые читали этот текст, а также представителей тех сообществ, которые последовали их примеру. Что вы будете делать, если одна из зависимостей исчезнет? Что если кто-нибудь изучит минифицированный код у вас на сайте, откопает какую-нибудь богом забытую зависимость и подкупит людей, которые занимаются поддержкой?
Большинство разработчиков на Node не имеют представления, что творится у них в зависимостях. Многие из этих деревьев содержат тысячи элементов и никогда не проходили ревизию. Это безответственный подход и с этим нужно что-то делать.
В большей части моих проектов менее ста зависимостей; немало и таких, где их меньше десяти. В некоторых зависимостей нет вообще. Это не случайность. Как ни печально, платить приходится за всё, поэтому введение зависимости – это серьезное решение, которое обсуждается всей командой. Новая зависимость подвергается проверке, ее здоровье и прогнозы на будущее получают оценку, и в дальнейшем разработчики не жалеют времени на то, чтобы повторять этот процесс и при необходимости менять курс.
Нужно что-то придумать, чтобы остановить это безумие, но что? У меня есть идея. Помните историю с left-pad? Неплохо бы устраивать такое почаще.
Предлагаю вознаграждение настоящими деньгами всем, кто удалит свой модуль npm. Точная сумма будет рассчитываться по приведенной формуле; она предполагает, что модули с большим количеством скачиваний и малым числом строк кода будут оцениваться выше. Есть еще одно условие: модуль вы должны удалить без предупреждения, чтобы все, кто от него зависят, просто проснулись и обнаружили поломанный билд.
Давайте рассмотрим isArray в качестве примера. Там всего четыре строки кода.
var toString = {}.toString;
module.exports = Array.isArray || function (arr) {
return toString.call(arr) === '[object Array]';
};
Если учесть, что число скачиваний составляет 51 миллион, получается итоговая сумма в 710 $.
Чтобы избежать мошенничества, согласовывать каждое удаление мы должны заранее. Я ознакомлюсь с вашим модулем, чтобы убедиться, что он соответствует требованиям и проверить, нет ли там чего подозрительного – например, накрутки в скачиваниях или минификации в коде. Удалять модуль можно только после того, как мы обо всем договоримся, иначе я уже не смогу узнать число скачиваний и строк.
Возможно, я попрошу вас немного подождать с удалением, чтобы между исчезновениями модулей и сопутствующими вспышками хаоса проходило по несколько недель – это нужно, чтобы добиться максимального эффекта. И наконец, сумма выплат в каждом случае будет составлять не более 1000 $, а то жить мне тоже на что-то надо.
Ну что, по рукам? Подать заявку можно здесь.
Ну ладно, шутки в сторону – это несерьезный пост. Я не собираюсь платить вам деньги за удаление модулей npm и погружать экосистему Node в мрачную эпоху смуты тоже не планирую. Тем более что это все равно не сработало бы.
Но я надеюсь, что сама мысль породила страх в сердцах многих разработчиков на Node, которые читали этот текст, а также представителей тех сообществ, которые последовали их примеру. Что вы будете делать, если одна из зависимостей исчезнет? Что если кто-нибудь изучит минифицированный код у вас на сайте, откопает какую-нибудь богом забытую зависимость и подкупит людей, которые занимаются поддержкой?
Большинство разработчиков на Node не имеют представления, что творится у них в зависимостях. Многие из этих деревьев содержат тысячи элементов и никогда не проходили ревизию. Это безответственный подход и с этим нужно что-то делать.
В большей части моих проектов менее ста зависимостей; немало и таких, где их меньше десяти. В некоторых зависимостей нет вообще. Это не случайность. Как ни печально, платить приходится за всё, поэтому введение зависимости – это серьезное решение, которое обсуждается всей командой. Новая зависимость подвергается проверке, ее здоровье и прогнозы на будущее получают оценку, и в дальнейшем разработчики не жалеют времени на то, чтобы повторять этот процесс и при необходимости менять курс.