dimhold.by
← Статьи

Установка grunt кладёт мне на диск код 32 человек

Обещание npm это мелкие кубики. Напиши модуль, который делает 1 вещь, опубликуй, дай другим собирать. Я повторяю это обещание уже несколько месяцев и ни разу не посчитал, что одна установка на самом деле кладёт мне на диск.

Реестр хранит дату публикации каждой версии, поэтому можно спросить, как пакет выглядит на сегодня, а не на тот момент, когда я это запускаю. Я взял 6 корней, которыми пользуюсь, свёл каждый к последней версии, вышедшей не позже сегодняшнего дня. Дальше обошёл имена зависимостей до самого низа.

что приносит одна установка, на сегодня пакетов людей request 1 1 connect 6 6 mocha 7 3 express 8 7 socket.io 12 12 grunt 51 32
Разрыв между самым маленьким и самым большим деревом это 51 к 1. Request, клиент, которым все ходят наружу, состоит из одного файла и ничьего чужого кода.

Grunt выделяется: 51 пакет от 32 человек. Express, про который я бы подумал, что он тяжёлый, приносит 8. Request не приносит вообще ничего. Это 1 пакет без зависимостей и с одним сопровождающим, то самое, за чем я тянусь всякий раз, когда программе нужно сходить по HTTP.

Обещание верно

По шести деревьям набирается 67 разных пакетов. У 40 из них, то есть у явного большинства, не объявлено ни одной зависимости. Медианный пакет этого графа не зависит ни от чего, самый тяжёлый зависит от 16 других.

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

Часть, которую на слайд не выносят

те же 67 пакетов, посчитанные по людям 56 из 67 с одним сопровождающим, 84 процента 26 из 67 принадлежат троим из 40 человек isaacs 10 tjholowaychuk 8 substack 8 дальше indexzero с шестью и felixge с пятью
Граф написали 40 человек. Трое из них написали 39 процентов. За 84 процентами пакетов не стоит никого, кроме автора.

У 56 пакетов из 67 ровно один сопровождающий. Второго человека с правом публиковать нет, а значит пакет отстоит на один потерянный пароль или один потерянный интерес от того, чтобы застрять. Это не гипотетическое свойство схемы. Это текущее состояние графа под шестью обычными установками.

И разнообразия в графе меньше, чем обещают 40 имён. isaacs стоит на 10 пакетах из 67, tjholowaychuk на 8, substack на 8. Втроём они держат 26 пакетов из 67, то есть 39 процентов всего, что шесть установок положили мне на диск.

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

Чего я не проверял

Диапазоны версий. Я обходил имена пакетов, а не диапазоны из списков зависимостей, поэтому посчитанное дерево это форма графа, а не точный набор архивов, которые скачает конкретная установка. Для счёта разных пакетов и разных людей это ничего не меняет. Для чего-то ещё поменяло бы.

Списки сопровождающих тоже не идеально исторические. У 63 пакетов из 67 список лежит внутри опубликованной версии, то есть это снимок того дня. У остальных 4 его нет, поэтому там подставлен список, который реестр показывает сейчас, а он мог с тех пор поменяться.

И я не открыл ни одного архива. То есть знаю, сколько пакетов приезжает и от кого. И не знаю ничего про то, сколько это кода.

Узкое утверждение в том, что обе половины обещания теперь померены. Мелкие кубики настоящие: большинство этих пакетов не зависит ни от чего. Цена мелких кубиков тоже настоящая: 6 установок приносят 67 пакетов, а за 84 процентами из них стоит ровно один человек.