Единадесет реда JavaScript счупиха интернета. Едно премахване.
22 март 2016 г., 21:30 UTC: разработчик премахва всичките си 273 npm пакета, след като npm предава името на пакета "kik" на Kik, приложението за съобщения, чийто патентен агент е обещал "адвокати, които чукат на вратата ви".
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.
Прочетете писменото издание (английски) ↗
Какво обхваща този видеоклип
- 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 връща 404 в 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 blame. npm, шестдесет процента: собственият му посмъртен анализ казва, че неограниченото премахване е причинило болката, и, цитирам, ние допуснахме грешка. Kik, двадесет и пет: патентен агент, не адвокат, обещаващ адвокати на вратата заради име, което Kik вече е решил да не използва. Навикът за зависимости, петнадесет: всеки, който е инсталирал npm единадесет реда вместо
2:06 да ги напише. Включително Kik, чиито компилации също се провалят. Радиус на разпространение: двеста седемдесет и три пакета изтеглени, един от тях изтеглян два и половина милиона пъти месечно. Корекцията отнема два часа и половина; функцията отнема единадесет реда. В Hacker News, публикация, питаща дали сме забравили как да програмираме, достига хиляда и седемстотин точки, най-вече от хора, чиито компилации все още са червени. Присъда, посмъртен анализ: SHIP IT.
2:26 npm възстановява от резервно копие, публикува посмъртния анализ на следващия ден, и в рамките на една седмица въвежда правилото, което все още е в сила: можете да премахнете за двадесет и четири часа, след това говорите с човек. Понеделник: кометнете вашия lockfile, и ако функцията е единадесет реда, тя е абзац, а не зависимост. Изпратете ми инцидента, за който все още не ви е позволено да говорите, в коментарите, или на the daily diff dot dev. И това е разликата за днес.
2:48 Аз съм Нико от Axrisi. Обединявайте отговорно.
Източници
- npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)blog.npmjs.org
- npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)blog.npmjs.org
- Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)web.archive.org
- Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)web.archive.org
- Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTCx.com
- left-pad 0.0.3 on the npm registry (the eleven lines)registry.npmjs.org
- Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)news.ycombinator.com
- Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)news.ycombinator.com
- Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)news.ycombinator.com
- The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"www.theregister.com



