+− THE DAILY DIFFdev & AI news
SHIP IT

Elleve linjer JavaScript brød internettet. En afpublicering.

22.

22. marts 2016, 21:30 UTC: en udvikler afpublicerer alle 273 af sine npm-pakker, efter at npm overdrager pakkenavnet "kik" til Kik, beskedappen, hvis patentagent havde lovet "advokater bankende på din dør". En af de 273 er left-pad: elleve linjer, der sætter mellemrum foran en streng, downloadet 2,5 millioner gange om måneden. Inden for få minutter fejler Babel-, React- og Node-builds verden over, hundreder i minuttet. En fork dukker op på ti minutter og ændrer intet, fordi Babel trækker left-pad gennem linjenumre, hvilket "pinner" 0.0.3 præcist. Kl. 23:55 gendanner npm den slettede version fra en backup – den første "un-un-publish" i registrets historie – og en uge senere sender de 24-timers afpubliceringsreglen ud. Postmortem, fra npms egen beretning og e-mailtråden Kik udgav: registret, der lod enhver forfatter slette enhver version uden afhængighedstjek, det transaktive træ løst live ved hver installation, ingen lockfile som standard. Git blame: 60 npm / 25 Kik / 15 afhængighedsvanen. Dom over rettelsen: SHIP IT.

Læs den skriftlige udgave (engelsk) ↗

Hvad denne video dækker

  • 11. mar: Kiks patentagent beder Azer Koçulu om at omdøbe `kik`; en time senere: advokater "bankende på din dør og lukker dine konti"; Azer: 30.000 $; Kik sender e-mails til npm support
  • 18.–20. mar: npms CEO overfører navnet til Kik ("ville med rimelighed forvente, at det var relateret til kik.com"); Azer beder om at få alle sine moduler slettet
  • 22. mar, 21:30–23:55 UTC: 273 pakker afpubliceret; left-pad@0.0.3 404s i Babel, Atom, Node projekter; fork 1.0.0 kl. 21:42; npms CTO tweeter "un-un-publishing" kl. 23:03; 0.0.3 tilbage fra backup kl. 23:55 — 2,5 timer
  • 23. mar og 29. mar: npms postmortem ("vi tabte bolden") og den nye politik: afpublicering kun inden for 24 timer, sikkerhedspladsholdere for fjernede navne (72 timer siden 2020)

Oversat udskrift

Oversat fra den originale engelske fortælling. Tilgængelig lyd og undertekster styres af YouTube.

0:00 En udvikler sletter elleve linjer JavaScript, og inden for få minutter fejler Babel, React- og Node-builds verden over, hundredvis i minuttet. Funktionen er left-pad. Den fylder en streng ud med mellemrum, og sidst på aftenen gør npm det ene ting, det siger, det ikke kan: genudgive en slettet version. Hvordan det sker, hvorfor det er muligt, og hvem der får skylden. Dette er The Daily Diff, postmortem. 11. marts. En patentagent hos Kik, beskedappen,

0:26 sender en e-mail til Azer Koçulu: omdøb din npm-pakke, kik er vores brand. Azer siger nej. En time senere: vores varemærkeadvokater kommer til at banke på din dør og lukke dine konti. Azer nævner en pris, tredive tusind dollars, og Kik sender tråden videre til npm support. 18. marts. npms CEO afgør, at enhver, der skriver npm install kik, forventer beskedappen,

0:48 og overgiver navnet. Azer beder om at få alt sit slettet. To dage senere gør han det selv: to hundrede og treoghalvfjerds pakker. 22. marts, kl. 21:30 UTC. Hvert build, der rækker ud efter left-pad, får en 404. Ti minutter senere genudgiver en fremmed den som 1.0.0, og intet ændrer sig, fordi Babel og Atom indlæser den gennem en pakke kaldet line-numbers, som vil have præcis 0.0.3.

1:13 Kl. 23:03 tweeter npms CTO: un-un-publishing. Kl. 23:55 er 0.0.3 tilbage fra en backup. To en halv time. Hvorfor kan én person gøre dette? Tre grunde. Enhver version på npm kan slettes af dens forfatter, øjeblikkeligt, uden kontrol af, hvem der afhænger af den. For det andet er afhængigheder transaktive: Babel ved ikke, at left-pad eksisterer, den kender line-numbers, og hele træet løses live ved hver installation.

1:36 For det tredje, i 2016 "pinner" intet det træ som standard; lockfiles er "opt-in", så hvert CI-kørsel spørger igen internettet, hvordan elleve linjer kode ser ud. Et register, drevet af ingen, der afhænger af det. git blame. npm, tres procent: deres egen postmortem siger, at ubegrænset afpublicering forårsagede smerten, og, citeret, vi tabte bolden. Kik, femogtyve: en patentagent, ikke en advokat, der lover advokater på døren over et navn, Kik allerede havde besluttet ikke at bruge. Afhængighedsvanen, femten: alle, der npm-installerede elleve linjer i stedet

2:06 for at skrive dem. Inklusive Kik, hvis builds også går i stykker. Eksplosionsradius: to hundrede og treoghalvfjerds pakker trukket, en af dem downloadet to en halv million gange om måneden. Rettelsen tager to en halv time; funktionen tager elleve linjer. På Hacker News, et indlæg der spørger, om vi har glemt, hvordan man programmerer, rammer sytten hundrede point, mest fra folk, hvis builds stadig er røde. Dom, postmortem: SHIP IT.

2:26 npm gendanner fra backup, poster postmortem dagen efter, og inden for en uge sender de reglen ud, der stadig gælder: du kan afpublicere i fireogtyve timer, derefter taler du med et menneske. Mandag: "commit" din lockfile, og hvis en funktion er elleve linjer, er det et afsnit, ikke en afhængighed. Send mig den hændelse, du stadig ikke må tale om, i kommentarerne, eller på the daily diff dot dev. Og det er "the diff" for i dag.

2:48 Jeg er Niko fra Axrisi. Flet ansvarligt.

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

Relaterede videoer