Once líneas de JavaScript rompieron internet. Una despublicación.
22 de marzo de 2016, 21:30 UTC: un desarrollador despublica los 273 de sus 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 llamando a tu puerta".
22 de marzo de 2016, 21:30 UTC: un desarrollador despublica los 273 de sus 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 llamando 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 números de línea, lo que fija la versión 0.0.3 exactamente. A las 23:55 npm restaura la versión eliminada de una copia de seguridad —la primera "des-despublicación" en la historia del registro— y una semana después implementa la regla de despublicación de 24 horas. Postmortem, de la propia cuenta de npm y del 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 archivo de bloqueo 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) ↗
Qué cubre este vídeo
- 11 de marzo: el agente de patentes de Kik pide a Azer Koçulu que cambie el nombre de `kik`; una hora después: abogados "llamando 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 ("esperaría razonablemente 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; [email protected] da 404 en proyectos de Babel, Atom, Node; fork 1.0.0 a las 21:42; el CTO de npm tuitea "des-despublicando" a las 23:03; 0.0.3 vuelve 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 posición 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 están 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 de texto con espacios, y al final de la tarde npm hace lo único que dice no poder hacer: republicar una versión eliminada. Cómo sucede, por qué es posible y quién tiene la culpa. Esto 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 llamando a tu puerta y cerrando tus cuentas. Azer nombra un precio, treinta mil dólares, y Kik reenvía el hilo a npm soporte. 18 de marzo. El CEO de npm dictamina que cualquiera que escriba npm install kik espera la aplicación de mensajería,
0:48 y 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 republica 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: des-despublicando. A las 23:55, 0.0.3 vuelve de 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 left-pad existe, 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 archivos de bloqueo son opcionales, así que cada ejecución de CI vuelve a preguntar a internet cómo son 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 dolor, y, cito, metimos la pata. Kik, veinticinco: 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: todos los que instalaron con npm once líneas en lugar
2:06 de escribirlas. Incluyendo a Kik, cuyas compilaciones también fallan. Radio de explosión: doscientos setenta y tres paquetes retirados, uno de ellos descargado dos millones y medio de veces al mes. La solución lleva dos horas y media; la función ocupa once líneas. En Hacker News, una publicación que pregunta si hemos olvidado cómo programar alcanza mil setecientos puntos, principalmente de personas cuyas compilaciones siguen en rojo. Veredicto, postmortem: SHIP IT.
2:26 npm restaura desde la 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 un humano. Lunes: confirma tu archivo de bloqueo, y si una función tiene once líneas, es un párrafo, no una dependencia. Envíame el incidente del que todavía no se te permite hablar, en los comentarios, o en the daily diff punto 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



