Once líneas de JavaScript rompieron el internet. Una despublicación.
22 de marzo de 2016, 21:30 UTC: un desarrollador despublica todos sus 273 paquetes npm después de que npm le entregara el nombre del paquete "kik" a Kik, la aplicación de mensajería, cuyo agente de patentes había prometido "abogados tocando a tu puerta".
22 de marzo de 2016, 21:30 UTC: un desarrollador despublica todos sus 273 paquetes npm después de que npm le entregara el nombre del paquete "kik" a Kik, la aplicación de mensajería, cuyo agente de patentes había prometido "abogados tocando a tu puerta". Uno de los 273 es left-pad: once líneas que ponen espacios delante de una cadena de texto, descargado 2.5 millones de veces al mes. En cuestión de minutos, las compilaciones de Babel, React y Node fallan en todo el mundo, cientos por minuto. Una bifurcación aparece en diez minutos y no cambia nada, porque Babel extrae left-pad a través de line-numbers, lo que fija 0.0.3 exactamente. A las 23:55, npm restaura la versión eliminada desde una copia de seguridad —la primera "des-des-publicación" en la historia del registro— y una semana después implementa la regla de despublicación de 24 horas. Postmortem, según la propia cuenta de npm y el hilo de correo electrónico que Kik publicó: el registro que permitía a cualquier autor eliminar cualquier versión sin verificación de dependientes, el árbol transitivo resuelto en vivo en cada instalación, sin lockfile por defecto. Git blame: 60 npm / 25 Kik / 15 el hábito de la dependencia. Veredicto sobre la solución: SHIP IT.
Leer la edición escrita (inglés) ↗
Lo que cubre este video
- 11 de marzo: el agente de patentes de Kik le pide a Azer Koçulu que cambie el nombre de `kik`; una hora después: abogados "tocando a tu puerta y cerrando tus cuentas"; Azer: $30,000; Kik envía correos electrónicos al soporte de npm
- 18–20 de marzo: el CEO de npm transfiere el nombre a Kik ("razonablemente esperaría que estuviera relacionado con kik.com"); Azer pide que se eliminen todos sus módulos
- 22 de marzo, 21:30–23:55 UTC: 273 paquetes despublicados; left-pad@0.0.3 devuelve 404 en proyectos de Babel, Atom, Node; fork 1.0.0 a las 21:42; el CTO de npm tuitea "un-un-publishing" a las 23:03; 0.0.3 de vuelta de la copia de seguridad a las 23:55 — 2.5 horas
- 23 y 29 de marzo: el postmortem de npm ("metimos la pata") y la nueva política: despublicar solo dentro de las 24 horas, marcadores de seguridad para nombres eliminados (72 h desde 2020)
Transcripción traducida
Traducido de la narración original en inglés. El audio y los subtítulos disponibles son controlados por YouTube.
0:00 Un desarrollador elimina once líneas de JavaScript y en cuestión de minutos, Babel, las compilaciones de React y Node están fallando en todo el mundo, cientos por minuto. La función es left-pad. Rellena una cadena con espacios, y al final de la tarde npm hace lo único que dice que no puede hacer: volver a publicar una versión eliminada. Cómo sucede, por qué es posible y quién tiene la culpa. Este es The Daily Diff, postmortem. 11 de marzo. Un agente de patentes de Kik, la aplicación de mensajería,
0:26 envía un correo electrónico a Azer Koçulu: cambia el nombre de tu paquete npm, kik es nuestra marca. Azer dice que no. Una hora después: nuestros abogados de marcas van a estar tocando a tu puerta y cerrando tus cuentas. Azer pone un precio, treinta mil dólares, y Kik reenvía el hilo al soporte de npm. 18 de marzo. El CEO de npm dictamina que cualquiera que escriba npm install kik espera la aplicación de
0:48 mensajería, y le entrega el nombre. Azer pide que se elimine todo lo suyo. Dos días después lo hace él mismo: doscientos setenta y tres paquetes. 22 de marzo, 21:30 UTC. Cada compilación que busca left-pad obtiene un 404. Diez minutos después, un extraño lo vuelve a publicar como 1.0.0, y nada cambia, porque Babel y Atom lo cargan a través de un paquete llamado line-numbers, que quiere exactamente la versión 0.0.3.
1:13 A las 23:03, el CTO de npm tuitea: un-un-publishing. A las 23:55, la versión 0.0.3 está de vuelta desde una copia de seguridad. Dos horas y media. ¿Por qué una persona puede hacer esto? Tres razones. Cualquier versión en npm es eliminable por su autor, instantáneamente, sin verificar quién depende de ella. Segundo, las dependencias son transitivas: Babel no sabe que existe left-pad, conoce line-numbers, y todo el árbol se resuelve en vivo en cada instalación.
1:36 Tercero, en 2016 nada fija ese árbol por defecto; los lockfiles son opcionales, así que cada ejecución de CI vuelve a preguntar a internet cómo se ven once líneas de código. Un registro, gestionado por nadie que dependa de él. git blame. npm, sesenta por ciento: su propio postmortem dice que la despublicación sin restricciones causó el problema, y, cito, metimos la pata. Kik, veinticinco por ciento: un agente de patentes, no un abogado, prometiendo abogados en la puerta por un nombre que Kik ya había decidido no usar. El hábito de la dependencia, quince por ciento: todos los que instalaron once líneas con npm en lugar
2:06 de escribirlas. Incluyendo a Kik, cuyas compilaciones también fallan. Radio de impacto: doscientos setenta y tres paquetes eliminados, uno de ellos descargado dos millones y medio de veces al mes. La solución toma dos horas y media; la función toma once líneas. En Hacker News, una publicación que pregunta si hemos olvidado cómo programar llega a mil setecientos puntos, principalmente de personas cuyas compilaciones siguen en rojo. Veredicto, postmortem: SHIP IT.
2:26 npm restaura desde una copia de seguridad, publica el postmortem al día siguiente, y en una semana implementa la regla que aún se mantiene: puedes despublicar durante veinticuatro horas, después de eso hablas con una persona. Lunes: confirma tu lockfile, y si una función tiene once líneas, es un párrafo, no una dependencia. Envíame el incidente del que aún no te está permitido hablar, en los comentarios, o en the daily diff dot dev. Y esa es la diferencia de hoy.
2:48 Soy Niko de Axrisi. Fusiona con responsabilidad.
Fuentes
- 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



