Quebraram minha build

Javascript, jenga e o futuro do open source.

Este artigo é sobre várias coisas que você provavelmente não sabe (se você não é um desenvolvedor javascript). Foi escrito graças um acontecido polêmico desta semana, que foi interessante para uma reflexão mais ampla do que pode acontecer no futuro. E também porque não vi escreverem sobre isso em português.

A parte que explica coisas para leigos da maneira mais simples possível

(pode pular isso sem dó se você já tem o vocabulário necessário)

Compilar é o que o computador faz com um código-fonte de um software para torná-lo executável.

Build é o jargão usado para compilar um projeto de software. Algum outro software compila código para algo reconhecido pelo responsável por executá-lo: que pode ser a própria máquina ou outro software, no caso dos browsers de Internet.

Github é o sistema pra guardar/versionar software aberto mais usado no mundo.

EcmaScript (ES) / Javascript (JS) é uma linguagem de programação usada no browser localmente. Ela tem esses dois nomes/abreviaturas mesmo. Não é assunto pra hoje ;)

npm é o gerenciador de pacotes de javascript mais usado por aí. Basicamente, lá tem um monte de programas dos outros que você pode usar pra fazer o seu.


O causo

Nesta semana, o desenvolvedor turco Azer Koçulu foi ameaçado por uma empresa de mensagens instantâneas chamada kik messenger. Ele possuía um projeto chamado kik que servia para um programador javascript criar seus projetos de maneira mais rápida. O mesmo nome do app kik messenger, logo a empresa alegou infração de copyright. A npm ficou do lado da empresa e trocaram o dono do projeto no sistema deles. Ou seja, o sr Koçulu perdeu a capacidade de atualizar/manter seu projeto no npm. E quem usava este projeto não poderia mais acessá-lo pelo npm, que é a maneira mais fácil. Lembrando que o projeto não saiu do ar, pois ainda está no github.

Um adendo: kik é uma grafia incorreta da palavra kick do inglês. Na minha opinião isto o torna um nome clichê e passível desta situação de já ter aparecido por aí. Enfim, se a situação foi justa ou não eu deixo para algum advogado explicar.

O cara ficou revoltadissimo e removeu todos os projetos dele do npm, como ele próprio explica no post acima; no qual ele também expõe a agressividade do advogado ao responder seu e-mail. Um destes pacotes removidos é o chamado left-pad, um código muito simples de apenas 11 linhas. O mesmo era usado por muitos outros projetos. Projetos grandes, como o Babel. Aí que começaram os problemas. Milhares deles.

Como funciona um projeto javascript em 2016

Imagine que você senta para trabalhar e do nada as coisas param de funcionar. Nenhuma alteração que você faz no seu trabalho é compilada. Isso aconteceu para muitas pessoas esta semana, usuárias de projetos que usam o left-pad. De maneira indireta, o pacote influenciou o trabalho de milhares de pessoas. Daí a torre de jenga, analogia usada nesta notícia do site The Register. Acabou que a npm tomou uma atitude inédita: “des-despublicaram” o left-pad, para que os programadores pudessem voltar a trabalhar em paz. Claro que haviam outras maneiras de contornar o problema, mas sempre pode ter alguém desavisado. Até explicar que focinho de porco não é tomada…

Reações contra e a favor da atitude apareceram, das quais destaco esta:

Mesmo tendo quebrado minha build, te aplaudo por se manter com seus valores.

Implicações para o futuro

Projetos dependem de outros projetos. A ciência já é assim. Não se reinventa a roda para construir um carro. É inevitável que software seja assim. O problema é quando você precisa baixar a roda pra construir o carro. A internet às vezes é um ambiente volátil, e isso nem sempre é legal.

Daí se tira que um gerenciador de dependências deve ser confiável. Ao mesmo tempo, deve-se pensar a que preço. A npm simplesmente tirou o pacote do ar (estou falando do kik, não do left-pad), sem levar a história a público. Não houve um debate se aquilo seria justo ou não. Só virou notícia por causa da reação do prejudicado.

Além disso, é interessante olhar para o projeto kik e sua utilidade: facilitar a criação de novos projetos. O processo de criar um novo projeto se tornou complicado com a torre de jenga do npm. Note que o problema não é o npm em si, mas quando um projeto usa uma dependência que depende de outra que depende de outra… Ou quando um pacote pra fazer algo simples e besta como o unvowel usa uma dependência para tirar as vogais de um texto, como bem me apontou o Mateus Lacerda.

Por causa desse tipo de coisa, há quem diga que isso se tornou uma caixa preta. Mas o código é aberto. Qualquer um pode ir lá e ver quais dependências estão sendo usadas.

Deixamos os computadores lá fazendo o trabalho e nos esquecemos que eles são programados e controlados por seres humanos. Computadores são estúpidos: só fazem o que mandamos. Por isso é necessário refletir sobre nossas práticas. Faço minhas as palavras de Koçulu: “faço projetos open source para dar poder às pessoas”. Foi muito interessante que alguém tenha se sentido incomodado por uma atitude que julgou abusiva e reagiu a isso.

Esse tipo de situação provavelmente vai se repetir no futuro. Espero que este caso sirva para reflexão. Se realmente vale a pena usar cada coisa nova e bonitinha que aparece por aí. E também a questão de ser subserviente a qualquer empresa com grandes aparatos legais.

Sabe o que deixa tudo mais engraçado? Fui lembrado pelo amigo Tnik que a funcionalidade fornecida pelo left-pad será suportada nativamente pela ES7, uma versão futura do javascript; tornado o pacote inútil quando essa versão sair.

Tem um botão de coraçãozinho ali em baixo. Ele foi feito para ser apertado se você gostou do texto ;)
Ah, e comentem também. Qualquer dúvida, se você discorda de algo, quero saber.