taler-merchant-demos

Python-based Frontends for the Demonstration Web site
Log | Files | Refs | Submodules | README | LICENSE

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 &ndash; 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 &ndash; 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 &ndash; 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 &ndash; se sua funcionalidade e propósito são independentes da
     98 página na qual ele veio &ndash; 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 &ndash; 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 &ndash; 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 &ndash; 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">&lt;gnu@gnu.org&gt;</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">&lt;webmasters@gnu.org&gt;</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         &lt;web-translators@gnu.org&gt;</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">&lt;web-translators@gnu.org&gt;</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 &copy; 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">&lt;rafaelff@gnome.org&gt;</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>