# Адзінаццаць радкоў JavaScript зламалі інтэрнэт. Адмена публікацыі.

Published: 2026-09-13

22 сакавіка 2016 г., 21:30 UTC: распрацоўшчык адмяняе публікацыю ўсіх 273 сваіх пакетаў npm пасля таго, як npm перадае назву пакета "kik" кампаніі Kik, прыкладанню для абмену паведамленнямі, чый патэнтны агент абяцаў "юрыстаў, якія стукаюцца ў вашыя дзверы". Адзін з 273 – гэта left-pad: адзінаццаць радкоў, якія ставяць прабелы перад радком, спампаваныя 2,5 мільёна разоў на месяц. За некалькі хвілін зборкі Babel, React і Node выходзяць з ладу па ўсім свеце, сотнямі ў хвіліну. Форк з'яўляецца праз дзесяць хвілін і нічога не мяняе, таму што Babel цягне left-pad праз нумары радкоў, што дакладна фіксуе 0.0.3. У 23:55 npm аднаўляе выдаленую версію з рэзервовай копіі — першая "адмена адмены публікацыі" ў гісторыі рэестра — і праз тыдзень уводзіць правіла 24-гадзіннай адмены публікацыі. Постфактум, з уласнага акаўнта npm і апублікаванага Kik ланцужка электронных лістоў: рэестр, які дазваляў любому аўтару выдаляць любую версію без праверкі залежных, транзітыўнае дрэва вырашалася ў рэжыме рэальнага часу пры кожнай устаноўцы, без файла блакіроўкі па змаўчанні. Віна Git: 60 npm / 25 Kik / 15 звычка залежнасці. Вердыкт па выпраўленні: SHIP IT.

Canonical: https://thedailydiff.dev/be/video/2026-09-13-left-pad/

## Што ахоплівае гэта відэа

