+− THE DAILY DIFFdev & AI news
SHIP IT

Elf Zeilen JavaScript haben das Internet kaputt gemacht. Eine Veröffentlichung rückgängig machen.

22.

22. März 2016, 21:30 UTC: Ein Entwickler veröffentlicht alle 273 seiner npm-Pakete, nachdem npm den Paketnamen „kik“ an Kik, die Messaging-App, übergibt, deren Patentanwalt „Anwälte, die an Ihrer Tür klopfen“ versprochen hatte. Eines der 273 ist left-pad: elf Zeilen, die Leerzeichen vor eine Zeichenkette setzen und monatlich 2,5 Millionen Mal heruntergeladen werden. Innerhalb weniger Minuten scheitern Babel-, React- und Node-Builds weltweit, Hunderte pro Minute. Ein Fork erscheint in zehn Minuten und ändert nichts, da Babel left-pad über Zeilennummern zieht, was genau 0.0.3 fixiert. Um 23:55 Uhr stellt npm die gelöschte Version aus einem Backup wieder her – die erste „un-un-publish“ in der Geschichte des Registrierungsdienstes – und eine Woche später wird die 24-Stunden-Unpublish-Regel eingeführt. Postmortem, aus npm's eigenem Bericht und dem E-Mail-Thread, den Kik veröffentlichte: Das Register, das jedem Autor erlaubte, jede Version ohne Abhängigkeitsprüfung zu löschen, der transitive Baum, der bei jeder Installation live aufgelöst wurde, kein Lockfile standardmäßig. Git blame: 60 npm / 25 Kik / 15 die Abhängigkeitsgewohnheit. Urteil zur Behebung: SHIP IT.

Die schriftliche Ausgabe lesen (Englisch) ↗

Was dieses Video behandelt

  • 11. März: Kiks Patentanwalt bittet Azer Koçulu, `kik` umzubenennen; eine Stunde später: Anwälte „klopfen an Ihre Tür und sperren Ihre Konten“; Azer: 30.000 $; Kik schickt E-Mails an den npm-Support
  • 18.–20. März: der CEO von npm überträgt den Namen an Kik („würde vernünftigerweise erwarten, dass er mit kik.com in Verbindung steht“); Azer bittet um Löschung all seiner Module
  • 22. März, 21:30–23:55 UTC: 273 Pakete unveröffentlicht; left-pad@0.0.3 404s in Babel-, Atom-, Node-Projekten; Fork 1.0.0 um 21:42; npm's CTO twittert „un-un-publishing“ um 23:03; 0.0.3 zurück aus dem Backup um 23:55 – 2,5 Stunden
  • 23. und 29. März: npm's Postmortem („wir haben den Ball fallen lassen“) und die neue Richtlinie: Veröffentlichung nur innerhalb von 24 Stunden rückgängig machen, Sicherheitspatze für entfernte Namen (72 Stunden seit 2020)

Übersetztes Transkript

Aus der englischen Originalerzählung übersetzt. Verfügbare Audio- und Untertitel werden von YouTube gesteuert.

0:00 Ein Entwickler löscht elf Zeilen JavaScript, und innerhalb weniger Minuten ist Babel, React- und Node-Builds schlagen weltweit fehl, hunderte pro Minute. Die Funktion ist left-pad. Sie füllt eine Zeichenkette mit Leerzeichen, und am Ende des Abends tut npm das Eine Sache, die es angeblich nicht kann: eine gelöschte Version erneut veröffentlichen. Wie es passiert, warum es möglich ist und wer die Schuld trägt. Das ist The Daily Diff, postmortem. 11. März. Ein Patentanwalt bei Kik, der Messaging-App,

0:26 sendet eine E-Mail an Azer Koçulu: Benennen Sie Ihr npm-Paket um, kik ist unsere Marke. Azer sagt nein. Eine Stunde später: unsere Markenanwälte werden an Ihrer Tür klopfen und Ihre Konten sperren. Azer nennt einen Preis, dreißigtausend Dollar, und Kik leitet den Thread an npm weiter Support. 18. März. Der CEO von npm entscheidet, dass jeder, der npm install kik eingibt, die Messaging-App erwartet,

0:48 und übergibt den Namen. Azer bittet darum, alles von ihm löschen zu lassen. Zwei Tage später tut er es selbst: zweihundertsiebundsiebzig Pakete. 22. März, 21:30 UTC. Jeder Build, der auf left-pad zugreift, erhält einen 404. Zehn Minuten später veröffentlicht ein Fremder es als 1.0.0 erneut, und nichts ändert sich, weil Babel und Atom es über ein Paket namens line-numbers laden, das genau 0.0.3 benötigt.

1:13 Um 23:03 twittert der CTO von npm: un-un-publishing. Um 23:55 Uhr ist 0.0.3 aus einem Backup zurück. Zweieinhalb Stunden. Warum kann eine Person das tun? Drei Gründe. Jede Version auf npm kann von ihrem Autor gelöscht werden, sofort, ohne Prüfung, wer davon abhängt. Zweitens sind Abhängigkeiten transitiv: Babel weiß nicht, dass left-pad existiert, es kennt line-numbers, und der gesamte Baum wird bei jeder Installation live aufgelöst.

1:36 Drittens, im Jahr 2016 fixiert nichts diesen Baum standardmäßig; Lockfiles sind optional, so fragt jeder CI-Lauf das Internet erneut, wie elf Zeilen Code aussehen. Ein Register, betrieben von niemandem, der davon abhängt. Git blame. npm, sechzig Prozent: ihr eigenes Postmortem besagt, dass uneingeschränktes Unpublishing den Schmerz verursacht hat, und, Zitat, wir haben den Ball fallen lassen. Kik, fünfundzwanzig: ein Patentanwalt, kein Anwalt, versprochene Anwälte vor der Tür wegen eines Namens, den Kik bereits beschlossen hatte, nicht zu verwenden. Die Abhängigkeitsgewohnheit, fünfzehn: jeder, der elf Zeilen npm-installiert hat, anstatt

2:06 sie einzutippen. Einschließlich Kik, dessen Builds ebenfalls kaputt gehen. Einschlagsradius: zweihundertsiebundsiebzig Pakete gezogen, eines davon wird zweieinhalb Millionen Mal im Monat heruntergeladen. Die Behebung dauert zweieinhalb Stunden; die Funktion braucht elf Zeilen. Auf Hacker News erreicht ein Beitrag, der fragt, ob wir vergessen haben, wie man programmiert, siebzehnhundert Punkte, hauptsächlich von Leuten, deren Builds immer noch rot sind. Urteil, Postmortem: SHIP IT.

2:26 npm stellt aus dem Backup wieder her, veröffentlicht das Postmortem am nächsten Tag, und innerhalb einer Woche wird die Regel eingeführt, die immer noch gilt: Sie können die Veröffentlichung für vierundzwanzig Stunden rückgängig machen, danach sprechen Sie mit einem Menschen. Montag: committen Sie Ihre Lockfile, und wenn eine Funktion elf Zeilen hat, ist es ein Absatz, keine Abhängigkeit. Senden Sie mir den Vorfall, über den Sie immer noch nicht sprechen dürfen, in den Kommentaren oder unter the daily diff dot dev. Und das ist der Diff für heute.

2:48 Ich bin Niko von Axrisi. Verantwortungsvoll mergen.

Quellen

  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

Ähnliche Videos