dimhold.by
← Артыкулы

Амаль палова спамповак самых папулярных пакетаў npm прыпадае на пакеты з адным мейнтэйнерам. Я паглядзеў, хто ім плаціць

У студзені аўтар colors і faker наўмысна зламаў абодва пакеты. faker 6.6.6 выйшаў без кода, а colors пачаў бясконца друкаваць “LIBERTY LIBERTY LIBERTY”. Гэта закранула ўсіх, у каго ўсталёўка падцягнула новую версію. Яшчэ ў лістападзе 2020 года ён напісаў на GitHub, што бясплатнай працы ад яго больш не будзе. У трэдах, якія я прачытаў, пераважна спрачаліся пра тое, ці меў ён на гэта права. У мяне было іншае пытанне і адказу на яго не было. Хто падтрымлівае пакеты ў маім node_modules і ці плаціць ім хто-небудзь?

З версіі 6.13 у 2019 годзе npm пасля ўсталёўкі друкуе “N packages are looking for funding”. Я заўсёды прагортваў гэты радок. Таму вырашыў палічыць, пакуль год не скончыўся.

Што я ўзяў

Спіс я ўзяў з npm-high-impact 1.1.0 ад лістапада 2022 года. Яго аўтар сабраў пакеты, якія падыходзяць пад азначэнне high impact, якім карыстаецца npm. Я ўзяў з яго частку з мільёнам спамповак на тыдзень і больш, гэта 4366 пакетаў. Для кожнага ўзяў самую новую стабільную версію, апублікаваную да 28 снежня 2022 года. З гэтай версіі я ўзяў акаўнты npm з правам яе публікаваць і README з яе тарбола. Так што README паказвае тое, што аўтары пісалі ў гэтым годзе. Спампоўкі я браў з API npm за перыяд з 1 студзеня па 27 снежня 2022 года. Для 4 пакетаў з імёнамі з 2 літар (yn, pn, rx, is) API аддае нуль. Засталося 4362, разам у іх 2,0 трыльёна спамповак.

Да першага ліку я запісаў, чаго чакаю. Больш за палову спамповак даюць пакеты з 1 або 2 мейнтэйнерамі. Менш за траціну пакетаў просяць грошай. А на Open Collective, дзе грошы, атрыманыя праектам, бачныя публічна, выходзіць менш за 1 долар на мільён спамповак.

Хто іх трымае

У медыяннага пакета ў спісе 2 мейнтэйнеры. У 2086 пакетаў, гэта 48% спіса, роўна 1. Яны даюць 47% усіх спамповак. Пакеты з 1 або 2 мейнтэйнерамі даюць 65% спамповак, так што першае чаканне пацвердзілася.

1 мейнтэйнер 47% 48% 2 17% 18% ад 3 да 5 25% 23% 6 і больш 10% 11% доля спамповак доля пакетаў
Спампоўкі з 1 студзеня па 27 снежня 2022 года, разам 2,0 трыльёна. Акаўнт не заўсёды адзін чалавек.

Потым я лічыў акаўнты, а не пакеты. Выбіраў іх прагна: спачатку акаўнт, пакеты якога даюць найбольш спамповак, потым той, які дадае найбольш новых і гэтак далей. Пакет лічыцца пакрытым, калі абраны хоць адзін з яго мейнтэйнераў. 3 акаўнты пакрываюць чвэрць усіх спамповак, а 12 акаўнтаў хапае на палову. Адзін акаўнт, sindresorhus, з’яўляецца мейнтэйнерам 274 пакетаў з 14% усіх спамповак. На 222 з іх ён адзіны. Сярод іх has-flag і find-up.

Акаўнт npm гэта не чалавек. 170 пакетаў з 1 мейнтэйнерам належаць “types”, боту, які публікуе DefinitelyTyped. “fb” публікуе пакеты React і Jest. Медыяннаму пакету з 1 мейнтэйнерам 7 гадоў. 1579 такіх пакетаў старэйшыя за 5 гадоў. Прынамсі ў 460 з гэтых 1579 у гэтым годзе выйшла новая версія.

Што яны пішуць

У 731 пакета ў package.json ёсць поле funding. Менавіта яго чытаюць npm fund і радок пасля ўсталёўкі. Разам са спасылкамі на спонсарства ў README выходзіць 812 пакетаў, 19% спіса і 26% спамповак. Другое чаканне пацвердзілася. Часцей за ўсё спасылаюцца на GitHub Sponsors, гэта 478 пакетаў, на Open Collective 302. Яшчэ 205 README згадваюць падпіску Tidelift. Tidelift прадае кампаніям падпіску, таму я не лічыў яе просьбай аб грошах.

