+− THE DAILY DIFFdev & AI news
SHIP IT

Onze linhas de JavaScript quebraram a internet. Uma despublicação.

22 de março de 2016, 21:30 UTC: um desenvolvedor despublica todos os 273 de seus pacotes npm depois que o npm entrega o nome do pacote "kik" ao Kik, o aplicativo de mensagens, cujo agente de patentes havia prometido "advogados batendo à sua porta".

22 de março de 2016, 21:30 UTC: um desenvolvedor despublica todos os 273 de seus pacotes npm depois que o npm entrega o nome do pacote "kik" ao Kik, o aplicativo de mensagens, cujo agente de patentes havia prometido "advogados batendo à sua porta". Um dos 273 é o left-pad: onze linhas que colocam espaços na frente de uma string, baixado 2,5 milhões de vezes por mês. Em minutos, as construções do Babel, React e Node falham em todo o mundo, centenas por minuto. Uma bifurcação aparece em dez minutos e não muda nada, porque o Babel puxa o left-pad através de line-numbers, que fixa exatamente o 0.0.3. Às 23:55, o npm restaura a versão excluída de um backup — a primeira "des-despublicação" na história do registro — e uma semana depois envia a regra de despublicação de 24 horas. Postmortem, da própria conta do npm e da thread de e-mail que o Kik publicou: o registro que permitia a qualquer autor excluir qualquer versão sem verificação de dependentes, a árvore transitiva resolvida ao vivo em cada instalação, sem lockfile por padrão. Culpa do Git: 60 npm / 25 Kik / 15 o hábito de dependência. Veredito sobre a correção: SHIP IT.

Leia a edição escrita (Inglês) ↗

O que este vídeo aborda

  • 11 de março: agente de patentes do Kik pede a Azer Koçulu para renomear `kik`; uma hora depois: advogados "batendo à sua porta e desativando suas contas"; Azer: $30.000; Kik envia e-mails para o suporte npm
  • 18–20 de março: CEO do npm transfere o nome para Kik ("esperaria razoavelmente que estivesse relacionado a kik.com"); Azer pede que todos os seus módulos sejam excluídos
  • 22 de março, 21:30–23:55 UTC: 273 pacotes despublicados; [email protected] 404s em projetos Babel, Atom, Node; fork 1.0.0 às 21:42; CTO do npm tuíta "des-despublicando" às 23:03; 0.0.3 de volta do backup às 23:55 — 2,5 horas
  • 23 e 29 de março: postmortem do npm ("nós falhamos") e a nova política: despublicar apenas dentro de 24 horas, placeholders de segurança para nomes removidos (72 h desde 2020)

Transcrição traduzida

Traduzido da narração original em inglês. Áudio e legendas disponíveis são controlados pelo YouTube.

0:00 Um desenvolvedor apaga onze linhas de JavaScript, e em minutos o Babel, React e Node falham em todo o mundo, centenas por minuto. A função é left-pad. Ela preenche uma string com espaços, e no final da noite o npm faz a única coisa que diz que não pode fazer: republicar uma versão apagada. Como acontece, por que é possível e quem leva a culpa. Este é The Daily Diff, postmortem. 11 de março. Um agente de patentes da Kik, o aplicativo de mensagens,

0:26 envia um e-mail para Azer Koçulu: renomeie seu pacote npm, kik é nossa marca. Azer diz não. Uma hora depois: nossos advogados de marcas estarão batendo à sua porta e derrubando suas contas. Azer nomeia um preço, trinta mil dólares, e Kik encaminha a conversa para o suporte do npm. 18 de março. O CEO do npm decide que qualquer um que digite npm install kik espera o aplicativo

0:48 de mensagens, e entrega o nome. Azer pede que tudo que é dele seja apagado. Dois dias depois ele mesmo o faz: duzentos e setenta e três pacotes. 22 de março, 21:30 UTC. Cada construção que busca left-pad recebe um 404. Dez minutos depois, um estranho o republica como 1.0.0, e nada muda, porque Babel e Atom o carregam através de um pacote chamado line-numbers, que quer exatamente o 0.0.3.

1:13 Às 23:03 o CTO do npm tuíta: des-despublicando. Às 23:55, o 0.0.3 está de volta de um backup. Duas horas e meia. Por que uma pessoa pode fazer isso? Três razões. Qualquer versão no npm pode ser apagada por seu autor, instantaneamente, sem verificação de quem depende dela. Segundo, as dependências são transitivas: Babel não sabe que left-pad existe, sabe line-numbers, e toda a árvore é resolvida ao vivo em cada instalação.

1:36 Terceiro, em 2016 nada fixava essa árvore por padrão; lockfiles eram opcionais, então cada execução de CI perguntava novamente à internet como eram onze linhas de código. Um registro, executado por ninguém que dependa dele. culpa do git. npm, sessenta por cento: seu próprio postmortem diz que a despublicação irrestrita causou a dor, e, citação, nós falhamos. Kik, vinte e cinco: um agente de patentes, não um advogado, prometendo advogados na porta por um nome que o Kik já havia decidido não usar. O hábito de dependência, quinze: todos que npm-instalaram onze linhas em vez

2:06 de digitá-las. Incluindo o Kik, cujas construções também quebram. Raio de explosão: duzentos e setenta e três pacotes puxados, um deles baixado dois milhões e meio de vezes por mês. A correção leva duas horas e meia; a função leva onze linhas. No Hacker News, um post perguntando se esquecemos como programar atinge mil e setecentos pontos, principalmente de pessoas cujas construções ainda estão vermelhas. Veredito, postmortem: SHIP IT.

2:26 npm restaura do backup, posta o postmortem no dia seguinte, e dentro de uma semana envia a regra que ainda vale: você pode despublicar por vinte e quatro horas, depois disso você fala com um humano. Segunda-feira: faça commit do seu lockfile, e se uma função tem onze linhas, é um parágrafo, não uma dependência. Envie-me o incidente sobre o qual você ainda não pode falar, nos comentários, ou em the daily diff dot dev. E essa é a diferença de hoje.

2:48 Eu sou Niko da Axrisi. Faça merge com responsabilidade.

Fontes

  1. npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)blog.npmjs.org
  2. npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)blog.npmjs.org
  3. Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)web.archive.org
  4. Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)web.archive.org
  5. Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTCx.com
  6. left-pad 0.0.3 on the npm registry (the eleven lines)registry.npmjs.org
  7. Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)news.ycombinator.com
  8. Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)news.ycombinator.com
  9. Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)news.ycombinator.com
  10. The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"www.theregister.com

Vídeos relacionados