Once liñas de JavaScript romperon internet. Unha despublicación.
22 de marzo de 2016, 21:30 UTC: un desenvolvedor despublica os seus 273 paquetes npm despois de que npm entregue o nome do paquete "kik" a Kik, a aplicación de mensaxería, cuxo axente de patentes prometera "avogados petando á súa porta".
22 de marzo de 2016, 21:30 UTC: un desenvolvedor despublica os seus 273 paquetes npm despois de que npm entregue o nome do paquete "kik" a Kik, a aplicación de mensaxería, cuxo axente de patentes prometera "avogados petando á súa porta". Un dos 273 é left-pad: once liñas que engaden espazos diante dunha cadea, descargadas 2,5 millóns de veces ao mes. En minutos, as compilacións de Babel, React e Node fallan en todo o mundo, centos por minuto. Unha bifurcación aparece en dez minutos e non cambia nada, porque Babel tira de left-pad a través de números de liña, o que fixa 0.0.3 exactamente. Ás 23:55, npm restaura a versión eliminada dunha copia de seguridade —a primeira "des-despublicación" na historia do rexistro— e unha semana despois lanza a regra de despublicación de 24 horas. Postmortem, segundo a propia conta de npm e o fío de correo electrónico que Kik publicou: o rexistro que permitía a calquera autor eliminar calquera versión sen comprobar os dependentes, a árbore transitiva resolvíase en directo en cada instalación, sen lockfile por defecto. Culpable de Git: 60 npm / 25 Kik / 15 o hábito da dependencia. Veredito sobre a solución: SHIP IT.
Ler a edición escrita (inglés) ↗
Que abrangue este vídeo
- 11 de marzo: o axente de patentes de Kik pídelle a Azer Koçulu que cambie o nome de `kik`; unha hora despois: avogados "petando na súa porta e retirando as súas contas"; Azer: 30.000 $; Kik envía correos electrónicos ao soporte de npm
- 18-20 de marzo: o CEO de npm transfire o nome a Kik ("razoablemente esperaría que estivese relacionado con kik.com"); Azer pide que se eliminen todos os seus módulos
- 22 de marzo, 21:30–23:55 UTC: 273 paquetes despublicados; left-pad@0.0.3 404s en proxectos Babel, Atom, Node; fork 1.0.0 ás 21:42; o CTO de npm tuitea "un-un-publishing" ás 23:03; 0.0.3 de volta da copia de seguridade ás 23:55 — 2,5 horas
- 23 e 29 de marzo: o postmortem de npm ("metemos a pata") e a nova política: despublicar só dentro de 24 horas, marcadores de seguridade para nomes eliminados (72 h desde 2020)
Transcrición traducida
Traducido da narración orixinal en inglés. O audio e os subtítulos dispoñibles son controlados por YouTube.
0:00 Un desenvolvedor elimina once liñas de JavaScript, e en minutos Babel, as compilacións de React e Node están fallando en todo o mundo, centos por minuto. A función é left-pad. Engade espazos a unha cadea, e ao final da noite npm fai o única cousa que di que non pode facer: republicar unha versión eliminada. Como sucede, por que é posible e quen ten a culpa. Isto é The Daily Diff, postmortem. 11 de marzo. Un axente de patentes de Kik, a aplicación de mensaxería,
0:26 envíalle un correo electrónico a Azer Koçulu: renomea o teu paquete npm, kik é a nosa marca. Azer di que non. Unha hora despois: os nosos avogados de marcas van estar petando na súa porta e retirando as súas contas. Azer pon un prezo, trinta mil dólares, e Kik reenvía o fío a npm soporte. 18 de marzo. O CEO de npm dita que calquera que escriba npm install kik espera a aplicación de mensaxería,
0:48 e entrega o nome. Azer pide que se elimine todo o seu. Dous días despois faino el mesmo: douscentos setenta e tres paquetes. 22 de marzo, 21:30 UTC. Cada compilación que busca left-pad obtén un 404. Dez minutos despois, un descoñecido republícao como 1.0.0, e nada cambia, porque Babel e Atom cárgano a través dun paquete chamado line-numbers, que quere 0.0.3 exactamente.
1:13 Ás 23:03 o CTO de npm tuitea: un-un-publishing. Ás 23:55, 0.0.3 está de volta dunha copia de seguridade. Dúas horas e media. Por que pode unha persoa facer isto? Tres razóns. Calquera versión en npm pode ser eliminada polo seu autor, instantaneamente, sen comprobar quen depende dela. Segundo, as dependencias son transitivas: Babel non sabe que existe left-pad, coñece line-numbers, e toda a árbore resólvese en directo en cada instalación.
1:36 Terceiro, en 2016 nada fixa esa árbore por defecto; os lockfiles son opt-in, polo que cada execución de CI volve preguntar a internet como son once liñas de código. Un rexistro, dirixido por ninguén que dependa del. git blame. npm, sesenta por cento: o seu propio postmortem di que a despublicación sen restricións causou a dor, e, cito, metemos a pata. Kik, vinte e cinco: un axente de patentes, non un avogado, prometendo avogados na porta por un nome que Kik xa decidira non usar. O hábito da dependencia, quince: todos os que instalaron once liñas con npm en lugar
2:06 de escribilas. Incluíndo a Kik, cuxas compilacións tamén fallan. Radio de explosión: douscentos setenta e tres paquetes eliminados, un deles descargado dous millóns e medio de veces ao mes. A solución leva dúas horas e media; a función leva once liñas. En Hacker News, unha publicación que pregunta se esquecemos como programar acadou mil setecentos puntos, a maioría de persoas cuxas compilacións aínda están en vermello. Veredito, postmortem: SHIP IT.
2:26 npm restaura da copia de seguridade, publica o postmortem ao día seguinte, e nunha semana lanza a regra que aínda está vixente: podes despublicar durante vinte e catro horas, despois diso falas cun humano. Luns: confirma o teu lockfile, e se unha función ten once liñas, é un parágrafo, non unha dependencia. Envía o incidente do que aínda non tes permitido falar, nos comentarios, ou en the daily diff dot dev. E esa é a diferenza por hoxe.
2:48 Son Niko de Axrisi. Fusiona con responsabilidade.
Fontes
- 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



