+− THE DAILY DIFFdev & AI news
SHIP IT

Elleve linjer med JavaScript brøt internett. Én avpublisering.

22.

22. mars 2016, 21:30 UTC: en utvikler avpubliserer alle 273 av npm-pakkene sine etter at npm overleverte pakkenavnet «kik» til Kik, meldingsappen, hvis patentagent hadde lovet «advokater som banker på døren din». En av de 273 er left-pad: elleve linjer som setter mellomrom foran en streng, lastet ned 2,5 millioner ganger i måneden. I løpet av minutter feiler Babel-, React- og Node-bygg over hele verden, hundrevis per minutt. En fork vises på ti minutter og endrer ingenting, fordi Babel trekker left-pad gjennom linjenumre, som pinner 0.0.3 nøyaktig. Kl. 23:55 gjenoppretter npm den slettede versjonen fra en sikkerhetskopi – den første «av-av-publiseringen» i registrets historie – og en uke senere sender de ut 24-timers avpubliseringsregelen. Postmortem, fra npms egen beretning og e-posttråden Kik publiserte: registret som lot enhver forfatter slette hvilken som helst versjon uten avhengighetskontroll, det transitive treet ble løst direkte ved hver installasjon, ingen lockfile som standard. Git blame: 60 npm / 25 Kik / 15 avhengighetsvanen. Dom over fiksen: SHIP IT.

Les den skriftlige utgaven (engelsk) ↗

Hva denne videoen dekker

  • 11. mars: Kiks patentagent ber Azer Koçulu om å endre navn på `kik`; en time senere: advokater «banker på døren din og tar ned kontoene dine»; Azer: $30 000; Kik sender e-post til npm support
  • 18.–20. mars: npms CEO overfører navnet til Kik («ville med rimelighet forvente at det var relatert til kik.com»); Azer ber om at alle modulene hans slettes
  • 22. mars, 21:30–23:55 UTC: 273 pakker avpublisert; left-pad@0.0.3 gir 404 i Babel-, Atom-, Node-prosjekter; fork 1.0.0 kl. 21:42; npms CTO tvitrer «un-un-publishing» kl. 23:03; 0.0.3 tilbake fra sikkerhetskopi kl. 23:55 – 2,5 timer
  • 23. og 29. mars: npms postmortem («vi mistet ballen») og den nye policyen: avpubliser kun innen 24 timer, sikkerhetsplassholdere for fjernede navn (72 t siden 2020)

Oversatt transkripsjon

Oversatt fra den originale engelske fortellingen. Tilgjengelig lyd og undertekster kontrolleres av YouTube.

0:00 En utvikler sletter elleve linjer med JavaScript, og innen minutter feiler Babel, React- og Node-bygg over hele verden, hundrevis per minutt. Funksjonen er left-pad. Den fyller en streng med mellomrom, og ved slutten av kvelden gjør npm det ene de sier de ikke kan gjøre: publisere en slettet versjon på nytt. Hvordan det skjer, hvorfor det er mulig, og hvem som får skylden. Dette er The Daily Diff, postmortem. 11. mars. En patentagent hos Kik, meldingsappen,

0:26 sender e-post til Azer Koçulu: endre navn på npm-pakken din, kik er vårt merke. Azer sier nei. En time senere: våre varemerkeadvokater kommer til å banke på døren din og ta ned kontoene dine. Azer setter en pris, tretti tusen dollar, og Kik videresender tråden til npm support. 18. mars. npms CEO bestemmer at den som skriver npm install kik forventer meldingsappen,

0:48 og overleverer navnet. Azer ber om at alt hans blir slettet. To dager senere gjør han det selv: to hundre og syttitre pakker. 22. mars, 21:30 UTC. Hvert bygg som henter left-pad får en 404. Ti minutter senere publiserer en fremmed den på nytt som 1.0.0, og ingenting endres, fordi Babel og Atom laster den gjennom en pakke kalt line-numbers, som vil ha nøyaktig 0.0.3.

1:13 Kl. 23:03 tvitrer npms CTO: un-un-publishing. Kl. 23:55 er 0.0.3 tilbake fra en sikkerhetskopi. To og en halv time. Hvorfor kan én person gjøre dette? Tre grunner. Enhver versjon på npm kan slettes av forfatteren, øyeblikkelig, uten sjekk av hvem som avhenger av den. For det andre er avhengigheter transitive: Babel vet ikke at left-pad eksisterer, det vet line-numbers, og hele treet løses direkte ved hver installasjon.

1:36 For det tredje, i 2016 pinner ingenting det treet som standard; lockfiles er opt-in, så hver CI-kjøring spør internett på nytt hva elleve linjer med kode ser ut som. Ett register, drevet av ingen som avhenger av det. git blame. npm, seksti prosent: deres egen postmortem sier ubegrenset avpublisering forårsaket smerten, og, sitat, vi mistet ballen. Kik, tjuefem: en patentagent, ikke en advokat, som lovet advokater på døren over et navn Kik allerede hadde bestemt seg for ikke å bruke. Avhengighetsvanen, femten: alle som npm-installerte elleve linjer i stedet for

2:06 å skrive dem. Inkludert Kik, hvis bygg også feiler. Eksplosjonsradius: to hundre og syttitre pakker trukket, én av dem lastet ned to og en halv million ganger i måneden. Fiksen tar to og en halv time; funksjonen tar elleve linjer. På Hacker News treffer et innlegg som spør om vi har glemt hvordan vi programmerer sytten hundre poeng, mest fra folk hvis bygg fortsatt er røde. Dom, postmortem: SHIP IT.

2:26 npm gjenoppretter fra sikkerhetskopi, publiserer postmortem neste dag, og innen en uke sender de ut regelen som fortsatt gjelder: du kan avpublisere i tjuefire timer, etter det snakker du med et menneske. Mandag: commit lockfilen din, og hvis en funksjon er elleve linjer, er det et avsnitt, ikke en avhengighet. Send meg hendelsen du fortsatt ikke har lov til å snakke om, i kommentarene, eller på the daily diff dot dev. Og det er diffen for i dag.

2:48 Jeg er Niko fra Axrisi. Merge responsibly.

Kilder

  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

Relaterte videoer