javascript-trap.html (17778B)
1 <!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" --> 2 3 <!--#include virtual="/server/header.pt-br.html" --> 4 <!-- Parent-Version: 1.96 --> 5 <!-- This page is derived from /server/standards/boilerplate.html --> 6 <!--#set var="TAGS" value="essays licensing traps" --> 7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" --> 8 9 <!-- This file is automatically generated by GNUnited Nations! --> 10 <title>A Armadilha do JavaScript - Projeto GNU - Free Software Foundation</title> 11 12 <!--#include virtual="/philosophy/po/javascript-trap.translist" --> 13 <!--#include virtual="/server/banner.pt-br.html" --> 14 <!--#include virtual="/philosophy/ph-breadcrumb.pt-br.html" --> 15 <!--GNUN: OUT-OF-DATE NOTICE--> 16 <!--#include virtual="/server/top-addendum.pt-br.html" --> 17 <div class="article reduced-width"> 18 <h2>A Armadilha do JavaScript</h2> 19 20 <address class="byline">por <a href="https://www.stallman.org/">Richard Stallman</a></address> 21 22 <p><strong>Você pode estar executando programas não livres em seu computador 23 todo dia sem perceber – por meio de seu navegador web.</strong></p> 24 25 <!-- any links that used to point to the appendices should point to 26 free-your-javascript.html instead. --> 27 <div class="announcement"> 28 <hr class="no-display" /> 29 <p>Webmasters: há <a href="/software/librejs/free-your-javascript.html">várias 30 formas</a> de indicar a licença de programas JavaScript em um site.</p> 31 <hr class="no-display" /> 32 </div> 33 34 <p>Na comunidade de software livre, a ideia de que <a 35 href="/philosophy/free-software-even-more-important.html"> qualquer programa 36 não livre maltrata seus usuários</a> é familiar. Alguns de nós defendem 37 nossa liberdade rejeitando todos os softwares privativos em seus 38 computadores. Muitos outros reconhecem a falta de liberdade como uma afronta 39 ao programa.</p> 40 41 <p>Muitos usuários estão cientes de que essa questão se aplica aos plug-ins que 42 navegadores oferecem para instalar, já que eles podem ser livres ou não 43 livres. Mas os navegadores executam outros programas não livres sem pedir 44 autorização e sem avisar – programas contidos ou vinculados em páginas 45 web. Esses programas são muito frequentemente escritos em JavaScript, porém 46 outras linguagens também são usadas.</p> 47 48 <p>JavaScript (oficialmente chamado de ECMAScript, mas poucos usam este nome) 49 foi, certa vez, usado para pequenas decorações estéticas em páginas web, tal 50 como recursos de exibição e navegação fofas, mas não essenciais. Era 51 aceitável considerá-los como meras extensões de marcação HTML, em vez de 52 verdadeiros softwares, e em desconsideração da questão.</p> 53 54 <p>Alguns sites ainda usam JavaScript desta forma, mas muitos o usam para 55 programas maiores que fazem trabalhos maiores. Por exemplo, Google Docs 56 tenta baixar para sua máquina um programa JavaScript no tamanho de meio 57 megabyte, em uma forma compacta que poderíamos chamar de “Obfuscript”. Essa 58 forma compactada é feita a partir do código-fonte, excluindo os espaços 59 extras que tornam o código legível e as observações explicativas que o 60 tornam compreensível e substituindo cada nome significativo no código por um 61 nome arbitrário abreviado, para que não seja possível dizer qual é seu 62 suposto significado.</p> 63 64 <p>Parte do <a href="/philosophy/free-sw.html">significado do software 65 livre</a> é que os usuários têm acesso ao código-fonte do programa (seu 66 plano). O código-fonte de um programa significa a forma preferida para os 67 programadores modificarem – incluindo espaçamento útil, observações 68 explicativas e nomes significativos. Código compactado é um substituto falso 69 e inútil do código-fonte; o código-fonte real desses programas não está 70 disponível para os usuários, portanto os usuários não podem entendê-lo; 71 portanto, os programas são não livres.</p> 72 73 <p>Além de ser não livre, muitos desses programas são <em>malwares</em> porque 74 eles <a 75 href="https://github.com/w3c/fingerprinting-guidance/issues/8">bisbilhotam o 76 usuário</a>. Ainda mais desagradável, alguns sites usam serviços que 77 registram <a 78 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">todas 79 as ações do usuário enquanto olha para a página</a>. Os serviços 80 supostamente “redigem” os registros para excluir alguns dados confidenciais 81 que o site não deve obter. Mas mesmo que isso funcione de forma confiável, 82 todo o propósito desses serviços é fornecer ao site dados pessoais (de 83 outras pessoas) que ele não deveria obter.</p> 84 85 <p>Navegadores normalmente não lhe informam quando eles carregaram programas 86 JavaScript. Alguns navegadores apresentam uma forma de desligar 87 completamente o JavaScript, mas mesmo se eles estiverem cientes desta 88 questão, você ainda teria um problema considerável para identificar 89 programas não livres e não triviais para, então, bloqueá-los. Porém, mesmo 90 na comunidade de software livre, a maioria dos usuários não estão cientes 91 desta questão, o silêncio dos navegadores tende a ocultar isso.</p> 92 93 <p>Para ser claro, a linguagem JavaScript não é inerentemente melhor ou pior 94 para a liberdade dos usuários do que qualquer outra linguagem. É possível 95 lançar um programa JavaScript como software livre, por meio da distribuição 96 do código-fonte sob uma licença de software livre. Se o programa é 97 independente – se sua funcionalidade e propósito são independentes da 98 página na qual ele veio – não há problema; você pode copiá-lo para um 99 arquivo em sua máquina, modificá-lo e visitar aquele arquivo com um 100 navegador para executá-lo. É ainda possível empacotá-lo para instalação como 101 outros programas livres e invocá-lo com um comando shell. Esses programas 102 não apresentam nenhum problema moral especial diferente daqueles dos 103 programas C.</p> 104 105 <p>O problema da armadilha do JavaScript se aplica quando o programa JavaScript 106 vem junto com uma página web que os usuários visitam. Esses programas 107 JavaScript são escritos para funcionar com uma página ou site específico, e 108 a página ou site depende deles para funcionar.</p> 109 110 <p>Digamos que você copie e modifique o código JavaScript da página. Então, um 111 outro problema surge: mesmo se o fonte do programa estiver disponível, 112 navegadores não oferecem uma forma de executar sua versão modificada em vez 113 do original ao visitar aquela página ou aquele site. O efeito é comparável à 114 tivoização, apesar de, em princípio, não ser tão difícil de superar.</p> 115 116 <p>JavaScript não é a única linguagem que sites web usam para programas 117 enviados pelo usuários. O Flash oferece suporte a programação por meio de 118 uma variante estendida do JavaScript, mas esta é uma coisa do 119 passado. Silverlight da Microsoft parece criar um problema similar ao do 120 Flash, só que pior, já que a Microsoft o usa como uma plataforma para codecs 121 não livres. Um substituto livre para o Silverlight não faz o trabalho 122 adequadamente para o mundo livre a menos que venha codecs livres em 123 substituição.</p> 124 125 <p>Os applets do Java também são executados no navegador, e trazem questões 126 similares. Em geral, qualquer forma de sistema de applets representa esse 127 tipo de problema. Tendo um ambiente de execução livre para um applet só nos 128 traz o suficiente para encontrar o problema.</p> 129 130 <p>Teoricamente, é possível programar em HTML e CSS, mas, na prática, essa 131 capacidade é limitada e inconveniente; para que seja possível que o programa 132 faça alguma coisa, é necessário um <cite>hack</cite> impressionante. Tais 133 programas devem ser livres, mas CSS não é um problema sério para a liberdade 134 dos usuários em 2019.</p> 135 136 <p>Um movimento forte desenvolveu aquelas chamadas (“calls”) para sites web 137 para se comunicar apenas por meio de formatos e protocolos que são livres 138 (alguns dizem “abertos”); isto é, cuja documentação está publicada e a qual 139 qualquer um é livre para implementar. Porém, a presença de programas 140 JavaScript nas páginas web tornam aquele critério ineficiente. A linguagem 141 do JavaScript em si, como um formato, é livre, e o uso de JavaScript em um 142 site web não necessariamente é ruim. Porém, como já vimos acima, pode ser 143 ruim – se o programa JavaScript for não livre. Quando o site transmite 144 um programa para o usuário, não basta o programa estar escrito em uma 145 linguagem documentada e desembaraçada; aquele programa também deve ser 146 livre. “Transmita apenas programas livres para os usuários” deve se tornar 147 parte do critério site web ético.</p> 148 149 <p>Carregar e executar silenciosamente programas não livres é uma dentre várias 150 questões levantadas por “aplicações web”. O termo “aplicações web” foi 151 atribuído em total desprezo à distinção fundamental entre software entregue 152 a usuários e software sendo executado em um servidor. Ele pode se referir a 153 um programa especializado para cliente ser executado em um navegador; ele 154 pode se referir a um software especializado para servidor; ele pode se 155 referir a um programa especializado para cliente que funciona de mãos dadas 156 com software especializado para servidor. Os lados de cliente e servidor 157 levantam questões éticas diferentes, mesmo se eles estiverem estritamente 158 integrados que eles indiscutivelmente formam partes de um único 159 programa. Esse artigo tem como escopo apenas a questão do software do 160 cliente. Nós vamos tratar da questão do servidor separadamente.</p> 161 162 <p>Em termos práticos, como nós podemos lidar com o problema de programas 163 JavaScript não livres e não triviais em sites? O primeiro passo é evitar 164 executá-lo.</p> 165 166 <p>O que nós queremos dizer por “não triviais”? É uma questão de grau, então 167 essa é uma questão de projetar um critério simples que fornece bons 168 resultados, em vez de encontrar a resposta correta.</p> 169 <p> 170 Nosso critério atual é considerar um programa JavaScript como não trivial se 171 qualquer uma dessas condições for atendida:</p> 172 173 <ul> 174 <li>ele é referido como um script externo (de outra página).</li> 175 176 <li>ele declara um vetor com mais de 50 elementos.</li> 177 178 <li>ele define uma entidade dada (função ou método) que chama qualquer outra que 179 não seja a primitiva.</li> 180 181 <li>ele define uma dada entidade com mais de três construtos condicionais e 182 construção de loop.</li> 183 184 <li>um código fora das definições dadas chama qualquer coisa, exceto primitivas 185 e funções definidas anteriormente na página.</li> 186 187 <li>um código fora das definições dadas contém mais de três construtos 188 condicionais e construção de loop, no total.</li> 189 190 <li>ele chama <b>eval</b>.</li> 191 192 <li>ele faz chamadas Ajax.</li> 193 194 <li>ele usa a notação de colchetes para o acesso à propriedade de objeto 195 dinâmico, que se parece com <b><em>objeto</em>[<em>propriedade</em>]</b>.</li> 196 197 <li>ele altera o DOM.</li> 198 199 <li>ele usa construtos JavaScript dinâmicos que são difíceis de analisar sem 200 interpretar o programa, ou é carregado junto com scripts que usam tais 201 construtos. Especificamente, usando quaisquer outros construtos que não uma 202 string literal com determinados métodos (<b>Obj.write</b>, 203 <b>Obj.createElement</b> e outros).</li> 204 </ul> 205 206 <p>Como nós dizemos se o código JavaScript é livre? Em um <a 207 href="/licenses/javascript-labels.html">artigo separado</a>, propomos um 208 método por meio da qual um programa JavaScript não trivial em uma página 209 pode indicar a URL na qual seu código-fonte está localizado, e pode indicar 210 sua licença também, usando comentários estilizados.</p> 211 212 <p>Finalmente, precisamos mudar navegadores livres para detectar e bloquear 213 JavaScript não livres e não triviais em páginas web. O programa <a 214 href="/software/librejs/">LibreJS</a> detecta JavaScript não trivial e não 215 livre em páginas que você visita, e os bloqueia. LibreJS está incluso no 216 IceCat e disponível como uma extensão para Firefox.</p> 217 218 <p>Usuários do navegador também precisam de uma facilidade conveniente para 219 especificar um código JavaScript para usar <em>em vez</em> do JavaScript em 220 uma certa página. (O código especificado pode ser um substituto total, ou 221 uma versão modificada do programa JavaScript livre naquela página.) 222 Greasemonkey chega perto de ser capaz de fazer isso, mas não muito, já que 223 ele não garante modificar o código JavaScript em uma página antes daquele 224 programa iniciar a execução. Usar um proxy local funciona, mas é, agora, 225 inconveniente demais para ser uma solução real. Precisamos construir uma 226 solução que é confiável e conveniente, assim como um site para compartilhar 227 as alterações. O Projeto GNU gostaria de recomendar os sites que são 228 dedicados unicamente às alterações livres.</p> 229 230 <p>Esses recursos possibilitarão para um programa JavaScript incluído em uma 231 página web ser livre em um senso real e prático. JavaScript não será mais um 232 obstáculo em especial para nossa liberdade – não mais que C e Java são 233 agora. Seremos capazes de rejeitar e até substituir os programas JavaScript 234 não triviais e não livres, assim como rejeitamos e substituímos pacotes não 235 livres que são oferecidos para instalação na forma comum. Nossa campanha 236 para sites tornarem livres os seus JavaScript pode, então, começar.</p> 237 238 <p>Neste meio tempo, há um caso no qual é aceitável executar um programa 239 JavaScript não livre: para enviar uma reclamação para os operadores do site 240 dizendo que eles devem tornar livre ou remover o código JavaScript do 241 site. Por favor, não hesite em habilitar temporariamente JavaScript para 242 fazer isso – mas lembre-se de desabilitá-lo novamente em seguida.</p> 243 244 <!-- any links that used to point to the appendices should point to 245 free-your-javascript.html instead. --> 246 <div class="announcement"> 247 <hr class="no-display" /> 248 <p>Webmasters: há <a href="/software/librejs/free-your-javascript.html">várias 249 formas</a> de indicar a licença de programas JavaScript em um site.</p> 250 <hr class="no-display" /> 251 </div> 252 253 <p><strong>Agradecimentos:</strong> Obrigado a <a 254 href="/people/people.html#mattlee">Matt Lee</a> e <a 255 href="https://ejohn.org">John Resig</a> por ajudarem na definição de nosso 256 critério proposto e a David Parunakian por trazer o programa à minha 257 atenção.</p> 258 </div> 259 260 <div class="translators-notes"> 261 262 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> 263 </div> 264 </div> 265 266 <!-- for id="content", starts in the include above --> 267 <!--#include virtual="/server/footer.pt-br.html" --> 268 <div id="footer" role="contentinfo"> 269 <div class="unprintable"> 270 271 <p>Envie perguntas em geral sobre a FSF e o GNU para <a 272 href="mailto:gnu@gnu.org"><gnu@gnu.org></a>. Também existem <a 273 href="/contact/">outros meios de contatar</a> a FSF. Links quebrados e 274 outras correções ou sugestões podem ser enviadas para <a 275 href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a>.</p> 276 277 <p> 278 <!-- TRANSLATORS: Ignore the original text in this paragraph, 279 replace it with the translation of these two: 280 281 We work hard and do our best to provide accurate, good quality 282 translations. However, we are not exempt from imperfection. 283 Please send your comments and general suggestions in this regard 284 to <a href="mailto:web-translators@gnu.org"> 285 286 <web-translators@gnu.org></a>.</p> 287 288 <p>For information on coordinating and contributing translations of 289 our web pages, see <a 290 href="/server/standards/README.translations.html">Translations 291 README</a>. --> 292 A equipe de traduções para o português brasileiro se esforça para oferecer 293 traduções precisas e de boa qualidade, mas não estamos isentos de erros. Por 294 favor, envie seus comentários e sugestões em geral sobre as traduções para 295 <a 296 href="mailto:web-translators@gnu.org"><web-translators@gnu.org></a>. 297 </p><p>Consulte o <a href="/server/standards/README.translations.html">Guia 298 para as traduções</a> para mais informações sobre a coordenação e a 299 contribuição com traduções das páginas deste site.</p> 300 </div> 301 302 <!-- Regarding copyright, in general, standalone pages (as opposed to 303 files generated as part of manuals) on the GNU web server should 304 be under CC BY-ND 4.0. Please do NOT change or remove this 305 without talking with the webmasters or licensing team first. 306 Please make sure the copyright date is consistent with the 307 document. For web pages, it is ok to list just the latest year the 308 document was modified, or published. 309 310 If you wish to list earlier years, that is ok too. 311 Either "2001, 2002, 2003" or "2001-2003" are ok for specifying 312 years, as long as each year in the range is in fact a copyrightable 313 year, i.e., a year in which the document was published (including 314 being publicly visible on the web or in a revision control system). 315 316 There is more detail about copyright years in the GNU Maintainers 317 Information document, www.gnu.org/prep/maintain. --> 318 <p>Copyright © 2009-2013, 2016-2019, 2021 Richard Stallman</p> 319 320 <p>Esta página está licenciada sob uma licença <a rel="license" 321 href="http://creativecommons.org/licenses/by-nd/4.0/deed.pt_BR">Creative 322 Commons Atribuição-SemDerivações 4.0 Internacional</a>.</p> 323 324 <!--#include virtual="/server/bottom-notes.pt-br.html" --> 325 <div class="translators-credits"> 326 327 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> 328 Traduzido por: Rafael Fontenelle 329 <a href="mailto:rafaelff@gnome.org"><rafaelff@gnome.org></a>, 330 2017-2021</div> 331 332 <p class="unprintable"><!-- timestamp start --> 333 Última atualização: 334 335 $Date: 2021/12/26 01:29:59 $ 336 337 <!-- timestamp end --> 338 </p> 339 </div> 340 </div> 341 <!-- for class="inner", starts in the banner include --> 342 </body> 343 </html>