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

<!--#include virtual="/server/header.pt-br.html" -->
<!-- Parent-Version: 1.77 -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Livre, mas Algemado - A Armadilha do Java - Projeto GNU - Free Software
Foundation</title>

<!--#include virtual="/philosophy/po/java-trap.translist" -->
<!--#include virtual="/server/banner.pt-br.html" -->
<h2>Livre, mas Algemado - A Armadilha do Java</h2>

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


<div class="announcement"><blockquote><h3>Nota introdutória</h3>
<p>Desde que este artigo foi publicado pela primeira vez, a Sun (agora parte da
Oracle) <a
href="http://www.fsf.org/news/fsf-welcomes-gpl-java.html">relicenciou</a> a
maioria das sua implementação de referência de plataforma Java sob a Licença
Pública Geral GNU, e agora existe um ambiente de desenvolvimento livre para
Java. Assim, a linguagem Java, como tal, não é mais uma armadilha.</p>

<p>Você deve ter cuidado, no entanto, porque nem toda plataforma Java é
livre. A Sun continua a distribuir uma plataforma Java executável que não é
livre, e outras empresas também o fazem.</p>

<p>O ambiente livre para Java é chamado IcedTea; o código-fonte que Sun liberou
está incluído nele. Então esse é o que você deve usar. Muitas distribuições
GNU/Linux vêm com o IcedTea, mas algumas incluem plataformas Java não
livres. (Nota, adicionada em 10/2015: A implementação livre de Java é
conhecida como OpenJDK em muitas distribuições GNU/Linux.)</p>

<p>Para garantir que seus programas Java sejam executados corretamente em um
ambiente livre, você precisa desenvolvê-los usando o IcedTea. Teoricamente,
as plataformas Java devem ser compatíveis, mas não são totalmente
compatíveis.</p>

<p>Além disso, existem programas não livres com o “Java” em seu nome, como o
JavaFX, e há pacotes Java não livres que você pode achar tentadores, mas
você precisa rejeitá-los. Portanto, verifique as licenças de todos os
pacotes que você planeja usar. Se você usa o Swing, certifique-se de usar a
versão livre, que vem com o IcedTea. (Nota, adicionada em 10/2015: Um
substituto livre para o JavaFX chamado OpenJFX foi lançado.)</p>

<p>Além dessas especificidades de Java, a questão geral descrita aqui permanece
importante, porque qualquer biblioteca não livre ou plataforma de
programação pode causar um problema semelhante. Devemos aprender uma lição
com a história do Java, para que possamos evitar outras armadilhas no
futuro.</p>

<p>Por favor, veja também: <a href="/philosophy/javascript-trap.html"> A
Armadilha do JavaScript</a>.</p>
</blockquote>
</div>

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

<p>
  Se o seu programa é software livre, é basicamente ético &ndash; mas há uma
armadilha para a qual você deve estar atento. Seu programa, embora seja
livre, pode ser restrito por softwares não livres dos quais ele
depende. Como o problema é mais proeminente hoje em dia nos programas Java,
nós o chamamos de Armadilha do Java.
</p>

<p>
  Um programa é software livre se seus usuários tiverem certas liberdades
