Milhares de projetos baseados no npm foram quebrados

Cofundador da @BrazilJS e da @NascHQ, Software developer e autor/editor no portal BrazilJS.

[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.

Panic

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.


BrazilJS é uma iniciativa NASC