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"><gnu@gnu.org></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"><webmasters@gnu.org></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 <web-translators@gnu.org></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"><web-translators@gnu.org></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 © 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>