+− THE DAILY DIFFdev & AI news
SHIP IT

Једанаест линија JavaScript кода покварило је интернет. Једно поништење објављивања.

22.

22. март 2016, 21:30 УТЦ: програмер поништава објављивање свих 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 blame: 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 УТЦ: 273 пакета поништено; [email protected] добија 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 УТЦ. Свака изградња која тражи 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. И то је The Daily Diff за данас.

2:48 Ја сам Нико из Axrisi. Спајајте одговорно.

Извори

  1. npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)blog.npmjs.org
  2. npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)blog.npmjs.org
  3. Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)web.archive.org
  4. Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)web.archive.org
  5. Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTCx.com
  6. left-pad 0.0.3 on the npm registry (the eleven lines)registry.npmjs.org
  7. Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)news.ycombinator.com
  8. Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)news.ycombinator.com
  9. Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)news.ycombinator.com
  10. The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"www.theregister.com

Повезани видеи

postmortem · sr · 25. 9. 2026.

Грешка од једне милисекунде зауставила је ваздушни саобраћај у Великој Британији. Шест сати.

У уторак, 8. септембра, у 10:00, један рутински захтев за squawk-код у Националном систему ваздушног простора (NAS) компаније NATS бива прекинут поруком вишег приоритета док је делимично ажурирао вред

3:06 ↗