+− THE DAILY DIFFdev & AI news
SHIP IT

Έντεκα γραμμές JavaScript διέλυσαν το διαδίκτυο. Μια ανάκληση δημοσίευσης.

22 Μαρτίου 2016, 21:30 UTC: ένας προγραμματιστής ανακαλεί τη δημοσίευση και των 273 πακέτων του npm αφότου το npm παραδίδει το όνομα πακέτου «kik» στην Kik, την εφαρμογή ανταλλαγής μηνυμάτων, της οποίας ο πράκτορας ευρεσιτεχνιών είχε υποσχεθεί «δικηγόρους να χτυπούν την πόρτα σας».

22 Μαρτίου 2016, 21:30 UTC: ένας προγραμματιστής ανακαλεί τη δημοσίευση και των 273 πακέτων του npm αφότου το npm παραδίδει το όνομα πακέτου «kik» στην Kik, την εφαρμογή ανταλλαγής μηνυμάτων, της οποίας ο πράκτορας ευρεσιτεχνιών είχε υποσχεθεί «δικηγόρους να χτυπούν την πόρτα σας». Ένα από τα 273 είναι το left-pad: έντεκα γραμμές που προσθέτουν κενά στην αρχή μιας συμβολοσειράς, το οποίο κατεβαίνει 2,5 εκατομμύρια φορές τον μήνα. Μέσα σε λίγα λεπτά, οι κατασκευές Babel, React και Node αποτυγχάνουν παγκοσμίως, εκατοντάδες ανά λεπτό. Ένα fork εμφανίζεται σε δέκα λεπτά και δεν αλλάζει τίποτα, επειδή το Babel τραβάει το left-pad μέσω αριθμών γραμμών, οι οποίοι καρφώνουν ακριβώς την έκδοση 0.0.3. Στις 23:55 το npm επαναφέρει την διαγραμμένη έκδοση από ένα backup — την πρώτη «μη-μη-δημοσίευση» στην ιστορία του μητρώου — και μια εβδομάδα αργότερα εφαρμόζει τον κανόνα ανάκλησης δημοσίευσης 24 ωρών. Μεταθανάτια ανάλυση, από τον ίδιο τον λογαριασμό του npm και το νήμα email που δημοσίευσε η Kik: το μητρώο που επέτρεπε σε οποιονδήποτε συγγραφέα να διαγράψει οποιαδήποτε έκδοση χωρίς έλεγχο εξαρτήσεων, το μεταβατικό δέντρο επιλύθηκε ζωντανά σε κάθε εγκατάσταση, χωρίς αρχείο κλειδώματος από προεπιλογή. Git blame: 60 npm / 25 Kik / 15 η συνήθεια εξάρτησης. Ετυμηγορία για τη διόρθωση: SHIP IT.

Διαβάστε την γραπτή έκδοση (Αγγλικά) ↗

Τι καλύπτει αυτό το βίντεο

  • 11 Μαρτίου: Ο πράκτορας ευρεσιτεχνιών της Kik ζητά από τον Azer Koçulu να μετονομάσει το `kik`. Μία ώρα αργότερα: δικηγόροι «χτυπούν την πόρτα σας και καταργούν τους λογαριασμούς σας». Azer: $30.000. Η Kik στέλνει email στην υποστήριξη του npm.
  • 18–20 Μαρτίου: Ο CEO του npm μεταφέρει το όνομα στην Kik («θα περίμενε εύλογα να σχετίζεται με το kik.com»). Ο Azer ζητά να διαγραφούν όλα του τα modules.
  • 22 Μαρτίου, 21:30–23:55 UTC: 273 πακέτα ανακαλούνται. Το [email protected] εμφανίζει 404 σε έργα Babel, Atom, Node. Fork 1.0.0 στις 21:42. Ο CTO του npm τουιτάρει «un-un-publishing» στις 23:03. Το 0.0.3 επιστρέφει από backup στις 23:55 — 2,5 ώρες.
  • 23 και 29 Μαρτίου: Η μεταθανάτια ανάλυση του npm («τα κάναμε θάλασσα») και η νέα πολιτική: ανάκληση δημοσίευσης μόνο εντός 24 ωρών, θέσεις ασφαλείας για αφαιρεμένα ονόματα (72 ώρες από το 2020).

