Olá Habr! Apresento a você a tradução do artigo Julie Marchant Corrigir ou matar o JavaScript instalado automaticamente?
O ensaio de Richard Stallman, The Javascript Trap, observa que as pessoas executam programas proprietários que são instalados automaticamente silenciosamente em seus navegadores todos os dias. De fato, ele minimizou bastante o problema. A maioria dos usuários não apenas executa programas proprietários diariamente apenas navegando na Web, mas também executa dezenas ou mesmo centenas desses programas todos os dias. A armadilha do JavaScript é extremamente real e prolífica. Acredita-se que o trabalho com sites seja violado sem essas extensões HTML não padronizadas, geralmente proprietárias, que os navegadores da Web nem oferecem a oportunidade óbvia de desativar o JavaScript. Argumenta-se que a desativação do JavaScript só levará à confusão.
Obviamente, precisamos resolver esse problema. No entanto, concentrando-se em saber se os scripts são "triviais" ou gratuitos, Stallman perde um ponto importante: a instalação silenciosa automática do próprio software é o principal problema. O fato de que na maioria das vezes o software é proprietário é apenas um efeito colateral.
Em resposta ao artigo de Stallman, uma extensão foi desenvolvida para o navegador Firefox e seus derivados, chamado LibreJS. Essa extensão analisa automaticamente todo o JavaScript na página para determinar se é trivial ou gratuito e, se uma dessas condições for verdadeira, os scripts serão executados, caso contrário, serão bloqueados. Agradeço o projeto LibreJS e o que ele está tentando fazer. Mas acho que o LibreJS é fundamentalmente a abordagem errada para resolver o problema.
O LibreJS está falhando agora porque requer um formato que não é reconhecido em nenhum lugar, mas teoricamente pode ser resolvido no futuro, então vamos assumir que tudo está em ordem. Suponha que o LibreJS seja tão bem-sucedido que força a maioria da Internet a liberar scripts sob licenças gratuitas e descrever as licenças em um formato que o LibreJS entende.
Parece ótimo à primeira vista, mas daí resulta que o software ainda é silenciosamente instalado em nossos navegadores todos os dias. A única diferença é que o LibreJS considera os programas gratuitos.
Não quero subestimar a importância de garantir que todos os programas sejam gratuitos. No entanto, quando qualquer software é instalado automaticamente em nossos computadores a pedido de terceiros, isso torna impossível o exercício da liberdade. Supõe-se que você deseja que todos esses programas JavaScript, que podem facilmente criar centenas de novos scripts todos os dias, sejam executados no seu computador, geralmente antes que você possa verificar o código-fonte.
Pior, o sistema de instalação autônoma do JavaScript instala apenas o software temporariamente para executar apenas uma vez. De fato, sempre que o servidor atualiza o JavaScript enviado aos navegadores da Web, essa atualização é propagada para os usuários. Mesmo que o script seja gratuito, ele parece ter um backdoor interno.
Isso é muito semelhante ao caso da tivoização, quando teoricamente você tem a liberdade de controlar o que o programa faz, mas não pode fazê-lo na prática devido às circunstâncias. Não basta ter controle teórico. O controle real também é necessário. No caso do JavaScript, essa falta de controle não é o resultado de intenções maliciosas, mas o resultado da suposição descuidada dos navegadores da Web de que o usuário deseja executar todos os scripts que uma página da Web pode oferecer. Este não é necessariamente o caso. Seria como se o Windows estivesse instalado no meu computador toda vez que eu li um artigo recomendando o Windows ou se o blog falasse sobre o quão bom é o Chrome, isso faria com que o Chrome fosse instalado automaticamente no meu sistema.
Então o que podemos fazer? Conheço duas soluções possíveis.
Solução 1: corrigir JavaScript
A primeira solução possível e mais óbvia é alterar o comportamento dos navegadores da Web em relação às solicitações de software JavaScript. Sugiro que, para que o sistema seja aceitável, todas as seguintes condições DEVEM ser atendidas:
- O navegador deve instalar o código JavaScript constantemente e somente quando o usuário permitir explicitamente de alguma forma.
- O navegador deve fornecer ao usuário a oportunidade de instalar qualquer script arbitrário, e não apenas o script solicitado pela página da web.
- O navegador não deve atualizar automaticamente o código JavaScript, a menos que o usuário tenha indicado que ele deve ser atualizado e o usuário deve poder escolher de onde vêm essas atualizações.
Você notará que a descoberta automática de licença não está incluída em nenhum desses pontos. Então, como o usuário obtém apenas JavaScript grátis sem verificar manualmente cada arquivo de origem? A solução é realmente bastante simples: como qualquer outro software livre. Confio que os desenvolvedores do Trisquel incluam apenas programas gratuitos sem recursos maliciosos no repositório. A propósito, os desenvolvedores do Trisquel podem proteger os usuários contra malware , proprietários ou não; LibreJS - não pode. Da mesma forma, podemos criar e manter um repositório de código JavaScript gratuito.
Para que isso funcione, os programas JavaScript instalados também devem funcionar em todas as páginas da Web que o solicitem, e não apenas em uma página. Quanto ao código JavaScript já instalado, a possibilidade de seu uso pode ser determinada obtendo um hash de versões minificadas de scripts instalados e, em seguida, recebendo um hash dos scripts solicitados após a minificação da mesma maneira. Se os hashes não corresponderem, você poderá verificar os nomes dos arquivos de script para obter correspondências completas ou parciais e o usuário poderá ser perguntado se esses scripts devem ser usados. Também será útil para algum tipo de banco de dados no navegador do usuário, identificando sites nos quais certos scripts podem ser usados.
Acredito que essa abordagem exigirá um esforço considerável e é provavelmente por isso que o desenvolvedor do LibreJS não tentou fazer isso. Não ajuda que o alcance da confiabilidade envolva um trabalho contínuo, acompanhando a mudança de página.
Solução 2. Mate o JavaScript
Quando sugeri algo como a Solução 1 na lista de discussão bug-gnuzilla, uma das respostas observou que havia uma solução muito mais simples: em vez de tentar corrigir o JavaScript, poderíamos desativar completamente a execução do JavaScript em nossos navegadores (em outras palavras matar javascript). Claro, quero dizer, JavaScript instalado automaticamente . Por exemplo, não há nada errado em usar o JavaScript para desenvolver extensões do Firefox. Os scripts e extensões personalizados podem até ser projetados para substituir um importante código JavaScript proprietário.
No entanto, esta solução não é isenta de problemas. Em particular, isso requer uma tremenda mudança social, embora menos do que o LibreJS está tentando fazer. Navegadores que removem o suporte a JavaScript podem ajudar nesse sentido, mas há um problema com a galinha e o ovo, no sentido de que navegadores sem suporte a JavaScript serão considerados inferiores, enquanto muitos sites exigem scripts para funcionar.
Uma das etapas intermediárias para conseguir isso pode ser um navegador que suporte JavaScript, mas, por padrão, o JS deve ser desativado e oferecer ao usuário uma maneira fácil de ativar temporariamente o JavaScript em uma página. Assim, o usuário ganhará experiência sem usar o JavaScript, mas ainda assim poderá usar o JavaScript para as páginas nas quais é necessário, sem nenhum inconveniente que torne o navegador desconfortável. Haveria até um efeito colateral agradável para os usuários - seu trabalho na Internet se tornaria mais suave. Muitos sites têm scripts inchados que você pode evitar completamente desabilitando o JavaScript.
Conclusão
Cada uma dessas abordagens tem pontos fortes e fracos.
A primeira solução pode fornecer bons resultados imediatamente para sites como Diáspora e Reddit, que exigem código JavaScript, mas geralmente gratuitos. Provavelmente, isso não levará a alterações significativas na Internet, mas isso não é necessário para o trabalho. No entanto, isso exigirá algum trabalho para configurar adequadamente o comportamento do navegador em relação ao JavaScript, e haverá muito mais trabalho para manter um repositório de programas JavaScript gratuitos.
A segunda solução é bem parecida com o que o LibreJS está atualmente tentando fazer, embora em uma escala muito menor. Depende da mudança na Internet: convencer a maioria dos desenvolvedores da Web a parar de usar o código JavaScript. Se esta solução funcionar, o efeito pode ser impressionante. Por outro lado, esta solução pode falhar facilmente ou simplesmente levar a outro método emergente de instalação automática de software nos navegadores dos usuários.
Não tenho certeza do que é melhor, mas o LibreJS não é uma solução boa nem boa, nem mesmo um passo na direção certa. Enquanto um navegador gratuito que corrige corretamente o JavaScript estiver disponível, qualquer pessoa que queira liberdade na computação deve desativar todas as ações comuns do JavaScript em seus navegadores, mesmo que o código seja gratuito, e os desenvolvedores da Web que respeitam a liberdade de seus usuários devem eliminar todo o JavaScript necessário nos sites deles.