summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/es/javascript-trap.html
blob: 4bf48dffe2e563b1c2c19d9d08448318682d44b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
<!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" -->

<!--#include virtual="/server/header.es.html" -->
<!-- Parent-Version: 1.90 -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>La trampa de JavaScript</title>

<!--#include virtual="/philosophy/po/javascript-trap.translist" -->
<!--#include virtual="/server/banner.es.html" -->
<h2>La trampa de JavaScript</h2>

<p>por <a href="http://www.stallman.org/">Richard Stallman</a></p>

<p><strong>Sin darse cuenta, usted puede estar utilizando a diario en el
navegador programas que no son libres.</strong></p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<blockquote>
<p>Webmasters: existen <a
href="/software/librejs/free-your-javascript.html">varias maneras</a> de
indicar la licencia de los programas JavaScript en un sitio web.</p>
</blockquote>

<p>En la comunidad del software libre estamos familiarizados con el hecho de
que <a href="/philosophy/free-software-even-more-important.html">los
programas que no son libres maltratan a los usuarios</a>. Algunos de
nosotros defendemos nuestra libertad rechazando todo software privativo en
nuestros ordenadores. Otros muchos consideran que la falta de libertad en un
programa es un serio defecto.</p>

<p>Muchos usuarios son conscientes de que este problema concierne a los
accesorios que los navegadores ofrecen instalar, ya que estos pueden ser
libres o no. Correcto, pero los navegadores ejecutan además otros programas
que no son libres y sobre los que no nos preguntan ni nos avisan, programas
que las páginas web contienen o enlazan. Tales programas están
mayoritariamente escritos en JavaScript, aunque también se usan otros
lenguajes.</p>

<p>JavaScript (oficialmente denominado ECMAScript, aunque pocos emplean este
nombre) al principio se usaba para pequeños detalles ornamentales en páginas
web, tales como bonitas pero innecesarias características de navegación y
maquetación. Era aceptable considerarlos como meras extensiones del lenguaje
de etiquetas HTML más que como verdadero software, y despreocuparse del
asunto.</p>

<p>Algunos sitios continúan usando JavaScript de esa manera, pero muchos lo
usan para programas mayores que realizan operaciones importantes. Por
ejemplo, Google Docs trata de instalar en el navegador del usuario un
programa JavaScript de medio megabyte y tan compactado que podríamos
llamarlo «Obscurscript». Esta forma compactada está hecha a partir del
código fuente, del que se borran los espacios que hacen el código legible y
las observaciones explicativas que lo hacen comprensible, y se sustituyen
los nombres significativos que aparecen en el código con nombres cortos
arbitrarios, de modo que no hay forma de saber lo que significan.</p>

<p>Parte del <a href="/philosophy/free-sw.html">significado de software
libre</a> es que los usuarios tienen acceso al código fuente del programa
(su diseño). El código fuente del programa representa la mejor preferida por
los programadores para modificarlo, lo que incluye un conveniente espaciado,
observaciones explicativas y nombres significativos. El código compactado es
un falso e inútil sustituto del código fuente. El código fuente real de
estos programas no está disponible para los usuarios, de modo que los
usuarios no pueden entenderlo; por lo tanto, estos programas no son libres.</p>

<p>Además de no ser libres, muchos de estos programas son
<em><cite>malware</cite></em>, ya que <a
href="http://github.com/w3c/fingerprinting-guidance/issues/8">espían al
usuario</a>.  Aún peor, algunos sitios web utilizan servicios que registran
<a
href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">todas
las acciones del usuario mientras mira la página</a>. Estos servicios
«redactan» los registros supuestamente excluyendo ciertos datos sensibles
que el sitio no debería obtener. Pero incluso si funcionan de forma fiable,
el único propósito de estos servicios es proporcionar al sitio web otros
datos personales que no debería tener.</p>

