taler-merchant-demos

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

javascript-trap.html (18000B)


      1 <!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" -->
      2 
      3 <!--#include virtual="/server/header.es.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>La trampa de JavaScript - Proyecto GNU - Free Software Foundation</title>
     11 
     12 <!--#include virtual="/philosophy/po/javascript-trap.translist" -->
     13 <!--#include virtual="/server/banner.es.html" -->
     14 <!--#include virtual="/philosophy/ph-breadcrumb.es.html" -->
     15 <!--GNUN: OUT-OF-DATE NOTICE-->
     16 <!--#include virtual="/server/top-addendum.es.html" -->
     17 <div class="article reduced-width">
     18 <h2>La trampa de JavaScript</h2>
     19 
     20 <address class="byline">por <a href="https://www.stallman.org/">Richard Stallman</a></address>
     21 
     22 <p><strong>Sin darse cuenta, usted puede estar utilizando a diario en el
     23 navegador programas que no son libres.</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: existen <a
     30 href="/software/librejs/free-your-javascript.html">varias maneras</a> de
     31 indicar la licencia de los programas JavaScript en un sitio web.</p>
     32 <hr class="no-display" />
     33 </div>
     34 
     35 <p>En la comunidad del software libre estamos familiarizados con el hecho de
     36 que <a href="/philosophy/free-software-even-more-important.html">los
     37 programas que no son libres maltratan a los usuarios</a>. Algunos de
     38 nosotros defendemos nuestra libertad rechazando todo software privativo en
     39 nuestros ordenadores. Otros muchos consideran que la falta de libertad
     40 constituye un ataque al programa.</p>
     41 
     42 <p>Muchos usuarios son conscientes de que este problema concierne a los
     43 accesorios que los navegadores ofrecen instalar, ya que estos pueden ser
     44 libres o no. Correcto, pero los navegadores ejecutan además otros programas
     45 que no son libres y sobre los que no nos preguntan ni nos avisan, programas
     46 que las páginas web contienen o enlazan. Tales programas están
     47 mayoritariamente escritos en JavaScript, aunque también se usan otros
     48 lenguajes.</p>
     49 
     50 <p>JavaScript (oficialmente denominado ECMAScript, aunque pocos emplean este
     51 nombre) al principio se usaba para pequeños detalles ornamentales en páginas
     52 web, tales como bonitas pero innecesarias características de navegación y
     53 maquetación. Era aceptable considerarlos como meras extensiones del lenguaje
     54 de etiquetas HTML más que como verdadero software, y despreocuparse del
     55 asunto.</p>
     56 
     57 <p>Algunos sitios continúan usando JavaScript de esa manera, pero muchos lo
     58 usan para programas mayores que realizan operaciones importantes. Por
     59 ejemplo, Google Docs trata de instalar en el navegador del usuario un
     60 programa JavaScript de medio megabyte y tan compactado que podríamos
     61 llamarlo «Obscurscript». Esta forma compactada está hecha a partir del
     62 código fuente, del que se borran los espacios que hacen el código legible y
     63 las observaciones explicativas que lo hacen comprensible, y se sustituyen
     64 los nombres significativos que aparecen en el código con nombres cortos
     65 arbitrarios, de modo que no hay forma de saber lo que significan.</p>
     66 
     67 <p>Parte del <a href="/philosophy/free-sw.html">significado de software
     68 libre</a> es que los usuarios tienen acceso al código fuente del programa
     69 (su diseño). El código fuente del programa representa la mejor preferida por
     70 los programadores para modificarlo, lo que incluye un conveniente espaciado,
     71 observaciones explicativas y nombres significativos. El código compactado es
     72 un falso e inútil sustituto del código fuente. El código fuente real de
     73 estos programas no está disponible para los usuarios, de modo que los
     74 usuarios no pueden entenderlo; por lo tanto, estos programas no son libres.</p>
     75 
     76 <p>Además de no ser libres, muchos de estos programas son
     77 <em><cite>malware</cite></em>, ya que <a
     78 href="https://github.com/w3c/fingerprinting-guidance/issues/8">espían al
     79 usuario</a>.  Aún peor, algunos sitios web utilizan servicios que registran
     80 <a
     81 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">todas
     82 las acciones del usuario mientras mira la página</a>. Estos servicios
     83 «redactan» los registros supuestamente excluyendo ciertos datos sensibles
     84 que el sitio no debería obtener. Pero incluso si funcionan de forma fiable,
     85 el único propósito de estos servicios es proporcionar al sitio web otros
     86 datos personales que no debería tener.</p>
     87 
     88 <p>Normalmente, los navegadores no avisan cuando cargan programas
     89 JavaScript. Algunos tienen una opción para desactivar JavaScript totalmente,
     90 pero incluso si somos conscientes de este problema, nos llevaría mucho
     91 trabajo identificar y bloquear los programas que no son libres ni tampoco
     92 triviales. No obstante, incluso en la comunidad del software libre, la
     93 mayoría de los usuarios no son conscientes del problema, y el silencio de
     94 los navegadores suele ocultarlo.</p>
     95 
     96 <p>En definitiva, el lenguaje JavaScript no es en sí mismo mejor o peor para la
     97 libertad de los usuarios que cualquier otro lenguaje. Un programa JavaScript
     98 se puede publicar como software libre distribuyendo el código fuente bajo
     99 una licencia de software libre. Si el programa es autónomo (si su
    100 funcionamiento y su propósito son independientes de la página que lo
    101 contiene), no hay problema: se puede copiar y guardar como archivo en el
    102 ordenador, se modifica luego ese archivo y se abre con un navegador para
    103 ejecutarlo. Es posible incluso empaquetarlo para su instalación como otros
    104 programas libres e invocarlo por línea de comandos. Estos programas no
    105 plantean ninguna cuestión ética particular diferente de los de C.</p>
    106 
    107 <p>El problema de la trampa de JavaScript se presenta cuando al programa
    108 JavaScript acompaña a una página web que visitan los usuarios. Esos
    109 programas JavaScript están hechos para operar en una página o sitio
    110 particular, y la página o sitio depende de ellos para funcionar.</p>
    111 
    112 <p>Suponga que copia y modifica la página del código JavaScript. Surge entonces
    113 otro problema: incluso si el código fuente del programa está disponible, los
    114 navegadores no le ofrecen al usuario un modo de ejecutar su propia versión
    115 modificada en vez de la original cuando visita esa página o sitio. El efecto
    116 es comparable a la «tivoización», aunque en principio no tan difícil de
    117 solucionar.</p>
    118 
    119 <p>JavaScript no es el único lenguaje que los sitios web utilizan para los
    120 programas que envían al usuario. Flash admitía la programación mediante una
    121 variante ampliada de JavaScript, pero esto es cosa del pasado . Es probable
    122 que Microsoft Silverlight cree un problema similar a Flash, solo que peor,
    123 ya que Microsoft lo usa como plataforma para códecs que no son libres. Un
    124 reemplazo libre para Silverlight no cumplirá adecuadamente su función en el
    125 mundo libre a menos que venga de serie con códecs de recambio libres.</p>
    126 
    127 <p>Los <cite>applets</cite> Java también se ejecutan en el navegador, y
    128 plantean problemas similares. En general, cualquier sistema de
    129 <cite>applet</cite> presenta problemas de este tipo. Disponer de un entorno
    130 de ejecución libre para un <cite>applet</cite> no hace sino aplazar el
    131 problema.</p>
    132 
    133 <p>En teoría se puede programar en HTML y CSS, pero en la práctica esta
    134 posibilidad es limitada y engorrosa; ya solo conseguir que haga algo es toda
    135 una hazaña. Tales programas deberían ser libres, aunque desde 2019 CSS no
    136 constituye un serio problema para la libertad de los usuarios.</p>
    137 
    138 <p>Se ha desarrollado un potente movimiento para reclamar que los sitios web
    139 empleen solo formatos y protocolos libres (algunos los llaman «abiertos»);
    140 esto es, aquellos cuya documentación sea pública y que cualquiera sea libre
    141 de implementar. No obstante, la presencia de programas de JavaScript en las
    142 páginas web hace que este criterio sea insuficiente. El propio lenguaje de
    143 JavaScript, en cuanto formato, es libre, y el uso de JavaScript en un sitio
    144 web no es necesariamente algo malo. Sin embargo, como hemos visto antes, sí
    145 puede ser malo, en el casos de que el programa de JavaScript no sea
    146 libre. Cuando el sitio transmite un programa al usuario, no basta con que el
    147 programa esté escrito en un lenguaje documentado y sin trabas, sino que
    148 además el programa mismo debe ser libre. «Transmitir al usuario únicamente
    149 programas libres» debe ser uno de los criterios de un sitio web ético.</p>
    150 
    151 <p>La carga y ejecución silenciosa de programas que no son libres es uno de los
    152 diversos problemas que presentan las «aplicaciones web». La expresión
    153 «aplicación web» se acuñó para obviar la distinción fundamental entre el
    154 software que se entrega a los usuarios y el que se ejecuta en un
    155 servidor. Puede referirse a un programa cliente especializado que se ejecuta
    156 en un navegador, puede referirse a un software especializado del servidor, o
    157 puede referirse a un programa cliente especializado que opera mano a mano
    158 con software especializado del servidor. La parte cliente y la parte
    159 servidor plantean problemas éticos diferentes, aun cuando estén tan
    160 integradas que se pueda considerar que forman parte de un solo
    161 programa. Este artículo se ocupa solo del software de la parte
    162 cliente. Tratamos lo referente al servidor por separado.</p>
    163 
    164 <p>En la práctica, ¿cómo podemos afrontar el problema de la presencia en sitios
    165 web de programas Javascript que no son libres ni triviales? En primer lugar,
    166 no ejecutarlos.</p>
    167 
    168 <p>¿A qué nos referimos cuando decimos que «no es trivial»? Es una cuestión de
    169 grado, por lo que no se trata de buscar una única respuesta correcta, sino
    170 de ofrecer un criterio sencillo que dé buenos resultados.</p>
    171 <p>
    172 Nuestro criterio actual es considerar que un programa escrito en JavaScript
    173 no es trivial si se cumple alguna de las siguientes condiciones:</p>
    174 
    175 <ul>
    176   <li>se remite a él como <cite>script</cite> externo (desde otra página);</li>
    177 
    178   <li>declara un <cite>array</cite> de más de 50 elementos;</li>
    179 
    180   <li>define una entidad nombrada (función o método) que llama a algo diferente de
    181 una primitiva;</li>
    182 
    183   <li>define una entidad nombrada que comprende más de tres construcciones
    184 condicionales y una construcción en bucle;</li>
    185 
    186   <li>el código que no pertenece a las definiciones nombradas llama a algo
    187 distinto de las entidades primitivas y funciones definidas más arriba en la
    188 página;</li>
    189 
    190   <li>el código que no pertenece a las definiciones nombradas contiene, en total,
    191 más de tres construcciones condicionales y una construcción en bucle;</li>
    192 
    193   <li>llama a la función <b>eval</b>;</li>
    194 
    195   <li>hace llamadas Ajax;</li>
    196 
    197   <li>utiliza notación con corchetes para acceder de manera dinámica a las
    198 propiedades de los objetos: <b><em>object</em>[<em>property</em>]</b>.</li>
    199 
    200   <li>modifica el <abbr title="Document Object Model">DOM</abbr>;</li>
    201   
    202   <li>utiliza estructuras JavaScript dinámicas que son difíciles de analizar sin
    203 interpretar el programa, o se carga junto con <cite>scripts</cite> que
    204 utilizan dichas estructuras. Concretamente, se trata del uso de cualquier
    205 estructura distinta de una cadena constante con ciertos métodos
    206 (<b>Obj.write</b>, <b>Obj.createElement</b> y otros).</li>
    207 </ul>
    208 
    209 <p>¿Cómo hacemos para determinar si el código JavaScript es libre? En un <a
    210 href="/licenses/javascript-labels.html">artículo aparte</a> proponemos un
    211 método para que un programa JavaScript que no sea trivial inserto en una
    212 página web indique la URL donde se encuentra su código fuente, y también su
    213 licencia, mediante comentarios estilizados.</p>
    214 
    215 <p>Por último, tenemos que modificar los navegadores libres para que detecten y
    216 bloqueen el código JavaScript en las páginas web cuando no sea libre ni
    217 trivial. El programa <a href="/software/librejs/">LibreJS</a> detecta y
    218 bloquea el código JavaScript que no es libre ni trivial en las páginas que
    219 se visitan. LibreJS está incluido en IceCat y disponible como aplicación
    220 complementaria para Firefox.</p>
    221 
    222 <p>Los usuarios de navegadores necesitan una funcionalidad fácil de usar que
    223 especifique el código JavaScript a utilizar <em>en lugar</em> del que se
    224 encuentre en una página dada (el código especificado podría ser un reemplazo
    225 completo o una versión modificada del programa JavaScript libre de esa
    226 página). Greasemonkey está cerca de poder hacerlo, pero no lo suficiente,
    227 pues no garantiza la modificación del código JavaScript de la página antes
    228 de que el programa comience a ejecutarse. Funciona si se utiliza un proxy
    229 local, pero esto es demasiado incómodo como para considerarlo una solución
    230 real. Tenemos que desarrollar un procedimiento que sea fiable y cómodo, así
    231 como sitios web para compartir los cambios. El Proyecto GNU desearía
    232 recomendar sitios dedicados únicamente a cambios libres.</p>
    233 
    234 <p>Estas funcionalidades permitirán que un programa JavaScript que se incluya
    235 en una página web sea libre en un sentido real y práctico. JavaScript ya no
    236 será un obstáculo para nuestra libertad, no más de lo que C y Java lo son
    237 ahora. Tendremos la posibilidad de rechazar e incluso reemplazar los
    238 programas JavaScript que no sean libres ni triviales, tal y como ahora
    239 rechazamos y reemplazamos los paquetes privativos que se ofrecen para su
    240 instalación convencional. A partir de ese momento podremos iniciar nuestra
    241 campaña para que los sitios web liberen JavaScript.</p>
    242 
    243 <p>Entretanto, existe un caso en el que es aceptable ejecutar un programa
    244 JavaScript que no es libre: cuando se hace para enviar una queja a los
    245 administradores del sitio señalándoles que deberían liberar o eliminar el
    246 código JavaScript de la página. No dude en habilitar temporalmente
    247 JavaScript con esa finalidad, pero recuerde desactivarlo después.</p>
    248 
    249 <!-- any links that used to point to the appendices should point to
    250      free-your-javascript.html instead.  -->
    251 <div class="announcement">
    252 <hr class="no-display" />
    253 <p>Webmasters: existen <a
    254 href="/software/librejs/free-your-javascript.html">varias maneras</a> de
    255 indicar la licencia de los programas JavaScript en un sitio web.</p>
    256 <hr class="no-display" />
    257 </div>
    258 
    259 <p><strong>Agradecimientos:</strong> Gracias a <a
    260 href="/people/people.html#mattlee">Matt Lee</a> y <a
    261 href="https://johnresig.com/">John Resig</a> por su ayuda en la concreción
    262 del criterio que proponemos, y a David Parunakian por señalarme este
    263 problema.</p>
    264 </div>
    265 
    266 <div class="translators-notes">
    267 
    268 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
    269  </div>
    270 </div>
    271 
    272 <!-- for id="content", starts in the include above -->
    273 <!--#include virtual="/server/footer.es.html" -->
    274 <div id="footer" role="contentinfo">
    275 <div class="unprintable">
    276 
    277 <p>Envíe sus consultas acerca de la FSF y GNU a <a
    278 href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Existen también <a
    279 href="/contact/">otros medios para contactar</a> con la FSF. <br /> Para
    280 avisar de enlaces rotos y proponer otras correcciones o sugerencias,
    281 diríjase a <a
    282 href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>
    283 
    284 <p>
    285 <!-- TRANSLATORS: Ignore the original text in this paragraph,
    286         replace it with the translation of these two:
    287 
    288         We work hard and do our best to provide accurate, good quality
    289         translations.  However, we are not exempt from imperfection.
    290         Please send your comments and general suggestions in this regard
    291         to <a href="mailto:web-translators@gnu.org">
    292 
    293         &lt;web-translators@gnu.org&gt;</a>.</p>
    294 
    295         <p>For information on coordinating and contributing translations of
    296         our web pages, see <a
    297         href="/server/standards/README.translations.html">Translations
    298         README</a>. -->
    299 El equipo de traductores al español se esfuerza por ofrecer traducciones
    300 fieles al original y de buena calidad, pero no estamos libres de cometer
    301 errores.<br /> Envíe sus comentarios y sugerencias sobre las traducciones a
    302 <a
    303 href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
    304 </p><p>Consulte la <a href="/server/standards/README.translations.html">Guía
    305 para las traducciones</a> para obtener información sobre la coordinación y
    306 el envío de traducciones de las páginas de este sitio web.</p>
    307 </div>
    308 
    309 <!-- Regarding copyright, in general, standalone pages (as opposed to
    310      files generated as part of manuals) on the GNU web server should
    311      be under CC BY-ND 4.0.  Please do NOT change or remove this
    312      without talking with the webmasters or licensing team first.
    313      Please make sure the copyright date is consistent with the
    314      document.  For web pages, it is ok to list just the latest year the
    315      document was modified, or published.
    316      
    317      If you wish to list earlier years, that is ok too.
    318      Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
    319      years, as long as each year in the range is in fact a copyrightable
    320      year, i.e., a year in which the document was published (including
    321      being publicly visible on the web or in a revision control system).
    322      
    323      There is more detail about copyright years in the GNU Maintainers
    324      Information document, www.gnu.org/prep/maintain. -->
    325 <p>Copyright &copy; 2009-2013, 2016-2019, 2021 Richard Stallman</p>
    326 
    327 <p>Esta página está bajo licencia <a rel="license"
    328 href="http://creativecommons.org/licenses/by-nd/4.0/deed.es_ES">Creative
    329 Commons Reconocimiento-SinObraDerivada 4.0 Internacional</a>.</p>
    330 
    331 <!--#include virtual="/server/bottom-notes.es.html" -->
    332 <div class="translators-credits">
    333 
    334 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
    335 <strong>Traducción: David Arroyo Menéndez, 2009.</strong></div>
    336 
    337 <p class="unprintable"><!-- timestamp start -->
    338 Última actualización:
    339 
    340 $Date: 2021/11/28 13:06:31 $
    341 
    342 <!-- timestamp end -->
    343 </p>
    344 </div>
    345 </div>
    346 <!-- for class="inner", starts in the banner include -->
    347 </body>
    348 </html>