left-pad

folclore

programaçãodesenvolvimento web

O pacote npm de onze linhas cuja remoção, em 2016, quebrou builds no mundo JavaScript inteiro.

Em março de 2016, o desenvolvedor Azer Koculu despublicou seus módulos do npm após uma disputa de nomes envolvendo o registro e a reivindicação de marca de uma empresa; entre eles estava o left-pad, onze linhas que preenchiam strings, do qual milhares de pacotes, incluindo o Babel, dependiam transitivamente. Builds falharam globalmente em minutos, o npm restaurou o pacote contra a vontade do autor, e 'des-despublicar' entrou no vocabulário. O incidente forçou o ecossistema a encarar a profundidade das dependências, a governança do registro e o quanto da web moderna repousava na função de fim de semana de uma única pessoa.

Em março de 2016 um desenvolvedor despublicou um pequeno pacote npm chamado left-pad após uma disputa sobre o nome de outro pacote. O módulo tinha onze linhas e preenchia uma cadeia de caracteres. Sua remoção quebrou compilações em boa parte do ecossistema JavaScript, incluindo projetos de empresas que não faziam ideia de depender dele.

O mecanismo é a lição, e não o drama. Nada dependia do left-pad diretamente; ele era dependência transitiva de ferramentas das quais tudo dependia, então a falha chegou por uma cadeia que ninguém havia inspecionado. Árvores de dependência modernas são profundas o bastante para que um projeto tenha centenas de pacotes que nunca escolheu, mantidos por pessoas de quem nunca ouviu falar, qualquer uma das quais pode remover o próprio trabalho.

As respostas foram estruturais. O npm mudou sua política de despublicação para que pacotes muito usados não possam simplesmente sumir, arquivos de trava e vendoring viraram prática padrão, e o incidente é hoje a referência nas conversas sobre risco de cadeia de suprimentos. A pergunta mais profunda que ele levantou não desapareceu: um ecossistema que premia módulos minúsculos e reutilizáveis produz exatamente essa fragilidade, e a troca entre reúso e superfície de dependência segue em disputa, agora com tomadas maliciosas, e não remoção acidental, como cenário.

Todos os verbetes do glossário