- 11 сакавіка: патэнтны агент Kik просіць Азера Кочулу перайменаваць \`kik\`; праз гадзіну: юрысты "стукаюцца ў вашыя дзверы і закрываюць вашыя ўліковыя запісы"; Азер: $30,000; Kik адпраўляе электронныя лісты ў службу падтрымкі npm
- 18–20 сакавіка: генеральны дырэктар npm перадае назву Kik ("можна было б разумна чакаць, што яна будзе звязана з kik.com"); Азер просіць выдаліць усе яго модулі
- 22 сакавіка, 21:30–23:55 UTC: 273 пакеты адмененыя; left-pad@0.0.3 404s у праектах Babel, Atom, Node; форк 1.0.0 у 21:42; тэхнічны дырэктар npm твіціць "un-un-publishing" у 23:03; 0.0.3 вернуты з рэзервовай копіі ў 23:55 — 2,5 гадзіны
- 23 і 29 сакавіка: паслясмертны аналіз npm ("мы прапусцілі") і новая палітыка: адмена публікацыі толькі на працягу 24 гадзін, ахоўныя месцы для выдаленых імёнаў (72 гадзіны з 2020 г.)

## Перакладзеная стэнаграма

Перакладзена з арыгінальнай англійскай агучкі. Даступнае аўдыя і субтытры кантралююцца YouTube.

0:00 Адзін распрацоўшчык выдаляе адзінаццаць радкоў JavaScript, і праз некалькі хвілін Babel, зборкі React і Node выходзяць з ладу па ўсім свеце, сотнямі ў хвіліну. Функцыя называецца left-pad. Яна дадае прабелы да радка, і да канца вечара npm робіць тое адзінае, што, як яно кажа, не можа зрабіць: перапублікаваць выдаленую версію. Як гэта адбываецца, чаму гэта магчыма, і хто вінаваты. Гэта The Daily Diff, паслясмертны аналіз. 11 сакавіка. Патэнтны агент Kik, дадатку для абмену паведамленнямі,

0:26 адпраўляе электронны ліст Азеру Кочулу: перайменуйце ваш пакет npm, kik – гэта наш брэнд. Азер кажа не. Праз гадзіну: нашы юрысты па таварных знаках будуць стукацца ў вашыя дзверы і закрываць вашыя ўліковыя запісы. Азер называе цану, трыццаць тысяч долараў, і Kik перасылае размову ў службу падтрымкі npm. 18 сакавіка. Генеральны дырэктар npm вырашае, што кожны, хто набірае npm install kik, чакае менавіта

0:48 дадатак для абмену паведамленнямі, і перадае назву. Азер просіць выдаліць усё, што яму належыць. Праз два дні ён робіць гэта сам: дзвесце семдзесят тры пакеты. 22 сакавіка, 21:30 UTC. Кожная зборка, якая звяртаецца да left-pad, атрымлівае 404. Праз дзесяць хвілін незнаёмец перапублікуе яго як 1.0.0, і нічога не мяняецца, таму што Babel і Atom загружаюць яго праз пакет пад назвай line-numbers, які патрабуе дакладна 0.0.3.

1:13 У 23:03 тэхнічны дырэктар npm твіціць: un-un-publishing. У 23:55, 0.0.3 вяртаецца з рэзервовай копіі. Дзве з паловай гадзіны. Чаму адзін чалавек можа гэта зрабіць? Тры прычыны. Любая версія на npm можа быць выдалена яе аўтарам, імгненна, без праверкі таго, хто ад яе залежыць. Па-другое, залежнасці транзітыўныя: Babel не ведае, што left-pad існуе, ён ведае line-numbers, і ўсё дрэва вырашаецца ў рэжыме рэальнага часу пры кожнай устаноўцы.

1:36 Па-трэцяе, у 2016 годзе нішто не фіксавала гэтае дрэва па змаўчанні; lockfiles былі неабавязковымі, таму кожны запуск CI зноў пытаўся ў інтэрнэту, як выглядаюць адзінаццаць радкоў кода. Адзін рэестр, якім ніхто не кіруе і ніхто не залежыць ад яго. Віна git. npm, шэсцьдзесят працэнтаў: яго ўласны постфактум кажа, што неабмежаваная адмена публікацыі выклікала боль, і, цытую, мы прапусцілі. Kik, дваццаць пяць: патэнтны агент, а не юрыст, абяцаючы юрыстаў каля дзвярэй з-за назвы, якую Kik ужо вырашыў не выкарыстоўваць. Звычка залежнасці, пятнаццаць: кожны, хто ўсталяваў npm адзінаццаць радкоў замест таго,

2:06 каб іх набраць. Уключаючы Kik, чые зборкі таксама ламаюцца. Радыус паражэння: дзвесце семдзесят тры пакеты былі выдалены, адзін з іх спампоўваўся два з паловай мільёны разоў на месяц. Выпраўленне займае дзве з паловай гадзіны; функцыя займае адзінаццаць радкоў. На Hacker News паведамленне з пытаннем, ці забыліся мы, як праграмаваць, набрала тысячу семсот пунктаў, у асноўным ад людзей, чые зборкі ўсё яшчэ чырвоныя. Вердыкт, паслясмертны аналіз: SHIP IT.

2:26 npm аднаўляецца з рэзервовай копіі, публікуе постфактум на наступны дзень, і на працягу тыдня ўводзіць правіла, якое ўсё яшчэ дзейнічае: вы можаце адмяніць публікацыю на дваццаць чатыры гадзіны, пасля гэтага вы размаўляеце з чалавекам. Панядзелак: зафіксуйце свой lockfile, і калі функцыя займае адзінаццаць радкоў, гэта абзац, а не залежнасць. Дасылайце мне інцыдэнт, пра які вы яшчэ не маеце права гаварыць, у каментарах, або на the daily diff dot dev. І гэта diff на сёння.

2:48 Я Ніка з Axrisi. Аб'ядноўвайце адказна.

## Крыніцы

- [npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)](https://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm) — blog.npmjs.org
- [npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)](https://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy) — blog.npmjs.org
- [Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)](https://web.archive.org/web/20160323201305/https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c) — web.archive.org
- [Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)](https://web.archive.org/web/20170112194445/https://medium.com/@mproberts/a-discussion-about-the-breaking-of-the-internet-3d4d2a83aa4d) — web.archive.org
- [Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTC](https://x.com/seldo/status/712414400808755200) — x.com
- [left-pad 0.0.3 on the npm registry (the eleven lines)](https://registry.npmjs.org/left-pad/0.0.3) — registry.npmjs.org
- [Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)](https://news.ycombinator.com/item?id=11340510) — news.ycombinator.com
- [Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)](https://news.ycombinator.com/item?id=11348798) — news.ycombinator.com
- [Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)](https://news.ycombinator.com/item?id=11382885) — news.ycombinator.com
- [The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"](https://www.theregister.com/2016/03/23/npm_left_pad_chaos/) — www.theregister.com
