2016-03-25

BREAKING NEWS

На этой неделе сообщество Node.js подверглось могучим потрясениям.

Если вы старый пират, далёкий от всех этих новомодных штук, я накоротко перескажу.

Есть такая Node.js, для странных людей, которые почему-то решили что на Javascript можно писать программы. Ну, бог им судья: в конце концов, есть языки и похуже. Я, например, на этой неделе написал два батника и не жужжу.

У Node.js есть свой пакетный менеджер и репозитарий пакетов, npm. Потому что у всех нынче есть, чем нода хуже.

В репозитарии был пакет с именем kik за авторством какого-то Азера (имя, не обзывалка). А ещё с таким именем есть какой-то мутный instant messenger, про который никто не знал. И вот юристы этого мессенджера почему-то внезапно озаботились таким пересечением, и написали Азеру — переименуй, мол, а то у нас торговая марка и могут быть проблемы. Сами юристы считают что это не угроза, а попытка устаканить всё по-хорошему, но как-то нет.

Азер ответил в духе "я вас нибаюс", и юристы пошли со своими пожеланиями к администраторам npm. Администраторы оказались более сговорчивыми, и спорный пакет распубликовали / удалили. Видя такое свинство, Азер решил убрать все свои пакеты с npm — мол, не оправдали доверия. Этих пакетов оказалось ~270 штук (кто-то напрягся уже на этом месте, и правильно — чуть дальше дойдём до этой мякотки).

Среди них оказался пакет left-pad, который популярный, и его пропажа вызвала много боли у всех, у кого сломался билд. Было много суеты, пакет возвращали, докладывали недостающие версии и всё такое - в общем, буря негодования и всякая активность.

Теперь обещаная мякотка. Как же так вышло-то, что Азер в одно лицо наколбасил три сотни модулей? Ведь модуль — это серьёзная работа, много кода, поддержка, стандарты, API? Ответ прост: на ноде "модуль" запросто может оказаться размером в пять строк содержательного кода, а то и вовсе в одну. Вроде кусочков кода из perlfaq, которые старые пираты тупо копипастили себе в программы.

Реально, у них есть модуль для проверки "является ли аргумент массивом", модуль для "является ли аргумент положительным числом", а у этого последнего есть особливое примечание: мол, 0 мы тут положительным не считаем, а если вам надо чтоб считали - вот рядом модуль с нужной характеристикой. Пропавший left-pad, кстати, тоже был не сильно тяжеловесом: 11 строчек, а занимался выравниванием аргумента нулями/пробелами слева.

И чо, спросите вы, на весь модуль одиннадцать строчек? Нет, что вы! Там тесты, документация, комментарии, зависимости, версии! Со всей шелухой, да помноженное на количество скачиваний - один только left-pad за месяц сделал npm-у 100Gb трафика.

Это до чего же надо было людей напугать копипастой кода, чтобы до такого дошло. Или, я не знаю, разработчики уже забыли, что из интернета может что-то пропадать? И что и сам-то интернет может быть недоступен? Такие дела.

1 comment:

morbo said...

Из интернета может много чего пропадать, если оно где-то просто валяется на полу. Репозиторий - это заявка на то, что вещь не валяется на полу, а лежит всегда на одной и той же полочке. Многие оказались не готовы к тому, что вещь не окажется на полочке, да и сама полочка вдруг пропадёт.

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

Мне кажется, что от всего происходящего бедлама классики программирования вроде Дональда Кнута и Никлауса Вирта начинают вертеться ещё при жизни.

Subscribe / RSS