O'n bir qator JavaScript internetni buzdi. Bir marta nashr etish bekor qilindi.
2016-yil 22-mart, UTC 21:30: dasturchi "kik" paket nomini Kik xabar almashish ilovasiga berganidan so'ng, o'zining barcha 273 ta npm paketlarini nashr etishni bekor qiladi.
2016-yil 22-mart, UTC 21:30: dasturchi "kik" paket nomini Kik xabar almashish ilovasiga berganidan so'ng, o'zining barcha 273 ta npm paketlarini nashr etishni bekor qiladi. Kikning patent agenti "eshigingizni taqillatadigan advokatlar" deb va'da qilgan edi. 273 tadan biri left-pad: satr oldiga bo'shliq qo'yadigan o'n bir qator, oyiga 2,5 million marta yuklab olingan. Bir necha daqiqa ichida Babel, React va Node dasturlari butun dunyo bo'ylab har daqiqada yuzlab marta ishlamay qoladi. O'n daqiqa ichida fork paydo bo'ladi va hech narsani o'zgartirmaydi, chunki Babel left-padni qator raqamlari orqali tortadi, bu esa 0.0.3 ni aniq belgilaydi. 23:55 da npm o'chirilgan versiyani zaxira nusxadan tiklaydi — bu reestr tarixidagi birinchi "nashr etishni bekor qilishni bekor qilish" — va bir hafta o'tgach, 24 soatlik nashr etishni bekor qilish qoidasini joriy qiladi. Postmorten, npmning o'z hisobi va Kik nashr etgan elektron pochta xabarlari asosida: hech qanday bog'liqlik tekshiruvisiz har qanday muallifga har qanday versiyani o'chirishga ruxsat bergan reestr, har bir o'rnatishda jonli ravishda hal qilingan tranzitiv daraxt, odatda qulflanmagan fayl. Git aybi: 60 npm / 25 Kik / 15 bog'liqlik odati. Tuzatish bo'yicha hukm: SHIP IT.
Yozma nashrini oʻqing (inglizcha) ↗
Bu video nimani qamrab oladi
- 11-mart: Kikning patent agenti Azer Koçuludan `kik` nomini o'zgartirishni so'raydi; bir soat o'tgach: advokatlar "eshigingizni taqillatib, hisoblaringizni olib tashlashadi"; Azer: $30,000; Kik npm yordam xizmatiga elektron xat yozadi
- 18–20-mart: npm'ning bosh direktori nomni Kik'ga o'tkazadi ("kik.com bilan bog'liq bo'lishini kutish mumkin"); Azer o'zining barcha modullarini o'chirishni so'raydi
- 22-mart, 21:30–23:55 UTC: 273 ta paket nashr etilishi bekor qilindi; left-pad@0.0.3 Babel, Atom, Node loyihalarida 404 xatolik beradi; 21:42 da 1.0.0 versiyali fork paydo bo'ladi; npm'ning texnik direktori 23:03 da "un-un-publishing" deb tvit yozadi; 23:55 da 0.0.3 zaxira nusxadan qaytariladi — 2,5 soat
- 23-mart va 29-mart: npm'ning postmortemi ("biz xato qildik") va yangi siyosati: nashr etishni faqat 24 soat ichida bekor qilish, olib tashlangan nomlar uchun xavfsizlik o'rnini bosuvchi vositalar (2020-yildan beri 72 soat)
Tarjima qilingan transkript
Asl inglizcha hikoyadan tarjima qilingan. Mavjud audio va subtitrlar YouTube tomonidan boshqariladi.
0:00 Bir dasturchi o'n bir qator JavaScript kodini o'chirib tashlaydi va bir necha daqiqa ichida Babel, React va Node qurilmalari butun dunyo bo'ylab ishlamay qolmoqda, daqiqasiga yuzlab. Funktsiya left-pad. U satrni bo'shliqlar bilan to'ldiradi va kechqurun npm u qila olmayman degan yagona narsani amalga oshiradi: o'chirilgan versiyani qayta nashr etadi. Bu qanday sodir bo'ladi, nima uchun bu mumkin va kim aybdor. Bu The Daily Diff, postmorten. 11-mart. Kik xabar almashish ilovasining patent agenti,
0:26 Azer Koçuluga elektron pochta yuboradi: o'zingizning npm paketingizni nomini o'zgartiring, kik bizning brendimiz. Azer yo'q deydi. Bir soatdan keyin: bizning savdo belgilari bo'yicha advokatlarimiz eshigingizni taqillatib, hisoblaringizni olib tashlashadi. Azer narxni aytadi, o'ttiz ming dollar, va Kik suhbatni npmga yuboradi yordam. 18-mart. npm bosh direktori npm install kik deb yozadigan har kim xabar almashish ilovasini kutadi deb qaror qiladi
0:48 va nomni topshiradi. Azer o'ziga tegishli barcha narsalarni o'chirishni so'raydi. Ikki kundan keyin u buni o'zi qiladi: ikki yuz yetmish uchta paket. 22-mart, UTC 21:30. Left-padga murojaat qilgan har bir qurilma 404 xatoni oladi. O'n daqiqa o'tgach, notanish kishi uni 1.0.0 sifatida qayta nashr etadi, va hech narsa o'zgarmaydi, chunki Babel va Atom uni line-numbers deb nomlangan paket orqali yuklaydi, bu esa aynan 0.0.3 ni istaydi.
1:13 23:03 da npm CTOsi tvit yozadi: un-un-publishing. 23:55 da 0.0.3 zaxira nusxadan qaytariladi. Ikki yarim soat. Nima uchun bir kishi buni qila oladi? Uch sabab. Npm'dagi har qanday versiya o'z muallifi tomonidan o'chirilishi mumkin, darhol, unga kim bog'liqligini tekshirmasdan. Ikkinchidan, bog'liqliklar tranzitivdir: Babel left-pad mavjudligini bilmaydi, u line-numbersni biladi va butun daraxt har bir o'rnatishda jonli ravishda hal qilinadi.
1:36 Uchinchidan, 2016 yilda hech narsa bu daraxtni sukut bo'yicha bog'lamaydi; lockfilelar tanlov bo'lib, ular shuning uchun har bir CI ishi internetdan o'n bir qator kod qanday ko'rinishini qayta so'raydi. Bitta registr, unga bog'liq bo'lmagan hech kim tomonidan boshqarilmaydi. git blame. npm, oltmish foiz: o'zining postmortemi cheklanmagan nashr etishni bekor qilish azobga sabab bo'lganini aytadi va, iqtibos: biz xato qildik. Kik, yigirma besh: advokat emas, patent agenti, Kik allaqachon foydalanmaslikka qaror qilgan nom uchun eshikda advokatlarni va'da qilmoqda. Bog'liqlik odati, o'n besh: o'n bir qatorni yozish o'rniga npm orqali o'rnatgan har bir kishi.
2:06 Jumladan Kik ham, uning qurilmalari ham ishdan chiqadi. Jumladan Kik ham, uning qurilmalari ham ishdan chiqadi. Portlash radiusi: ikki yuz yetmish uchta paket tortib olingan, ulardan biri oyiga ikki yarim million marta yuklab olingan. Tuzatish ikki yarim soatni oladi; funksiya o'n bir qatorni oladi. Hacker Newsda, dasturlashni unutib qo'yganmizmi degan savolga javob beruvchi post o'n yetti yuz ball to'playdi, asosan qurilmalari hali ham qizil bo'lgan odamlardan. Hukm, postmorten: SHIP IT.
2:26 npm zaxira nusxadan tiklanadi, ertasi kuni postmortemni joylashtiradi, va bir hafta ichida hali ham amalda bo'lgan qoidani joriy qiladi: siz nashr etishni yigirma to'rt soat davomida bekor qilishingiz mumkin, undan keyin inson bilan gaplashasiz. Dushanba: lockfileingizni joylashtiring va agar funksiya o'n bir qator bo'lsa, bu paragraf, bog'liqlik emas. Menga hali ham gapirishga ruxsat berilmagan hodisani yuboring, izohlarda yoki daily diff dot dev manzilida. Va bugungi farq shu.
2:48 Men Axrisidan Nikoman. Mas'uliyat bilan birlashtiring.
Manbalar
- 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