Μεταφρασμένη μεταγραφή

Μεταφράστηκε από την πρωτότυπη αγγλική αφήγηση. Ο διαθέσιμος ήχος και οι υπότιτλοι ελέγχονται από το YouTube.

0:00 Ένας προγραμματιστής διαγράφει έντεκα γραμμές JavaScript, και μέσα σε λίγα λεπτά το Babel, οι κατασκευές React και Node αποτυγχάνουν παγκοσμίως, εκατοντάδες ανά λεπτό. Η λειτουργία είναι left-pad. Προσθέτει κενά σε μια συμβολοσειρά, και μέχρι το τέλος του βραδιού το npm κάνει το ένα πράγμα που λέει ότι δεν μπορεί να κάνει: να επαναδημοσιεύσει μια διαγραμμένη έκδοση. Πώς συμβαίνει, γιατί είναι δυνατό, και ποιος φταίει. Αυτό είναι το The Daily Diff, μεταθανάτια ανάλυση. 11 Μαρτίου. Ένας πράκτορας ευρεσιτεχνιών της Kik, της εφαρμογής ανταλλαγής μηνυμάτων,

0:26 στέλνει email στον Azer Koçulu: μετονομάστε το πακέτο σας npm, το kik είναι η επωνυμία μας. Ο Azer λέει όχι. Μία ώρα αργότερα: οι δικηγόροι μας για τα εμπορικά σήματα θα χτυπούν την πόρτα σας και θα καταργήσουν τους λογαριασμούς σας. Ο Azer ορίζει μια τιμή, τριάντα χιλιάδες δολάρια, και η Kik προωθεί το νήμα στο npm υποστήριξη. 18 Μαρτίου. Ο CEO του npm αποφασίζει ότι όποιος πληκτρολογεί npm install kik περιμένει την εφαρμογή ανταλλαγής

0:48 μηνυμάτων, και παραδίδει το όνομα. Ο Azer ζητά να διαγραφούν όλα του. Δύο μέρες αργότερα το κάνει μόνος του: διακόσια εβδομήντα τρία πακέτα. 22 Μαρτίου, 21:30 UTC. Κάθε κατασκευή που αναζητά το left-pad λαμβάνει ένα 404. Δέκα λεπτά αργότερα ένας άγνωστος το επαναδημοσιεύει ως 1.0.0, και τίποτα δεν αλλάζει, επειδή το Babel και το Atom το φορτώνουν μέσω ενός πακέτου που ονομάζεται line-numbers, το οποίο θέλει ακριβώς το 0.0.3.

1:13 Στις 23:03 ο CTO του npm τουιτάρει: un-un-publishing. Στις 23:55, το 0.0.3 επιστρέφει από ένα backup. Δυόμισι ώρες. Γιατί μπορεί ένα άτομο να το κάνει αυτό; Τρεις λόγοι. Οποιαδήποτε έκδοση στο npm μπορεί να διαγραφεί από τον συγγραφέα της, άμεσα, χωρίς έλεγχο του ποιος εξαρτάται από αυτήν. Δεύτερον, οι εξαρτήσεις είναι μεταβατικές: το Babel δεν γνωρίζει ότι το left-pad υπάρχει, γνωρίζει το line-numbers, και ολόκληρο το δέντρο επιλύεται ζωντανά σε κάθε εγκατάσταση.

