summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/es/java-trap.html
blob: 153d49f3de3e8504845851180823eb6522a49d24 (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
<!--#set var="ENGLISH_PAGE" value="/philosophy/java-trap.en.html" -->

<!--#include virtual="/server/header.es.html" -->
<!-- Parent-Version: 1.96 -->
<!-- This page is derived from /server/standards/boilerplate.html -->
<!--#set var="TAGS" value="essays licensing traps" -->
<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Libre pero encadenado. La trampa de Java - Proyecto GNU - Free Software
Foundation</title>

<!--#include virtual="/philosophy/po/java-trap.translist" -->
<!--#include virtual="/server/banner.es.html" -->
<!--#include virtual="/philosophy/ph-breadcrumb.es.html" -->
<!--GNUN: OUT-OF-DATE NOTICE-->
<!--#include virtual="/server/top-addendum.es.html" -->
<div class="article reduced-width">

<h2>Libre pero encadenado. La trampa de Java</h2>

<address class="byline">por <a href="https://www.stallman.org/">Richard Stallman</a></address>

<div class="emph-box" style="background: none">
<h3 class="footnote">Nota</h3>
<p>Después de que se publicara este artículo, Sun (ahora parte de Oracle) <a
href="https://www.fsf.org/news/fsf-welcomes-gpl-java.html">relicenció</a> la
mayor parte de la implementación de referencia de su plataforma Java bajo la
Licencia Pública General de GNU, de manera que ahora existe un entorno de
desarrollo libre para Java. Así pues, el lenguaje Java ya no es una trampa.</p>

<p>No obstante, debe ser precavido, pues no toda plataforma Java es libre. Sun
sigue distribuyendo una plataforma Java ejecutable que no es libre, y
también otras compañías lo hacen.</p>

<p>El entorno libre para Java se denomina «IcedTea» &mdash;que es donde se
incluye el código fuente liberado por Sun&mdash;, de manera que es este el
entorno que se debe utilizar. Muchas distribuciones GNU/Linux vienen con
IcedTea, pero algunas incluyen plataformas Java que no son libres.(Nota,
añadida en octubre de 2015: La implentación libre de Java se denomina
OpenJDK en muchas distribuciones GNU/Linux).</p>

<p>Para tener la seguridad de que sus programas Java funcionarán correctamente
en un entorno libre, tiene que escribirlos utilizando IcedTea. En teoría,
las plataformas Java deberían ser compatibles, pero no lo son al cien por
cien.</p>

<p>Además, hay programas privativos que incluyen la palabra «Java» en el
nombre, como sucede con JavaFX, y existen paquetes Java que uno podría
sentirse tentado a utilizar pero que hay que rechazar, pues no son
libres. Si utiliza Swing, asegúrese de que sea la versión libre, que viene
con IcedTea.(Nota, añadida en octubre de 2015: Se ha publicado un reemplazo
libre de JavaFX llamado OpenJFX.)</p>

<p>Dejando a un lado los aspectos que se refieren específicamente a Java, el
asunto general aquí descrito continúa siendo importante, pues cualquier
plataforma de programación o biblioteca que no sea libre puede provocar un
problema similar. Hemos de aprender de la historia de Java para evitar así
otras trampas en el futuro.</p>

<p>Véase también: <a href="/philosophy/javascript-trap.html">La trampa de
JavaScript</a>.</p>
</div>
<hr class="no-display" />

<p><em>12 de abril de 2004</em></p>

<p>
  Si su programa es software libre, básicamente es ético, pero hay una trampa
a la que debe estar atento. Su programa, aunque en sí mismo sea libre, puede
estar limitado por alguna dependencia de software que no es libre. En la
actualidad este problema se da sobre todo en los programas Java, por lo que
lo llamamos «la trampa de Java».
</p>

<p>
  Un programa es software libre si sus usuarios tienen ciertas libertades
esenciales. Sin entrar en detalles, éstas son: la libertad de ejecutar el
programa, la libertad de estudiar y modificar el código fuente, la libertad
de redistribuir el código fuente y los binarios, y la libertad de publicar
versiones mejoradas (véase la <a href="/philosophy/free-sw.html">Definición
de software libre</a>). Que un programa en forma de código fuente sea
software libre depende únicamente de los términos de su licencia.
</p>

<p>
  Que el programa pueda ser usado en el mundo libre por personas que quieren
vivir en libertad es una cuestión más compleja. No es algo que esté
determinado únicamente por la licencia del programa, porque ningún programa
funciona aislado. Todos los programas dependen de otros programas. Por
ejemplo, un programa necesita ser compilado o interpretado, por lo tanto
depende de un compilador o de un intérprete. Si es compilado en
<cite>bytecode</cite>, depende de un intérprete de
<cite>bytecode</cite>. Además, necesita bibliotecas para ejecutarse, y
también puede invocar a otros programas aparte que se ejecutan en otros
procesos. Todos estos programas son dependencias. Las dependencias pueden
ser necesarias para poder ejecutar el programa, o pueden ser necesarias
solamente para ciertas funciones. En cualquier caso, el programa entero, o
alguna parte del mismo, no puede funcionar sin las dependencias.
</p>

<p>
  Si algunas de las dependencias de un programa no son libres, entonces ese
programa o una parte de él no se puede ejecutar en un sistema completamente
libre: es inutilizable en el mundo libre. Ciertamente podemos redistribuir
el programa y tener copias en nuestras máquinas, pero eso no sirve de mucho
si no podemos ejecutarlo. El programa es software libre, pero en la práctica
está encadenado por dependencias que no son libres.
</p>

<p>
  Este problema puede suceder en cualquier tipo de software, en cualquier
lenguaje. Por ejemplo, un programa libre que solamente funcione en Microsoft
Windows es claramente inútil en el mundo libre. Pero el software que
funciona en GNU/Linux también puede ser inútil si depende de otro software
que no sea libre. En el pasado, Motif (antes de que tuviéramos LessTif) y Qt
(antes de que sus desarrolladores lo convirtieran en software libre) fueron
importantes causantes de este problema. La mayoría de las tarjetas gráficas
3D solamente funcionan a pleno rendimiento con controladores que no son
libres, que también originan este problema. Pero hoy en día la causa
principal de este problema es Java, porque los programadores que escriben
software libre a menudo se sienten atraídos por Java. Cegados por su
atracción hacia el lenguaje, descuidan el problema de las dependencias y
caen en la trampa de Java.
</p>

<p>
  La implementación de Java de Sun no es libre. Las bibliotecas estándar de
Java tampoco son libres. Sí que tenemos implementaciones libres de Java,
como el <a
href="https://objectcomputing.com/resources/publications/sett/january-2003-gcj-the-gnu-compiler-for-java">compilador
de GNU para Java</a> (GCJ) y <a href="/software/classpath">Classpath de
GNU</a>, pero todavía no tienen todas las funcionalidades. Aún estamos
trabajando en ello.
</p>

<p>
  Si usted escribe un programa Java sobre la plataforma Java de Sun, está
expuesto a usar funcionalidades exclusivas de Sun sin ni siquiera
advertirlo. Para cuando se dé cuenta, quizás las haya estado usando durante
meses, y rehacer el trabajo podría llevarle aún más tiempo. Podría pensar:
«Volver a empezar es demasiado trabajo». Entonces su programa habrá caído en
la trampa de Java y será inutilizable en el mundo libre.
</p>

<p>
  La manera más eficaz de evitar la trampa de Java es tener en su sistema
solamente una implementación libre de Java. Así, si usted usa una
funcionalidad o biblioteca de Java que el software libre todavía no soporta,
se dará cuenta enseguida, y podrá reescribir ese código de inmediato.
</p>

<p>
  Sun continúa desarrollando bibliotecas «estándar» adicionales de Java, y
casi ninguna es libre. En muchos casos, incluso la especificación de la
biblioteca es un secreto comercial, y la última licencia de Sun para estas
especificaciones prohíbe publicar nada que no sea una implementación
completa de la especificación (para encontrar ejemplos, véase el <a
href="https://jcp.org/aboutJava/communityprocess/JSPA2.pdf"><cite>Java
Specification Participation Agreement</cite></a> y <a
href="https://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html"><cite>J2ME&trade;
Personal Basis Profile Specification</cite></a>).
</p>

<p>
  Afortunadamente, la licencia de esa especificación permite publicar una
implementación como software libre. A quien reciba la biblioteca se le
permite modificarla y no se le exige adherirse a la especificación. Pero el
requisito tiene el efecto de prohibir el uso de un modelo de desarrollo
cooperativo para producir la implementación libre. El uso de ese modelo
implicaría la publicación de versiones incompletas, algo que aquellos que
han leído la especificación no están autorizados a hacer.
</p>

<p>
  Durante los primeros años del Movimiento del Software Libre era imposible
evitar la dependencia de programas privativos. Antes de que tuviéramos el
compilador C de GNU, todos los programas en C (libres o no) dependían de un
compilador C que no era libre. Antes de que tuviéramos la biblioteca C de
GNU, todos los programas dependían de una biblioteca C que no era
libre. Antes de que tuviéramos Linux, el primer núcleo libre, todos los
programas dependían de un núcleo que no era libre. Antes de que tuviéramos
BASH, todos los textos para el intérprete de órdenes [<cite>shell
scripts</cite>] tenían que ser interpretados por un intérprete de órdenes
[<cite>shell</cite>] que no era libre. Era inevitable que nuestros primeros
programas se vieran obstaculizados por estas dependencias, pero lo aceptamos
porque nuestro plan incluía su posterior rescate. Nuestra meta final, un
sistema operativo GNU autosuficiente, incluía sustitutos libres para todas
estas dependencias. Si alcanzábamos la meta, todos nuestros programas serían
rescatados. Y así sucedió: con el sistema GNU/Linux, ahora podemos ejecutar
estos programas en plataformas libres.
</p>

<p>
  Hoy en día la situación es diferente. Tenemos potentes sistemas operativos
libres y muchas herramientas de programación libres. Cualquier tarea que
usted quiera hacer, la puede hacer en una plataforma libre; no hay necesidad
de aceptar una dependencia que no sea libre, ni siquiera temporalmente. La
principal razón por la que la gente cae hoy en la trampa es porque no
piensan en ello. La solución más fácil al problema de la trampa de Java es
enseñar a reconocerla para que las personas no caigan en ella.
</p>

<p>
  Para mantener su código Java a salvo de la trampa de Java, instale un
entorno de desarrollo Java que sea libre y úselo. De forma más general,
cualquiera que sea el lenguaje que use, mantenga los ojos abiertos y
compruebe que los programas de los que depende su código sean libres. La
manera más fácil de verificar si un programa es libre es buscarlo en el <a
href="https://www.fsf.org/directory">Directorio de Software Libre</a>. Si un
programa no está en el directorio, puede comprobar si su licencia está en la
<a href="/licenses/license-list.html">lista de licencias de software
libre</a>.
</p>

<p>
  Estamos intentando rescatar los programas atrapados en Java, así que si a
usted le gusta el lenguaje Java, le invitamos a colaborar en el desarrollo
de Classpath de GNU. También es útil probar sus programas con el compilador
GJC y con Classpath de GNU, e informar de cualquier problema que encuentre
en las clases que ya están implementadas. Sin embargo, finalizar Classpath
de GNU tomará tiempo. Si se siguen añadiendo más bibliotecas que no sean
libres, es posible que nunca dispongamos de todas las versiones más
recientes. Así que, por favor, no encadene su software libre. Cuando escriba
una aplicación, escríbala para que funcione desde el principio en entornos
libres.
</p>

<h3 class="footnote">Véase también:</h3>
<p><a href="/philosophy/sun-in-night-time.html">El curioso incidente de Sun a
medianoche</a></p>
</div>

<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" role="contentinfo">
<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 contributing 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; 2004, 2010, 2015, 2021 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: Quique, 2004.</strong> Revisiones: Maximiliano Curia,
Exal de Jesus Garcia Carrillo, Javier Fdez. Retenaga, Sergi Ruiz Trepat.</div>

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

$Date: 2021/10/01 17:39:49 $

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