Yksitoista riviä JavaScriptiä rikkoi internetin. Yksi julkaisun peruutus.
22.
22. maaliskuuta 2016, 21:30 UTC: kehittäjä poistaa kaikki 273 npm-pakettiaan sen jälkeen, kun npm luovuttaa paketin nimen "kik" Kik-viestisovellukselle, jonka patenttiasiamies oli luvannut "lakimiesten kolkuttavan ovelle". Yksi 273:sta on left-pad: yksitoista riviä, jotka lisäävät välilyöntejä merkkijonon eteen, ladattu 2,5 miljoonaa kertaa kuukaudessa. Muutamassa minuutissa Babel-, React- ja Node-rakennukset epäonnistuvat maailmanlaajuisesti, satoja minuutissa. Haarukka ilmestyy kymmenessä minuutissa eikä muuta mitään, koska Babel vetää left-padin rivinumeroiden kautta, joka kiinnittää tarkalleen 0.0.3:n. Klo 23:55 npm palauttaa poistetun version varmuuskopiosta – ensimmäinen "julkaisun peruutuksen peruutus" rekisterin historiassa – ja viikkoa myöhemmin ottaa käyttöön 24 tunnin julkaisun peruutussäännön. Jälkianalyysi, npm:n omasta kertomuksesta ja Kikin julkaisemasta sähköpostiketjusta: rekisteri, joka antoi minkä tahansa tekijän poistaa minkä tahansa version ilman riippuvuuksien tarkistusta, transitiivinen puu ratkaistiin suorana jokaisella asennuksella, ei oletuksena lukitustiedostoa. Git blame: 60 npm / 25 Kik / 15 riippuvuus-tapa. Päätös korjauksesta: SHIP IT.
Lue kirjoitettu versio (englanniksi) ↗
Mitä tämä video käsittelee
- 11. maaliskuuta: Kikin patenttiasiamies pyytää Azer Koçulua nimeämään uudelleen `kik`; tunnin kuluttua: lakimiehet "kolkuttavat ovelle ja sulkevat tilisi"; Azer: 30 000 $; Kik lähettää sähköpostia npm:n tukeen
- 18.–20. maaliskuuta: npm:n toimitusjohtaja siirtää nimen Kikille ("odotettavissa olevan yhteydessä kik.comiin"); Azer pyytää kaikkien moduuliensa poistamista
- 22. maaliskuuta, 21:30–23:55 UTC: 273 pakettia poistettu; [email protected] 404-virhe Babilissa, Atomissa, Node-projekteissa; haarukka 1.0.0 klo 21:42; npm:n CTO tviittaa "un-un-publishing" klo 23:03; 0.0.3 takaisin varmuuskopiosta klo 23:55 – 2,5 tuntia
- 23. ja 29. maaliskuuta: npm:n jälkianalyysi ("epäonnistuimme") ja uusi käytäntö: julkaisun peruutus vain 24 tunnin kuluessa, turvallisuuspaikkamerkit poistetuille nimille (72 tuntia vuodesta 2020 lähtien)
Käännetty transkriptio
Käännetty alkuperäisestä englanninkielisestä selostuksesta. Käytettävissä olevan äänen ja tekstitysten hallinta tapahtuu YouTuben kautta.
0:00 Yksi kehittäjä poistaa yksitoista riviä JavaScriptiä, ja minuuteissa Babel, React- ja Node-rakennukset epäonnistuvat maailmanlaajuisesti, satoja minuutissa. Funktio on left-pad. Se täyttää merkkijonon välilyönneillä, ja illan loppuun mennessä npm tekee sen yhden asian, mitä se sanoo, ettei se voi tehdä: julkaisee uudelleen poistetun version. Miten se tapahtuu, miksi se on mahdollista, ja kuka saa syytteen. Tämä on The Daily Diff, jälkianalyysi. Maaliskuun 11. päivä. Kikin, viestisovelluksen, patenttiasiamies
0:26 lähettää sähköpostia Azer Koçululle: nimeä npm-pakettisi uudelleen, kik on meidän brändimme. Azer sanoo ei. Tunnin kuluttua: tavaramerkkijuristimme kolkuttavat ovellesi ja sulkevat tilisi. Azer nimeää hinnan, kolmekymmentätuhatta dollaria, ja Kik välittää keskustelun npm:n tukeen. Maaliskuun 18. päivä. npm:n toimitusjohtaja päättää, että kuka tahansa, joka kirjoittaa npm install kik, odottaa viestisovellusta,
0:48 ja luovuttaa nimen. Azer pyytää kaiken omansa poistetuksi. Kaksi päivää myöhemmin hän tekee sen itse: kaksisataaseitsemänkymmentäkolme pakettia. Maaliskuun 22. päivä, 21:30 UTC. Jokainen rakennus, joka hakee left-padia, saa 404-virheen. Kymmenen minuuttia myöhemmin muukalainen julkaisee sen uudelleen versiona 1.0.0, eikä mikään muutu, koska Babel ja Atom lataavat sen paketin nimeltä line-numbers kautta, joka haluaa tarkalleen 0.0.3:n.
1:13 Klo 23:03 npm:n CTO tviittaa: un-un-publishing. Klo 23:55, 0.0.3 on takaisin varmuuskopiosta. Kaksi ja puoli tuntia. Miksi yksi henkilö voi tehdä tämän? Kolme syytä. Mikä tahansa npm:n versio on sen tekijän poistettavissa, välittömästi, tarkistamatta, kuka siitä riippuu. Toiseksi, riippuvuudet ovat transitiivisia: Babel ei tiedä, että left-pad on olemassa, se tuntee line-numbersin, ja koko puu ratkaistaan livenä jokaisella asennuksella.
1:36 Kolmanneksi, vuonna 2016 mikään ei kiinnitä tätä puuta oletuksena; lukitustiedostot ovat vapaaehtoisia, joten jokainen CI-ajo kysyy internetiltä uudelleen, miltä yksitoista koodiriviä näyttää. Yksi rekisteri, jota ei ylläpidä kukaan, joka siitä riippuu. git blame. npm, kuusikymmentä prosenttia: sen oma jälkianalyysi sanoo, että rajoittamaton julkaisun peruutus aiheutti tuskan, ja, lainaus, epäonnistuimme. Kik, kaksikymmentäviisi prosenttia: patenttiasiamies, ei lakimies, lupasi lakimiehiä ovelle nimen takia, jota Kik oli jo päättänyt olla käyttämättä. Riippuvuus-tapa, viisitoista prosenttia: kaikki, jotka npm-asensivat yksitoista riviä
2:06 sen sijaan, että olisivat kirjoittaneet ne. Mukana Kik, jonka rakennukset myös rikkoutuivat. Räjäytyssäde: kaksisataaseitsemänkymmentäkolme pakettia poistettu, yksi niistä ladattu kaksi ja puoli miljoonaa kertaa kuukaudessa. Korjaus kestää kaksi ja puoli tuntia; funktio vie yksitoista riviä. Hacker Newsissa, postaus, jossa kysytään, olemmeko unohtaneet ohjelmoinnin, saa seitsemäntoista sataa pistettä, enimmäkseen ihmisiltä, joiden rakennukset ovat yhä punaisia. Tuomio, jälkianalyysi: SHIP IT.
2:26 npm palauttaa varmuuskopiosta, julkaisee jälkianalyysin seuraavana päivänä, ja viikon sisällä ottaa käyttöön säännön, joka on edelleen voimassa: voit perua julkaisun kahdenkymmenenneljän tunnin ajan, sen jälkeen puhut ihmisen kanssa. Maanantai: commit lockfile, ja jos funktio on yksitoista riviä, se on kappale, ei riippuvuus. Lähetä minulle tapaus, josta et edelleenkään saa puhua, kommentteihin tai osoitteeseen the daily diff dot dev. Ja siinäpä tämän päivän ero.
2:48 Olen Niko Axrisista. Yhdistä vastuullisesti.
Lähteet
- 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



