Milhares de projetos baseados no npm foram quebrados
[Atualização 24/03/2016 19:08] Nota oficial sobre o caso no Blog do npm. http://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm
[Atualização 24/03/2016 10:28] Um post de um funcionário da Kik mostra um pouco dos bastidores da história. https://medium.com/@mproberts/a-discussion-about-the-breaking-of-the-internet-3d4d2a83aa4d#.e7lqgkw3l
Algo inusitado se instaurou na comunidade JavaScript/Node.js ontem (22/03/2016). Uma "simples" despublicação de um módulo no npm fez com que milhares de projetos espalhados pelo mundo todo passassem a quebrar o build.
Mas como isso foi possível? A história é um pouco mais complicada, pois não se resume a um problema técnico. O desenvolvedor Azer Koçulu que possuia mais de 250 módulos no npm, removeu todos os seus módulos do gerenciador de pacotes. Azer explica o motivo em um post feito no Medium. Acontece que um módulo específico, chamado Kik usava o mesmo nome de uma empresa. Azer foi contatado pela empresa que insistiu que ele removesse o pacote do npm. Azer não cedeu, mas a empresa contatou o npm diretamente, que por sua vez passou o módulo para a empresa, sem a permissão de Azer, segundo ele.
Essa situação me fez perceber que o NPM é uma ilha privada de alguém, onde o corporativismo é mais poderoso do que as pessoas, e eu faço open-source porque, poder ao povo.
Com a despublicação dos seus mais de 250 módulos do npm, Azer conseguiu quebrar milhares de projetos que dependiam de seus projetos. O projeto específico que quebrou até o build do popular Babel, foi o left-pad.
O curioso é ver como um módulo tão simples causou tantos problemas:
module.exports = leftpad; function leftpad (str, len, ch) { str = String(str); var i = -1; if (!ch && ch !== 0) ch = ' '; len = len - str.length; while (++i < len) { str = ch + str; } return str; }
Obviamente, a essência do npm e do ecossistema Node.js é toda baseada em usar pequenos trechos de códigos, então essa não é a raiz do problema. Mas que a situação trouxe à tona outras questões filosóficas e técnicas, isso trouxe. O Laurie Voss, CTO do npm que inclusive palestrou na BrazilJS Conf de 2015, postou no Twitter sobre o caso. Hey usuários do npm: o left-pad 0.0.3 foi despublicado, quebrando UM MONTE de builds. Para resolver isso, nós estamos re-publicando o módulo com o pedido de um novo dono. Para resolver o problema, o npm re-publicou o módulo left-pad
, porém na conta de outro usuário. Com essa atitude, o npm conseguiu ao menos reparar o dano nos builds quebrados espalhados pela internet. Não sabemos o que vem pela frente, mas o próprio Laurie comentou que vão dar mais atenção para casos desta natureza. Fato é que a despublicação de um módulo não pode simplesmente quebrar o build de todo mundo. Pelo Twitter, o Nando Vieira me explicou como funcina com as gems no mundo Rails: você pode "despublicar" uma gem, mas o pacote permanece lá, disponível para quem já instalou. Faz sentido, talvez seja esse o caminho que o npm deva seguir.