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