+− THE DAILY DIFFdev & AI news
SHIP IT

Vienuolika JavaScript eilučių sugriovė internetą. Vienas atšaukimas.

2016 m.

2016 m. kovo 22 d., 21:30 UTC: kūrėjas atšaukia visus 273 savo „npm“ paketus po to, kai „npm“ paketo pavadinimą „kik“ atiduoda „Kik“ – susirašinėjimo programėlei, kurios patentų agentas pažadėjo „teisininkus, daužančius į jūsų duris“. Vienas iš 273 yra „left-pad“: vienuolika eilučių, kurios prideda tarpus prieš eilutę, atsisiunčiamos 2,5 milijono kartų per mėnesį. Per kelias minutes „Babel“, „React“ ir „Node“ kūrimai visame pasaulyje pradeda strigti, šimtai per minutę. Šakutė atsiranda per dešimt minučių ir nieko nepakeičia, nes „Babel“ traukia „left-pad“ per eilučių numerius, kurie tiksliai nurodo 0.0.3 versiją. 23:55 „npm“ atkuria ištrintą versiją iš atsarginės kopijos – tai pirmasis „neatšauktas atšaukimas“ registro istorijoje – o po savaitės įveda 24 valandų atšaukimo taisyklę. Post-mortem, iš „npm“ pačios ataskaitos ir „Kik“ paskelbto el. pašto gijos: registras, kuris leido bet kuriam autoriui ištrinti bet kurią versiją be priklausomybių patikros, tranzityvinis medis, išsprendžiamas realiu laiku kiekvieną kartą diegiant, pagal numatytuosius nustatymus nėra lockfail'o. Git blame: 60 npm / 25 Kik / 15 priklausomybės įprotis. Sprendimo verdiktas: SHIP IT.

Skaityti rašytinę versiją (anglų k.) ↗

Kas aptariama šiame vaizdo įraše

  • Kovo 11: Kik patentų agentas prašo Azer Koçulu pervadinti `kik`; po valandos: teisininkai „daužo jūsų duris ir naikina jūsų paskyras“; Azer: 30 000 USD; Kik siunčia el. laiškus npm palaikymui
  • Kovo 18–20: npm generalinis direktorius perduoda vardą Kik („pagrįstai tikėtųsi, kad tai susiję su kik.com“); Azer prašo ištrinti visus jo modulius
  • Kovo 22, 21:30–23:55 UTC: 273 paketai nepublikuojami; left-pad@0.0.3 404s Babel, Atom, Node projektuose; fork 1.0.0 21:42; npm CTO tweetina „un-un-publishing“ 23:03; 0.0.3 grąžinama iš atsarginės kopijos 23:55 – 2,5 valandos
  • Kovo 23 ir kovo 29: npm post-mortem („mes suklydome“) ir nauja politika: atšaukti tik per 24 valandas, saugumo vietos pašalintiems pavadinimams (72 val. nuo 2020 m.)

Išverstas transkriptas

Išversta iš originalo anglų kalbos. Galimas garso ir subtitrų valdymas per YouTube.

0:00 Vienas kūrėjas ištrina vienuolika JavaScript eilučių, o per kelias minutes Babel, React ir Node kūrimai strigo visame pasaulyje, šimtai per minutę. Funkcija yra left-pad. Ji užpildo eilutę tarpais, o iki vakaro pabaigos npm atlieka vieną dalyką, kurio, pasak jos, negali padaryti: iš naujo publikuoti ištrintą versiją. Kaip tai nutinka, kodėl tai įmanoma ir kas kaltas. Tai The Daily Diff, post-mortem. Kovo 11 d. Patentų agentas iš Kik, susirašinėjimo programėlės,

0:26 siunčia el. laišką Azer Koçulu: pervadinkite savo npm paketą, kik yra mūsų prekės ženklas. Azer sako ne. Po valandos: mūsų prekių ženklų teisininkai beldžiasi į jūsų duris ir naikina jūsų paskyras. Azer nurodo kainą, trisdešimt tūkstančių dolerių, ir Kik persiunčia giją npm palaikymui. Kovo 18 d. npm generalinis direktorius nusprendžia, kad kiekvienas, įvedęs npm install kik, tikisi susirašinėjimo

0:48 programėlės ir perduoda pavadinimą. Azer prašo ištrinti viską, kas jo. Po dviejų dienų jis tai padaro pats: du šimtai septyniasdešimt trys paketai. Kovo 22 d., 21:30 UTC. Kiekvienas kūrimas, kuris pasiekia left-pad, gauna 404. Po dešimties minučių nepažįstamasis iš naujo publikuoja jį kaip 1.0.0, ir niekas nesikeičia, nes Babel ir Atom įkelia jį per paketą, vadinamą line-numbers, kuris nori tiksliai 0.0.3.

1:13 23:03 npm CTO tweetina: un-un-publishing. 23:55, 0.0.3 grįžta iš atsarginės kopijos. Dvi su puse valandos. Kodėl vienas žmogus gali tai padaryti? Trys priežastys. Bet kuri npm versija gali būti ištrinta jos autoriaus, nedelsiant, nepatikrinus, kas nuo jos priklauso. Antra, priklausomybės yra tranzityvinės: Babel nežino, kad left-pad egzistuoja, ji žino line-numbers, o visas medis išsprendžiamas realiu laiku kiekvieną kartą įdiegiant.

1:36 Trečia, 2016 m. niekas pagal numatytuosius nustatymus nefiksuoja to medžio; lockfail'ai yra pasirenkami, todėl kiekvienas CI paleidimas iš naujo klausia interneto, kaip atrodo vienuolika kodo eilučių. Vienas registras, valdomas nieko, kas nuo jo priklauso. git blame. npm, šešiasdešimt procentų: jo paties post-mortem sako, kad neribotas atšaukimas sukėlė skausmą, ir, citata, mes suklydome. Kik, dvidešimt penki: patentų agentas, o ne advokatas, pažadantis teisininkus prie durų dėl pavadinimo, kurio Kik jau nusprendė nenaudoti. Priklausomybės įprotis, penkiolika: visi, kurie įdiegė npm-į vienuolika eilučių vietoj

2:06 jų įvedimo. Įskaitant Kik, kurio kūrimai taip pat strigo. Poveikio spindulys: du šimtai septyniasdešimt trys paketai ištraukti, vienas iš jų atsisiunčiamas du su puse milijono kartų per mėnesį. Pataisymas užtrunka dvi su puse valandos; funkcija užtrunka vienuolika eilučių. „Hacker News“ įrašas, klausiantis, ar pamiršome, kaip programuoti, pasiekia tūkstantį septynis šimtus taškų, daugiausia iš žmonių, kurių kūrimai vis dar raudoni. Verdiktas, post-mortem: SHIP IT.

2:26 npm atkuria iš atsarginės kopijos, kitą dieną paskelbia post-mortem, ir per savaitę įveda taisyklę, kuri vis dar galioja: galite atšaukti dvidešimt keturias valandas, po to kalbate su žmogumi. Pirmadienis: patvirtinkite savo lockfail'ą, ir jei funkcija yra vienuolika eilučių, tai yra paragrafas, o ne priklausomybė. Atsiųskite man incidentą, apie kurį vis dar neleidžiama kalbėti, komentaruose arba daily diff dot dev. Ir tai yra šiandienos skirtumas.

2:48 Aš esu Niko iš Axrisi. Apjunkite atsakingai.

Šaltiniai

  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

Susiję vaizdo įrašai