1:36 Τρίτον, το 2016 τίποτα δεν καρφώνει αυτό το δέντρο από προεπιλογή. Τα lockfiles είναι opt-in, οπότε κάθε εκτέλεση CI ξαναρωτά το διαδίκτυο πώς μοιάζουν έντεκα γραμμές κώδικα. Ένα μητρώο, που δεν το τρέχει κανείς που να εξαρτάται από αυτό. Git blame. npm, εξήντα τοις εκατό: η δική του μεταθανάτια ανάλυση λέει ότι η απεριόριστη ανάκληση δημοσίευσης προκάλεσε τον πόνο, και, κατά λέξη, τα κάναμε θάλασσα. Kik, είκοσι πέντε: ένας πράκτορας ευρεσιτεχνιών, όχι δικηγόρος, υποσχόμενος δικηγόρους στην πόρτα για ένα όνομα που η Kik είχε ήδη αποφασίσει να μην χρησιμοποιήσει. Η συνήθεια εξάρτησης, δεκαπέντε: όλοι όσοι εγκατέστησαν έντεκα γραμμές με npm αντί

2:06 να τις πληκτρολογήσουν. Συμπεριλαμβανομένης της Kik, των οποίων οι κατασκευές επίσης αποτυγχάνουν. Εμβέλεια έκρηξης: διακόσια εβδομήντα τρία πακέτα αποσύρθηκαν, ένα από αυτά κατέβηκε δυόμισι εκατομμύρια φορές τον μήνα. Η διόρθωση παίρνει δυόμισι ώρες. Η συνάρτηση παίρνει έντεκα γραμμές. Στο Hacker News, μια ανάρτηση που ρωτούσε αν έχουμε ξεχάσει πώς να προγραμματίζουμε φτάνει χίλιους επτακόσιους πόντους, κυρίως από ανθρώπους των οποίων οι κατασκευές είναι ακόμα κόκκινες. Ετυμηγορία, μεταθανάτια ανάλυση: SHIP IT.

2:26 Το npm επαναφέρει από backup, δημοσιεύει τη μεταθανάτια ανάλυση την επόμενη μέρα, και μέσα σε μια εβδομάδα εφαρμόζει τον κανόνα που ισχύει ακόμα: μπορείτε να ανακαλέσετε δημοσίευση για είκοσι τέσσερις ώρες, μετά από αυτό μιλάτε με έναν άνθρωπο. Δευτέρα: κάντε commit το lockfile σας, και αν μια συνάρτηση είναι έντεκα γραμμές, είναι μια παράγραφος, όχι μια εξάρτηση. Στείλτε μου το συμβάν για το οποίο ακόμα δεν σας επιτρέπεται να μιλήσετε, στα σχόλια, ή στο the daily diff dot dev. Και αυτή είναι η διαφορά για σήμερα.

2:48 Είμαι ο Νίκος από την Axrisi. Συγχωνεύστε υπεύθυνα.

Πηγές

  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

Σχετικά βίντεο

postmortem · el · 25 Σεπ 2026

Ένα σφάλμα ενός χιλιοστού του δευτερολέπτου σταμάτησε την εναέρια κυκλοφορία του Ηνωμένου Βασιλείου. Έξι ώρες.

Στις 10:00 το πρωί της Τρίτης, 8 Σεπτεμβρίου, μια αίτηση ρουτίνας για κωδικό squawk εντός του Εθνικού Συστήματος Εναέριου Χώρου (NAS) της NATS διακόπτεται από ένα μήνυμα υψηλότερης προτεραιότητας ενώ

3:06 ↗
postmortem · el · 22 Σεπ 2026

Μια επανεκκίνηση έστειλε την Telstra στο 2006. Εννέα εκατομμύρια τηλέφωνα.

Ένας μηχανικός στη Μελβούρνη ενεργοποιεί ξανά ένα χρονομετρικό σασί στις 2:50 π.μ. και μέχρι το πρωινό το μεγαλύτερο δίκτυο κινητής τηλεφωνίας της Αυστραλίας συμφωνεί ότι είναι Νοέμβριος 2006. 8 Ιουλί

3:15 ↗