cruciais. A grosso modo, elas são: a liberdade de executar o programa, a
liberdade de estudar e alterar o fonte, a liberdade de redistribuir o fonte
e os binários e a liberdade de publicar versões aprimoradas. (Veja <a
href="/philosophy/free-sw.html">http://www.gnu.org/philosophy/free-sw.html</a>.)
Se algum programa dado em forma de fonte é software livre depende unicamente
do significado de sua licença.
</p>

<p>
  Se o programa pode ser usado no mundo livre, usado por pessoas que querem
viver em liberdade, é uma questão mais complexa. Isso não é determinado
apenas pela própria licença do programa porque nenhum programa funciona
isoladamente. Todo programa depende de outros programas. Por exemplo, um
programa precisa ser compilado ou interpretado, então depende de um
compilador ou interpretador. Se compilado em código de byte, isso depende de
um interpretador de código de bytes. Além disso, ele precisa de bibliotecas
para ser executado e também pode chamar outros programas separados que são
executados em outros processos. Todos esses programas são
dependências. Dependências podem ser necessárias para o programa ser
executado, ou podem ser necessárias apenas para determinados recursos. De
qualquer maneira, todo ou parte do programa não pode operar sem as
dependências.
</p>

<p>
  Se algumas das dependências de um programa forem não livres, isso significa
que todo ou parte do programa não pode ser executado em um sistema
totalmente livre &ndash; é inutilizável no mundo livre. Claro, poderíamos
redistribuir o programa e ter cópias em nossas máquinas, mas isso não é
muito bom se não for executado. Esse programa é software livre, mas está
efetivamente preso por suas dependências não livres.
</p>

<p>
  Esse problema pode ocorrer em qualquer tipo de software, em qualquer
linguagem. Por exemplo, um programa livre que só funciona no Microsoft
Windows é claramente inútil no mundo livre. Mas o software que funciona no
GNU/Linux também pode ser inútil se depender de outro software não livre. No
passado, o Motif (antes de ter o LessTif) e o Qt (antes de seus
desenvolvedores o tornar software livre) eram as principais causas desse
problema. A maioria das placas de vídeo 3D funciona totalmente apenas com
drivers não livres, o que também causa esse problema. Mas a principal fonte
desse problema hoje é o Java, porque as pessoas que escrevem software livre
geralmente acham que o Java é sexy. Cegos por sua atração pela linguagem,
eles ignoram a questão das dependências e caem na Armadilha do Java.
</p>

<p>
  A implementação de Java da Sun não é livre. As bibliotecas padrão do Java
também são não livres. Nós temos implementações livres de Java, como o <a
href="http://gcc.gnu.org/java/">GNU Compiler for Java</a> (GCJ) e <a
href="/software/classpath">GNU Classpath</a>, mas elas não possuem suporte a
todos os recursos ainda. Nós ainda estamos trabalhando nisso.
</p>

<p>
  Se você desenvolver um programa Java na plataforma Java da Sun, será
necessário usar recursos exclusivos da Sun sem nem mesmo notar. No momento
em que você descobrir isso, você pode tê-los usado por meses, e refazer o
trabalho pode levar mais meses. Você pode dizer: “É muito trabalho para
recomeçar”. Então, seu programa terá caído na Armadilha do Java; será
inutilizável no mundo livre.
</p>

<p>
  A maneira confiável de evitar a Armadilha do Java é ter apenas uma
implementação livre do Java em seu sistema. Então, se você usar um recurso
ou biblioteca Java que o software livre ainda não possui suporte, você
descobrirá imediatamente e poderá reescrever esse código imediatamente.
</p>

<p>
  A Sun continua a desenvolver bibliotecas “padrão” adicionais para o Java e
quase todas elas são não livres; em muitos casos, até mesmo a especificação
de uma biblioteca é um segredo comercial, e a última licença da Sun para
essas especificações proíbe o lançamento de qualquer coisa menos que uma
implementação completa da especificação. (Consulte <a
href="http://jcp.org/aboutJava/communityprocess/JSPA2.pdf">http://jcp.org/aboutJava/communityprocess/JSPA2.pdf</a>
e <a
href="http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html">http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html</a>
para exemplos.)
</p>

<p>
  Felizmente, essa licença de especificação permite lançar uma implementação
como software livre; outros que recebem a biblioteca podem ter permissão
para alterá-la e não são obrigados a aderir à especificação. Mas o requisito
tem o efeito de proibir o uso de um modelo de desenvolvimento colaborativo
para produzir a implementação livre. O uso desse modelo implicaria a
publicação de versões incompletas, algo que aqueles que leram a
especificação não têm permissão para fazer.
</p>

<p>
  Nos primeiros dias do movimento do software livre, era impossível evitar
depender de programas não livres. Antes de termos o compilador C GNU, todo
programa C (livre ou não) dependia de um compilador C não livre. Antes de
termos a biblioteca GNU C, todo programa dependia de uma biblioteca C não
livre. Antes de termos o Linux, o primeiro kernel livre, todo programa
dependia de um kernel não livre. Antes de termos o BASH, todo script de
shell tinha que ser interpretado por um shell não livre. Era inevitável que
nossos primeiros programas fossem inicialmente prejudicados por essas
dependências, mas aceitamos isso porque nosso plano incluía salvá-los
posteriormente. Nosso objetivo geral, um sistema operacional GNU de
hospedagem própria, incluía substituições livre para todas essas
dependências; Se alcançássemos a meta, todos os nossos programas seriam
resgatados. Assim aconteceu: com o sistema GNU/Linux, agora podemos usar
esses programas em plataformas livres.
</p>

<p>
  A situação é diferente hoje. Agora temos sistemas operacionais poderosos e
livres e muitas ferramentas de programação livres. Qualquer que seja o
trabalho que você queira fazer, você pode fazê-lo em uma plataforma livre;
não há necessidade de aceitar uma dependência não livre, mesmo que
temporariamente. A principal razão pela qual as pessoas caem na armadilha
hoje é porque elas não estão pensando nisso. A solução mais fácil para o
problema é ensinar as pessoas a reconhecê-lo e não cair nele.
</p>

<p>
  Para manter seu código Java protegido da Armadilha do Java, instale um
ambiente de desenvolvimento Java livre e use-o. De forma mais genérica, seja
qual for a linguagem que você usa, mantenha os olhos abertos e verifique o
status de programas dos quais o seu código depende. A maneira mais fácil de
verificar se um programa é livre é procurá-lo no Diretório de Software Livre
(<a
href="http://www.fsf.org/directory">http://www.fsf.org/directory</a>). Se um
programa não estiver no diretório, você poderá verificar sua(s) licença(s)
com a lista de licenças de software livre (<a
href="/licenses/license-list.html">http://www.gnu.org/licenças/license-list.html</a>).
</p>

<p>
  Estamos tentando resgatar os programas Java que caíram nessa armadilha,
portanto, se você gosta da linguagem Java, nós o convidamos a ajudar no
desenvolvimento do GNU Classpath. Experimentar seus programas com o GCJ
Compiler e o GNU Classpath, e relatar quaisquer problemas que você encontre
em classes já implementadas, também é útil. No entanto, terminar o GNU
Classpath levará tempo; se mais bibliotecas não livres continuarem sendo
adicionadas, talvez nunca tenhamos todas as mais recentes. Então, por favor,
não coloque seu software livre em grilhões. Quando você escrever um programa
hoje, escreva-o para funcionar em instalações livres desde o início.
</p>

<h3>Veja também:</h3>
<p><a href="/philosophy/sun-in-night-time.html">O curioso incidente da Sun no
período noturno</a></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.pt-br.html" -->
<div id="footer">
<div class="unprintable">

<p>Envie perguntas em geral sobre a FSF e o GNU para <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Também existem <a
href="/contact/">outros meios de contatar</a> a FSF. Links quebrados e
outras correções ou sugestões podem ser enviadas para <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>. -->
A equipe de traduções para o português brasileiro se esforça para oferecer
traduções precisas e de boa qualidade, mas não estamos isentos de erros. Por
favor, envie seus comentários e sugestões em geral sobre as traduções para
<a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
</p><p>Consulte o <a href="/server/standards/README.translations.html">Guia
para as traduções</a> para mais informações sobre a coordenação e o envio de
traduções das páginas deste site.</p>
</div>

<p>Copyright &copy; 2004, 2010, 2015 Free Software Foundation, Inc.</p>

<p>Esta página está licenciada sob uma licença <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/deed.pt_BR">Creative
Commons Atribuição-SemDerivações 4.0 Internacional</a>.</p>

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

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
Traduzido por: Rafael Fontenelle <a
href="mailto:rafaelff@gnome.org">&lt;rafaelff@gnome.org&gt;</a>, 2019.</div>

<p class="unprintable"><!-- timestamp start -->
Última atualização:

$Date: 2020/05/22 22:05:25 $

<!-- timestamp end -->
</p>
</div>
</div>
</body>
</html>