Единаесет линии 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: регистарот што му дозволуваше на кој било автор да избрише која било верзија без проверка на зависности, транзитивното дрво се решава во живо при секоја инсталација, без lockfile по дифолт. 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 UTC: 273 пакети необјавени; left-pad@0.0.3 404s во Babel, Atom, Node проекти; fork 1.0.0 во 21:42; CTO на 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 часот, CTO на npm твита: un-un-publishing. Во 23:55 часот, 0.0.3 се враќа од резервна копија. Два и пол часа. Зошто може едно лице да го направи ова? Три причини. Секоја верзија на npm може да биде избришана од нејзиниот автор, инстантно, без проверка на тоа кој зависи од неа. Второ, зависностите се транзитивни: Babel не знае дека left-pad постои, знае line-numbers, и целото дрво се решава во живо при секоја инсталација.
1:36 Трето, во 2016 година ништо не го фиксира тоа дрво по дифолт; lockfile-овите се изборни, така што секое 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



