/[www]/www/philosophy/javascript-trap.es.html
ViewVC logotype

Contents of /www/philosophy/javascript-trap.es.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.78 - (show annotations) (download) (as text)
Mon Jan 1 05:42:26 2024 UTC (9 months, 3 weeks ago) by gnun
Branch: MAIN
CVS Tags: HEAD
Changes since 1.77: +2 -2 lines
File MIME type: text/html
Automatic update by GNUnited Nations.

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">&lt;gnu@gnu.org&gt;</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">&lt;webmasters@gnu.org&gt;</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 &lt;web-translators@gnu.org&gt;</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">&lt;web-translators@gnu.org&gt;</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 &copy; 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>

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26