Я шукаў у README словы пра людзей, якія стаяць за кодам: volunteers, free time, spare time, hobby project, not backed by a company. Мой спіс слоў знайшоў 13 пакетаў з 4362. Калі я прачытаў іншыя README, убачыў, што спіс слоў прапускае частку. ioredis, напрыклад, піша, што праца над адкрытым кодам цяжкая і забірае шмат часу. Так што іх не менш за 13 з 4362. Вось некаторыя.

core-js, 2,1 мільярда спамповак у гэтым годзе, адзін мейнтэйнер. Над тэкстам стаіць загаловак “As advertising: the author is looking for a good job”, а далей:

core-js isn’t backed by a company, so the future of this project depends on you.

webpack:

Most of the core team members, webpack contributors and contributors in the ecosystem do this open source work in their free time.

msw, створаны ў 2018 годзе, 61 мільён спамповак:

Despite that, this library remains a hobby project maintained in spare time

У тым жа сказе напісана, што праект не можа аплаціць нават аднаму ўдзельніку працу на поўную стаўку.

У core-js ёсць яшчэ скрыпт postinstall, які друкуе тую ж просьбу ў тэрмінал. Я ўсталяваў пакет праз npm 6.14 і просьба з’явілася. Праз npm 8.19 яе не было, бо npm 7 і навейшыя хаваюць вывад скрыптоў усталёўкі. Радок пра funding надрукавалі абедзве версіі.

Колькі грошай відаць

Open Collective адкрыта публікуе ўсе паступленні і выдаткі кожнага калектыву. Я спытаў у яго API, колькі атрымаў у 2022 годзе кожны калектыў, на які спасылаюцца гэтыя пакеты.

Першая сума склала амаль 2 мільёны долараў і выглядала занадта добра. Потым я ўбачыў у спісе airbnb з 200 000 і salesforce з 44 000. Гэта фонды, якія грошы даюць. Іх лагатыпы стаяць у спісе спонсараў у README eslint, а мой рэгулярны выраз браў любую спасылку на Open Collective. Я пакінуў толькі акаўнты з тыпам COLLECTIVE і прыбраў 3 спасылкі, якія паказваюць на чужы праект у прыкладзе. Пасля гэтага выйшла 1,65 мільёна долараў на 75 калектываў. На іх спасылаюцца 286 пакетаў з 5% усіх спамповак.

Гэта 16 долараў на мільён спамповак. Я чакаў менш за 1, так што тут памыліўся больш чым у 10 разоў.

$0 $100 000 $200 000 атрымана долараў у 2022 першыя 5: 53% усяго babel, eslint, socketio, webpack, nest core-js $11 377 ніжнія 38 разам: $23 824
Толькі акаўнты тыпу калектыў. Фонды і кампаніі са спісаў спонсараў не лічацца.

5 найбуйнейшых калектываў (babel, eslint, socketio, webpack, nest) атрымалі 53% грошай. 38 самых маленькіх разам атрымалі 23 824 долары за ўвесь год, а 25 калектываў атрымалі менш за 1000 долараў кожны. Калектыў core-js атрымаў 11 377 долараў. На яго спасылаюцца 3 пакеты, у якіх разам 3,8 мільярда спамповак. Гэта каля 3 долараў на мільён.

Пакетаў з 1 мейнтэйнерам на гэтай карціне амаль няма. Толькі 3% іх спамповак прыпадае на пакеты, якія спасылаюцца хоць на нейкі калектыў. Грошай увогуле просяць 481 з 2086, з іх 386 праз GitHub Sponsors. GitHub Sponsors сумы не публікуе, таму для гэтых пакетаў ліку ў мяне няма.

Чаго я не правяраў

Грошы ад працадаўцаў. Некаторым мейнтэйнерам за гэтую працу плаціць працадаўца. Напрыклад, каманда npm CLI у GitHub: яе акаўнты darcyclarke і nlf таксама ёсць у спісе. npm такія грошы не паказвае, а ў README я іх не шукаў.

Сумы на GitHub Sponsors і Patreon не публічныя, я лічыў толькі спасылкі. Спампоўкі ўключаюць CI і люстэркі, гэта не людзі. Грошы калектыву ідуць на ўвесь праект. Я дзяліў іх толькі на спампоўкі пакетаў з майго спіса, якія на яго спасылаюцца, таму долары на спампоўку хутчэй завышаныя. MUI у суму не трапіў: яго README спасылаецца на адрас, які API не знайшоў.