This graph shows how many times the word ______ has been mentioned throughout the history of the program.
El maravilloso caso de cómo han roto NPM.
Es una historia de verdad emocionante, rara.
No sé cómo definirla, sinceramente.
Porque es como cómo ha podido pasar esto y por qué puede pasar esto.
Es que es increíble.
Una broma. Esto empezó como una broma.
Ha dejado a los desarrolladores de NPM que no pueden despublicar paquetes.
¿Vale? Despublicar paquetes.
La broma del registro de NPM deja a los desarrolladores incapaces de publicar paquetes.
No es de publicar, es de despublicar.
Yo os explico por qué.
El tema, os voy a explicar una historia, una historia de viejito.
El tema es que si tú publicas en NPM un paquete, imagínate, yo qué sé.
Yo publico React Slyvy, ¿vale?
Que es un paquete que es mío de hace mil años.
Yo publico esto y digo, me equivoqué con algo.
Me he equivocado.
Lo voy a despublicar porque está mal, ¿vale?
Me he equivocado, lo voy a despublicar.
Durante un tiempo lo puedes despublicar.
Puedes echarlo para atrás.
Pero, ¿qué pasa?
Que si por lo que sea, por lo que sea, viene una persona y ya lo utiliza, ya no lo puedes despublicar.
Porque es que le puedes romper directamente la web, las builds y puedes romper internet, básicamente.
Eso es lo que pasó con el mítico caso de este paquete.
Left Pat.
Este hombre, Steve Mao, estaba cansado de trabajar en el open source y dijo, ¿sabéis qué?
Este proyecto, que cada vez se utiliza menos, pero antes lo utilizaban millones y millones de paquetes, dijo, pues lo voy a despublicar para que nadie lo pueda utilizar.
¿Y qué pasó?
Pues que, claro, rompió internet porque un montón de gente lo utilizaba.
Y desde entonces que hizo de NPM, dijo, vale, pues ya no se pueden despublicar paquetes.
¿Qué ha pasado?
Pues que en este caso va alguien y dice, bueno, voy a tener una idea buenísima.
Voy a tener una idea buenísima.
Voy a crear un paquete que le voy a llamar Everything.
Que ocupa 80 megas.
Ojo con esto.
80 megas y tiene efectivamente todos los paquetes de NPM.
Todos los paquetes de NPM en una sola dependencia.
O sea, que lo que ha hecho este hombre era que todo el registro de NPM, ahora lo han quitado,
pero tenías todo el registro de NPM en una sola dependencia, ¿vale?
Todo el registro, todo, todo.
En una sola dependencia, todo.
El tío se había descargado todo NPM y lo había hecho en una sola dependencia, ¿vale?
Y le llamó Everything.
Y lo publicó, pues, hace 10 días ahí, tranquilo.
Y punto.
Ya está.
¿Qué pasó?
Que, claro, como de repente, de repente, este paquete tiene como dependencia,
utiliza todos los paquetes del registro de NPM, bloquea de repente,
bloquea que a todos los paquetes de NPM que se puedan despublicar.
Ya sea que tienes un error grave, lo que sea, lo que sea.
Imagínate que tú publicas sin querer una versión y hay un error grave que tienes que arreglar,
que no quieres que esté publicado y tal, pues ya no puedes quitarlo.
Ya no puedes quitarlo.
O sea, ya lo tienes ahí.
Y encima no solo era el paquete, es que eran todas las versiones de los paquetes.
Por lo tanto, por lo tanto, ya tampoco podrías despublicar ninguna versión nunca jamás, ¿vale?
Y entonces el tío se folló NPM, básicamente.
Eso es lo que hizo.
Si vais al package.json, lo tenemos por aquí, a ver si lo encontramos, que me lo ha pasado alguien.
Bueno, aquí dice everything file punto.
Claro, lo malo es que no sé si podremos mirar aquí.
Ah, no, no vamos a poder mirar el paquete, como lo había puesto todo.
Holders, everything.
Claro, everything es así mismo, así mismo.
Everything.
Es que me gustaría ver qué ha pasado.
Claro, como era tan peligroso esto, como era tan peligroso,
lo que ha hecho es que GitHub le ha quitado por el tema.
Mira, encontramos que el proyecto violaba las políticas de uso aceptable de GitHub,
que prohíben el comportamiento que interrumpe significativamente o continuamente
la experiencia de otros usuarios y también viola el código de conducta de NPM.
Hemos resuelto el problema, ¿vale?
Y estamos trabajando para eliminar los paquetes.
Y dice, hasta el jueves por la mañana el repositorio everything había sido eliminado de GitHub.
Y eso es lo que ha pasado.
O sea, lo que ha pasado es que lo rompió.
El 29 de diciembre se publicó un paquete titulado everything,
que está diseñado para instalar todos los demás paquetes públicos en el registro.
Creó una red de dependencias en todo el registro que deshabilitó efectivamente
la capacidad inédita de despublicar paquetes en el sitio,
ya que los paquetes que dependen de otros paquetes no los puedes quitar.
El incidente provocó respuestas a desarrolladores que no pudieron publicar
paquetes obsoletos experimentales.
Y un montón de críticas que algunos vieron el truco como un abuso del sistema.
Bueno, ya, pero si se puede, pues ¿por qué no iba a poder hacerlo, no?
Dice, pensamos que sería divertido.
No sabíamos que todo esto iba a ocurrir.
Pero el tema, más de 2 millones de paquetes de NPM atrapados en el Dependency Hell.
Por si algún día, si algún día estabais preocupados de una dependencia
que me instala muchas dependencias, pensad que siempre tendréis el caso este
de una dependencia que las instalaba literalmente todas las dependencias de NPM, ¿vale?
De hecho, era algo parecido, a ver si os encuentro el vídeo que lo puse el otro día,
cómo era el paquete este de Everything, para que os hagáis una idea visual de este paquete.
Ah, este vídeo, este vídeo maravilloso, de cuando haces un NPM install.
NPM install, ¿ves? Empiezan las pocas dependencias, ¿vale?
Unas pocas dependencias, y de repente, y de repente...
NPM install everything.
Pero mira a este hombre, mira a este hombre.
No, no, debía haberlo instalado. ¿Por qué? ¿Por qué? ¿Por qué lo instalé?
Espera que esto, esto sigue, esto sigue, amigos.
Porque hasta aquí está la parte de la broma.
Jaja, jiji, qué broma, han roto NPM, tal, ya lo han arreglado.
El problema es PatrickJS, que es el autor de la broma.
Fijaos, accidentalmente he roto NPM, y todo lo que tengo es este maravilloso y dulce banner
en mi GitHub, que es imposible de quitar porque, nada, ya no puedo hacer absolutamente nada.
El registro de Everything, la organización, ha sido flagueada, ¿vale?
Porque tu organización ha sido oculta del público.
Si crees que es un error, ponte en contacto.
Pero claro, ahora no se puede quitar este banner.
Él está utilizando GitHub, y claro, como esta organización es suya,
pues no puede hacer absolutamente nada.
Y ahora va a tener ese banner para toda su vida,
para que ya no pueda, básicamente, no pueda hacer nada.
¿Esto qué es? ¿Install Everything? ¿Esto qué es?
Esto es con la instalación de Everything.
Claro, estos son todos los paquetes.
Esto es lo que hacía.
Si queréis una, básicamente, esto es lo que hacía.
El npm install, esto es lo que hacía, básicamente.
Bueno, vamos a hacer un directo.
Vamos a hacer...
Hostia, encima se escucha.
Vamos a hacer un directo...
Vamos a hacer un directo para ver cómo se instalan todas las dependencias, ¿vale?
¿Qué os parece?
Me encanta porque, si os fijáis, se está escuchando el ventilador mientras se instala las dependencias.
Bueno, os dejo la instalación para que le deis ahí,
porque yo no le voy a dar que no quiero que salga ardiendo mi ordenador.
Amigos, tened cuidado con este tipo de bromas.
Cuando enfadáis a GeekHapp o npm, os estáis metiendo con alguien que tiene demasiado poder
y os puede joder la existencia.
Así que tened cuidado, tened cuidado.