<p>Normalmente, los navegadores no avisan cuando cargan programas
JavaScript. Algunos tienen una opción para desactivar JavaScript totalmente,
pero incluso si somos conscientes de este problema, nos llevaría mucho
trabajo identificar y bloquear los programas que no son libres ni tampoco
triviales. No obstante, incluso en la comunidad del software libre, la
mayoría de los usuarios no son conscientes del problema, y el silencio de
los navegadores suele ocultarlo.</p>

<p>Un programa JavaScript se puede publicar como software libre distribuyendo
el código fuente bajo una licencia de software libre. Si el programa es
autónomo (si su funcionamiento y su propósito son independientes de la
página que lo contiene), no hay problema: se puede copiar y guardar como
archivo en el ordenador, se modifica luego ese archivo y se abre con un
navegador para ejecutarlo. Pero se trata de un caso poco habitual.</p>

<p>Los programas JavaScript casi siempre están pensados para una página o sitio
web específico cuyo funcionamiento depende de ellos. Surge entonces otro
problema: incluso si el código fuente del programa está disponible, los
navegadores no le ofrecen al usuario un modo de ejecutar su propia versión
modificada en vez de la original cuando visita esa página o sitio. El efecto
es comparable a la «tivoización», aunque en principio no tan difícil de
solucionar.</p>

<p>JavaScript no es el único lenguaje que los sitios web utilizan para los
programas que envían al usuario. Flash admite la programación mediante una
variante ampliada de JavaScript. Si alguna vez disponemos de un reproductor
libre para Flash lo bastante completo, tendremos que vérnoslas con el
problema de los programas Flash que no son libres. Es probable que
Silverlight cree un problema similar a Flash, solo que peor, ya que
Microsoft lo usa como plataforma para códecs que no son libres. Un reemplazo
libre para Silverlight no cumplirá su función en el mundo libre a menos que
venga de serie con códecs de recambio libres.</p>

<p>Los <cite>applets</cite> Java también se ejecutan en el navegador, y
plantean problemas similares. En general, cualquier sistema de
<cite>applet</cite> presenta problemas de este tipo. Disponer de un entorno
de ejecución libre para un <cite>applet</cite> no hace sino aplazar el
problema.</p>

<p>En teoría se puede programar en HTML y CSS, pero en la práctica esta
posibilidad es limitada y engorrosa; ya solo conseguir que haga algo es toda
una hazaña. Tales programas deberían ser libres, aunque desde 2019 CSS no
constituye un serio problema para la libertad de los usuarios.</p>

<p>Se ha desarrollado un potente movimiento para reclamar que los sitios web
empleen solo formatos y protocolos libres (algunos los llaman «abiertos»);
esto es, aquellos cuya documentación sea pública y que cualquiera sea libre
de implementar. No obstante, la presencia de programas de JavaScript en las
páginas web hace que este criterio sea insuficiente. El propio lenguaje de
JavaScript, en cuanto formato, es libre, y el uso de JavaScript en un sitio
web no es necesariamente algo malo. Sin embargo, como hemos visto antes, sí
puede ser malo, en el casos de que el programa de JavaScript no sea
libre. Cuando el sitio transmite un programa al usuario, no basta con que el
programa esté escrito en un lenguaje documentado y sin trabas, sino que
además el programa mismo debe ser libre. «Transmitir al usuario únicamente
programas libres» debe ser uno de los criterios de un sitio web ético.</p>

<p>La carga y ejecución silenciosa de programas que no son libres es uno de los
diversos problemas que presentan las «aplicaciones web». La expresión
«aplicación web» se acuñó para obviar la distinción fundamental entre el
software que se entrega a los usuarios y el que se ejecuta en un
servidor. Puede referirse a un programa cliente especializado que se ejecuta
en un navegador, puede referirse a un software especializado del servidor, o
puede referirse a un programa cliente especializado que opera mano a mano
con software especializado del servidor. La parte cliente y la parte
servidor plantean problemas éticos diferentes, aun cuando estén tan
integradas que se pueda considerar que forman parte de un solo
programa. Este artículo se ocupa solo del software de la parte
cliente. Tratamos lo referente al servidor por separado.</p>

