+− THE DAILY DIFFdev & AI news
SHIP IT

Onze línies de JavaScript van trencar internet. Una despublicació.

22 de març de 2016, 21:30 UTC: un desenvolupador despublica els seus 273 paquets npm després que npm lliurés el nom del paquet "kik" a Kik, l'aplicació de missatgeria, l'agent de patents de la qual havia promès "advocats trucant a la teva porta".

22 de març de 2016, 21:30 UTC: un desenvolupador despublica els seus 273 paquets npm després que npm lliurés el nom del paquet "kik" a Kik, l'aplicació de missatgeria, l'agent de patents de la qual havia promès "advocats trucant a la teva porta". Un dels 273 és left-pad: onze línies que posen espais davant d'una cadena, descarregades 2,5 milions de vegades al mes. En qüestió de minuts, les compilacions de Babel, React i Node fallen a tot el món, centenars per minut. Una bifurcació apareix en deu minuts i no canvia res, perquè Babel estira left-pad a través de line-numbers, que fixa la versió 0.0.3 exactament. A les 23:55 npm restaura la versió esborrada d'una còpia de seguretat —la primera "des-despublicació" en la història del registre— i una setmana després implementa la regla de despublicació de 24 hores. Postmortem, segons el propi compte de npm i el fil de correus electrònics publicat per Kik: el registre que permetia a qualsevol autor eliminar qualsevol versió sense comprovació de dependents, l'arbre transitiu resolt en directe a cada instal·lació, cap lockfile per defecte. Culpa de Git: 60 npm / 25 Kik / 15 l'hàbit de dependència. Veredicte sobre la solució: SHIP IT.

Llegeix l'edició escrita (anglès) ↗

Què cobreix aquest vídeo

  • 11 de març: l'agent de patents de Kik demana a Azer Koçulu que reanomeni `kik`; una hora després: advocats "trucant a la teva porta i tancant els teus comptes"; Azer: 30.000 $; Kik envia correus electrònics al suport de npm
  • 18-20 de març: el CEO de npm transfereix el nom a Kik ("raonablement s'esperaria que estigués relacionat amb kik.com"); Azer demana que s'eliminin tots els seus mòduls
  • 22 de març, 21:30–23:55 UTC: 273 paquets despublicats; left-pad@0.0.3 dona 404 en projectes Babel, Atom, Node; fork 1.0.0 a les 21:42; el CTO de npm tuiteja "un-un-publishing" a les 23:03; 0.0.3 torna de la còpia de seguretat a les 23:55 — 2,5 hores
  • 23 i 29 de març: el postmortem de npm ("la vam cagar") i la nova política: despublicar només en 24 hores, marcadors de seguretat per a noms eliminats (72 h des de 2020)

Transcripció traduïda

Traduït de la narració original en anglès. L'àudio i els subtítols disponibles estan controlats per YouTube.

0:00 Un desenvolupador esborra onze línies de JavaScript, i en qüestió de minuts Babel, les compilacions de React i Node fallen a tot el món, centenars per minut. La funció és left-pad. Posa espais davant d'una cadena, i al final de la tarda npm fa l'únic que diu que no pot fer: republicar una versió eliminada. Com passa, per què és possible i qui en té la culpa. Això és The Daily Diff, postmortem. 11 de març. Un agent de patents de Kik, l'aplicació de missatgeria,

0:26 envia un correu electrònic a Azer Koçulu: reanomena el teu paquet npm, kik és la nostra marca. Azer diu que no. Una hora després: els nostres advocats de marques trucaran a la vostra porta i us tancaran els comptes. Azer posa un preu, trenta mil dòlars, i Kik reenvia el fil a npm suport. 18 de març. El CEO de npm dictamina que qualsevol que escrigui npm install kik espera l'aplicació de missatgeria,

0:48 i lliura el nom. Azer demana que s'esborri tot el que és seu. Dos dies després ho fa ell mateix: dos-cents setanta-tres paquets. 22 de març, 21:30 UTC. Cada compilació que busca left-pad rep un 404. Deu minuts després un desconegut el republica com a 1.0.0, i res canvia, perquè Babel i Atom el carreguen a través d'un paquet anomenat line-numbers, que vol exactament la versió 0.0.3.

1:13 A les 23:03 el CTO de npm tuiteja: un-un-publishing. A les 23:55, la 0.0.3 torna d'una còpia de seguretat. Dues hores i mitja. Per què pot fer això una persona? Tres raons. Qualsevol versió de npm pot ser esborrada pel seu autor, instantàniament, sense comprovar qui en depèn. Segon, les dependències són transitives: Babel no sap que left-pad existeix, coneix line-numbers, i tot l'arbre es resol en directe a cada instal·lació.

1:36 Tercer, el 2016 res fixava aquest arbre per defecte; els lockfiles eren opcionals, de manera que cada execució de CI tornava a preguntar a internet com eren onze línies de codi. Un registre, gestionat per ningú que en depengui. Git blame. npm, seixanta per cent: el seu propi postmortem diu que la despublicació sense restriccions va causar el problema, i, cito, la vam cagar. Kik, vint-i-cinc: un agent de patents, no un advocat, prometent advocats a la porta per un nom que Kik ja havia decidit no utilitzar. L'hàbit de dependència, quinze: tothom que va instal·lar onze línies amb npm en lloc

2:06 d'escriure-les. Inclòs Kik, les compilacions del qual també es van trencar. Radi de blast: dos-cents setanta-tres paquets eliminats, un d'ells descarregat dos milions i mig de vegades al mes. La solució triga dues hores i mitja; la funció ocupa onze línies. A Hacker News, una publicació que pregunta si hem oblidat com programar arriba a mil set-cents punts, la majoria de persones les compilacions de les quals encara són vermelles. Veredicte, postmortem: SHIP IT.

2:26 npm restaura des de la còpia de seguretat, publica el postmortem l'endemà, i en una setmana implementa la regla que encara es manté: pots despublicar durant vint-i-quatre hores, després d'això parles amb un humà. Dilluns: fes commit al teu lockfile, i si una funció té onze línies, és un paràgraf, no una dependència. Envia'm l'incident del qual encara no se't permet parlar, als comentaris, o a the daily diff dot dev. I aquesta és la diferència d'avui.

2:48 Sóc en Niko d'Axrisi. Fusiona amb responsabilitat.

Fonts

  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

Vídeos relacionats