Undici righe di JavaScript hanno rotto internet. Un'annullamento della pubblicazione.
22 marzo 2016, 21:30 UTC: uno sviluppatore annulla la pubblicazione di tutti i suoi 273 pacchetti npm dopo che npm ha ceduto il nome del pacchetto "kik" a Kik, l'app di messaggistica, il cui agente di brevetti aveva promesso "avvocati alla tua porta".
22 marzo 2016, 21:30 UTC: uno sviluppatore annulla la pubblicazione di tutti i suoi 273 pacchetti npm dopo che npm ha ceduto il nome del pacchetto "kik" a Kik, l'app di messaggistica, il cui agente di brevetti aveva promesso "avvocati alla tua porta". Uno dei 273 è left-pad: undici righe che inseriscono spazi davanti a una stringa, scaricate 2,5 milioni di volte al mese. Nel giro di pochi minuti le build di Babel, React e Node falliscono in tutto il mondo, centinaia al minuto. Una fork appare in dieci minuti e non cambia nulla, perché Babel tira left-pad attraverso i numeri di riga, che blocca esattamente la versione 0.0.3. Alle 23:55 npm ripristina la versione eliminata da un backup — la prima "annullamento dell'annullamento della pubblicazione" nella storia del registro — e una settimana dopo introduce la regola di annullamento della pubblicazione di 24 ore. Postmortem, dal resoconto di npm e dal thread e-mail pubblicato da Kik: il registro che permetteva a qualsiasi autore di eliminare qualsiasi versione senza un controllo delle dipendenze, l'albero transitivo risolto in tempo reale a ogni installazione, nessun lockfile per impostazione predefinita. Colpa di Git: 60 npm / 25 Kik / 15 l'abitudine alle dipendenze. Verdetto sulla soluzione: SHIP IT.
Leggi l'edizione scritta (inglese) ↗
Contenuto di questo video
- 11 marzo: l'agente di brevetti di Kik chiede ad Azer Koçulu di rinominare `kik`; un'ora dopo: avvocati "alla tua porta e che chiudono i tuoi account"; Azer: 30.000 dollari; Kik invia e-mail al supporto npm
- 18–20 marzo: il CEO di npm trasferisce il nome a Kik ("ci si aspetterebbe ragionevolmente che sia correlato a kik.com"); Azer chiede che tutti i suoi moduli vengano eliminati
- 22 marzo, 21:30–23:55 UTC: 273 pacchetti non pubblicati; left-pad@0.0.3 404 nei progetti Babel, Atom, Node; fork 1.0.0 alle 21:42; il CTO di npm twitta "un-un-publishing" alle 23:03; 0.0.3 di nuovo da backup alle 23:55 — 2,5 ore
- 23 e 29 marzo: il postmortem di npm ("abbiamo fallito") e la nuova politica: annulla la pubblicazione solo entro 24 ore, segnaposto di sicurezza per i nomi rimossi (72 ore dal 2020)
Trascrizione tradotta
Tradotto dalla narrazione originale inglese. L'audio e i sottotitoli disponibili sono controllati da YouTube.
0:00 Uno sviluppatore elimina undici righe di JavaScript e, in pochi minuti, Babel, le build di React e Node falliscono in tutto il mondo, centinaia al minuto. La funzione è left-pad. Aggiunge spazi a una stringa e, alla fine della serata, npm fa l'unica cosa che dice di non poter fare: ripubblicare una versione eliminata. Come succede, perché è possibile e chi ne ha la colpa. Questo è The Daily Diff, postmortem. 11 marzo. Un agente di brevetti di Kik, l'app di messaggistica,
0:26 invia un'e-mail ad Azer Koçulu: rinomina il tuo pacchetto npm, kik è il nostro marchio. Azer dice di no. Un'ora dopo: i nostri avvocati specializzati in marchi busseranno alla tua porta e chiuderanno i tuoi account. Azer fa un prezzo, trentamila dollari, e Kik inoltra la conversazione al supporto npm. 18 marzo. Il CEO di npm stabilisce che chiunque digiti npm install kik si aspetta l'app di
0:48 messaggistica e cede il nome. Azer chiede che tutto ciò che gli appartiene venga eliminato. Due giorni dopo lo fa lui stesso: duecentosettantatré pacchetti. 22 marzo, 21:30 UTC. Ogni build che cerca left-pad riceve un 404. Dieci minuti dopo uno sconosciuto lo ripubblica come 1.0.0, e nulla cambia, perché Babel e Atom lo caricano tramite un pacchetto chiamato line-numbers, che vuole esattamente la versione 0.0.3.
1:13 Alle 23:03 il CTO di npm twitta: un-un-publishing (annullamento della non-pubblicazione). Alle 23:55, la versione 0.0.3 è di nuovo disponibile da un backup. Due ore e mezza. Perché una persona può fare questo? Tre ragioni. Qualsiasi versione su npm è eliminabile dal suo autore, istantaneamente, senza alcun controllo su chi ne dipende. Secondo, le dipendenze sono transitive: Babel non sa che left-pad esiste, conosce line-numbers, e l'intero albero viene risolto in tempo reale a ogni installazione.
1:36 Terzo, nel 2016 nulla blocca quell'albero per impostazione predefinita; i lockfile sono opzionali, quindi ogni esecuzione CI chiede di nuovo a internet come appaiono undici righe di codice. Un registro, gestito da nessuno che ne dipenda. Git blame. npm, sessanta percento: il suo stesso postmortem dice che l'annullamento della pubblicazione illimitato ha causato il problema, e, cito, abbiamo fallito. Kik, venticinque percento: un agente di brevetti, non un avvocato, che promette avvocati alla porta per un nome che Kik aveva già deciso di non usare. L'abitudine alle dipendenze, quindici percento: tutti coloro che hanno installato undici righe con npm invece
2:06 di scriverle. Compreso Kik, le cui build si rompono anch'esse. Raggio di esplosione: duecentosettantatré pacchetti ritirati, uno di questi scaricato due milioni e mezzo di volte al mese. La correzione richiede due ore e mezza; la funzione richiede undici righe. Su Hacker News, un post che chiede se abbiamo dimenticato come programmare raggiunge millesettecento punti, principalmente da persone le cui build sono ancora rosse. Verdetto, postmortem: SHIP IT.
2:26 npm ripristina da backup, pubblica il postmortem il giorno successivo, e entro una settimana introduce la regola che è ancora valida: puoi annullare la pubblicazione per ventiquattro ore, dopodiché parli con una persona. Lunedì: effettua il commit del tuo lockfile, e se una funzione è di undici righe, è un paragrafo, non una dipendenza. Inviatemi l'incidente di cui non potete ancora parlare, nei commenti, o a the daily diff dot dev. E questa è la differenza per oggi.
2:48 Sono Niko di Axrisi. Unire responsabilmente.
Fonti
- 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