<p>En la práctica, ¿cómo podemos afrontar el problema de la presencia en sitios
web de programas Javascript que no son libres ni triviales? En primer lugar,
no ejecutarlos.</p>

<p>¿A qué nos referimos cuando decimos que «no es trivial»? Es una cuestión de
grado, por lo que no se trata de buscar una única respuesta correcta, sino
de ofrecer un criterio sencillo que dé buenos resultados.</p>
<p>
Nuestro criterio actual es considerar que un programa escrito en JavaScript
no es trivial si se cumple alguna de las siguientes condiciones:</p>

<ul>
  <li>se remite a él como <cite>script</cite> externo (desde otra página);</li>

  <li>declara un <cite>array</cite> de más de 50 elementos;</li>

  <li>define una entidad nombrada (función o método) que llama a algo diferente de
una primitiva;</li>

  <li>define una entidad nombrada que comprende más de tres construcciones
condicionales y una construcción en bucle;</li>

  <li>el código que no pertenece a las definiciones nombradas llama a algo
distinto de las entidades primitivas y funciones definidas más arriba en la
página;</li>

  <li>el código que no pertenece a las definiciones nombradas contiene, en total,
más de tres construcciones condicionales y una construcción en bucle;</li>

  <li>llama a la función <b>eval</b>;</li>

  <li>hace llamadas Ajax;</li>

  <li>utiliza notación con corchetes para acceder de manera dinámica a las
propiedades de los objetos: <b><em>object</em>[<em>property</em>]</b>.</li>

  <li>modifica el <abbr title="Document Object Model">DOM</abbr>;</li>
  
  <li>utiliza estructuras JavaScript dinámicas que son difíciles de analizar sin
interpretar el programa, o se carga junto con <cite>scripts</cite> que
utilizan dichas estructuras. Concretamente, utilizando cualquier estructura
distinta de una cadena literal con ciertos métodos (<b>Obj.write</b>,
<b>Obj.createElement</b> y demás).</li>
</ul>

<p>¿Cómo hacemos para determinar si el código JavaScript es libre? En un <a
href="/licenses/javascript-labels.html">artículo aparte</a> proponemos un
método para que un programa JavaScript que no sea trivial inserto en una
página web indique la URL donde se encuentra su código fuente, y también su
licencia, mediante comentarios estilizados.</p>

<p>Por último, tenemos que modificar los navegadores libres para que detecten y
bloqueen el código JavaScript en las páginas web cuando no sea libre ni
trivial. El programa <a href="/software/librejs/">LibreJS</a> detecta y
bloquea el código JavaScript que no es libre ni trivial en las páginas que
se visitan. LibreJS está incluido en IceCat y disponible como aplicación
complementaria para Firefox.</p>

<p>Los usuarios de navegadores necesitan una funcionalidad fácil de usar que
especifique el código JavaScript a utilizar <em>en lugar</em> del que se
encuentre en una página dada (el código especificado podría ser un reemplazo
completo o una versión modificada del programa JavaScript libre de esa
página). Greasemonkey está cerca de poder hacerlo, pero no lo suficiente,
pues no garantiza la modificación del código JavaScript de la página antes
de que el programa comience a ejecutarse. Funciona si se utiliza un proxy
local, pero esto es demasiado incómodo como para considerarlo una solución
real. Tenemos que desarrollar un procedimiento que sea fiable y cómodo, así
como sitios web para compartir los cambios. El Proyecto GNU desearía
recomendar sitios dedicados únicamente a cambios libres.</p>

<p>Estas funcionalidades permitirán que un programa JavaScript que se incluya
en una página web sea libre en un sentido real y práctico. JavaScript ya no
será un obstáculo para nuestra libertad, no más de lo que C y Java lo son
ahora. Tendremos la posibilidad de rechazar e incluso reemplazar los
programas JavaScript que no sean libres ni triviales, tal y como ahora
rechazamos y reemplazamos los paquetes privativos que se ofrecen para su
instalación convencional. A partir de ese momento podremos iniciar nuestra
campaña para que los sitios web liberen JavaScript.</p>

<p>Entretanto, existe un caso en el que es aceptable ejecutar un programa
JavaScript que no es libre: cuando se hace para enviar una queja a los
administradores del sitio señalándoles que deberían liberar o eliminar el
código JavaScript de la página. No dude en habilitar temporalmente
JavaScript con esa finalidad, pero recuerde desactivarlo después.</p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<blockquote>
<p>Webmasters: existen <a
href="/software/librejs/free-your-javascript.html">varias maneras</a> de
indicar la licencia de los programas JavaScript en un sitio web.</p>
</blockquote>

<p><strong>Agradecimientos:</strong> Gracias a <a
href="/people/people.html#mattlee">Matt Lee</a> y <a
href="http://ejohn.org">John Resig</a> por su ayuda en la concreción del
criterio que proponemos, y a David Parunakian por señalarme este problema.</p>

<div class="translators-notes">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
 </div>
</div>

<!-- for id="content", starts in the include above -->
<!--#include virtual="/server/footer.es.html" -->
<div id="footer">
<div class="unprintable">

<p>Envíe sus consultas acerca de la FSF y GNU a <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Existen también <a
href="/contact/">otros medios para contactar</a> con la FSF. <br /> Para
avisar de enlaces rotos y proponer otras correcciones o sugerencias,
diríjase a <a
href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>

<p>
<!-- TRANSLATORS: Ignore the original text in this paragraph,
        replace it with the translation of these two:

        We work hard and do our best to provide accurate, good quality
        translations.  However, we are not exempt from imperfection.
        Please send your comments and general suggestions in this regard
        to <a href="mailto:web-translators@gnu.org">

        &lt;web-translators@gnu.org&gt;</a>.</p>

        <p>For information on coordinating and submitting translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
El equipo de traductores al español se esfuerza por ofrecer traducciones
fieles al original y de buena calidad, pero no estamos libres de cometer
errores.<br /> Envíe sus comentarios y sugerencias sobre las traducciones a
<a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
</p><p>Consulte la <a href="/server/standards/README.translations.html">Guía
para las traducciones</a> para obtener información sobre la coordinación y
el envío de traducciones de las páginas de este sitio web.</p>
</div>

<!-- Regarding copyright, in general, standalone pages (as opposed to
     files generated as part of manuals) on the GNU web server should
     be under CC BY-ND 4.0.  Please do NOT change or remove this
     without talking with the webmasters or licensing team first.
     Please make sure the copyright date is consistent with the
     document.  For web pages, it is ok to list just the latest year the
     document was modified, or published.
     
     If you wish to list earlier years, that is ok too.
     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
     years, as long as each year in the range is in fact a copyrightable
     year, i.e., a year in which the document was published (including
     being publicly visible on the web or in a revision control system).
     
     There is more detail about copyright years in the GNU Maintainers
     Information document, www.gnu.org/prep/maintain. -->
<p>Copyright &copy; 2009-2013, 2016, 2017, 2018, 2019 Richard Stallman</p>

<p>Esta página está bajo licencia <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/deed.es_ES">Creative
Commons Reconocimiento-SinObraDerivada 4.0 Internacional</a>.</p>

<!--#include virtual="/server/bottom-notes.es.html" -->
<div class="translators-credits">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
<strong>Traducción: David Arroyo Menéndez, 2009.</strong></div>

<p class="unprintable"><!-- timestamp start -->
Última actualización:

$Date: 2019/12/30 12:08:30 $

<!-- timestamp end -->
</p>
</div>
</div>
<!-- for class="inner", starts in the banner include -->
</body>
</html>