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

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

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Vrij maar geketend - De Java-valstrik - GNU-project - Free Software
Foundation</title>

<!--#include virtual="/philosophy/po/java-trap.translist" -->
<!--#include virtual="/server/banner.nl.html" -->
<h2>Vrij maar geketend - De Java-valstrik</h2>

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


<div class="announcement"><blockquote><h3>Mededeling</h3>
<p>Sinds publicatie van dit artikel heeft Sun (nu onderdeel van Oracle) het
grootste deel van de referentie-implementatie van het Java-platform onder de
GNU General Public License <a
href="http://www.fsf.org/news/fsf-welcomes-gpl-java.html">uitgebracht</a>,
en er is nu een vrij ontwikkelplatform voor Java. Daarmee vormt de
Java-programmeertaal niet langer een valkuil.</p>

<p>Oppassen echter, niet ieder Java platform is hiermee vrij. Sun verspreidt
ook nog steeds een uitvoerbare versie die niet vrij is, evenals andere
bedrijven.</p>

<p>De vrij omgeving voor Java heet IcedTea; dit bevat ook de broncode die Sun
vrij heeft gegeven. Die moet je dus gebruiken. Veel GNU/Linux-distributies
bevatten IcedTea maar sommigen bevatten niet-vrije varianten. (Opmerking in
oktober 2015: de vrije implementatie van Java staat in veel
GNU/Linux-distributies bekend als OpenJDK.)</p>

<p>Om te kunnen achterhalen of je Java-programma's goed in een vrije omgeving
zullen draaien zul je met IcedTea moeten ontwikkelen. Theoretisch zouden de
platformen uitwisselbaar moeten zijn maar dat is nooit voor 100 procent.</p>

<p>Verder zijn er niet-vrije programma's in omloop met &ldquo;Java&rdquo; in
hun naam, zoals JavaFX, en zijn er niet-vrije Java-pakketten die je wellicht
zou willen gebruiken maar dat niet moet doen. Controleer dus altijd de
licenties. Wanneer je Swing gebruikt, vergewis je er dan van dat je de vrije
versie gebruikt die in IcedTea zit. (Opmerking in oktober 2015: een vrije
vervanging voor JavaFX, OpenJFX genaamd, is uitgebracht.)</p>

<p>Desalniettemin blijft het hier beschreven probleem relevant omdat andere
niet-vrije programmabibliotheken of platformen hetzelfde probleem zouden
kunnen bevatten.  Laat deze geschiedenis van Java dus een les zijn om
toekomstige valstrikken te voorkomen.</p>

<p>Zie verder: <a href="/philosophy/javascript-trap.html">De
JavaScript-valstrik</a>.</p>
</blockquote>
</div>

<p>12 april 2004</p>

<p>
  Wanneer je programma vrije software is, is het van zichzelf ethisch
verantwoord&mdash;maar er loert een valstrik waar je voor uit moet
kijken. Hoewel je programma zelf vrij is kan het toch beperkingen hebben
door andere software waar het van afhankelijk is. Omdat dit probleem vooral
speelt bij Java-programma's noemen we het de Java-valstrik.
</p>

<p>
  Een programma is vrije software wanneer gebruikers ervan bepaalde
belangrijke vrijheden krijgen. Grof gezegd zijn dit: de vrijheid een
programma te gebruiken, de vrijheid het te bestuderen en de broncode te
veranderen, de vrijheid de broncode en binaire code opnieuw te verspreiden
en de vrijheid om nieuwe, verbeterde versies ervan te publiceren (zie ook <a
href= "/philosophy/free-sw.html">
http://www.gnu.org/philosophy/free-sw.html</a>). Of een programma vrij is of
niet is geheel afhankelijk van de licentie die erop van kracht is.
</p>

<p>
  De vraag of het programma gebruikt kan worden in de vrije wereld, door
mensen die in vrijheid behoren te leven, is moeilijker te beantwoorden. Dit
wordt niet alleen bepaald door de licentie van een programma, want geen
enkel programma werkt in totale isolatie. Ieder programma is afhankelijk van
andere programma's. Het moet bijvoorbeeld gecompileerd worden of
ge&iuml;nterpreteerd en is daarmee afhankelijk van een compiler of
interpretator. Wanneer het gecompileerd wordt naar byte-code is het ook nog
eens afhankelijk van een byte-code interpretator. Verder heeft het
programmabibliotheken nodig om te draaien en het zou ook nog andere
programma's kunnen starten die in andere processen draaien. Al die
programma's vormen afhankelijkheden. Die afhankelijkheden kunnen nodig zijn
voor het programma om &uuml;berhaupt te draaien of alleen voor bepaalde
stukjes functionaliteit. Hoe dan ook, het programma, in zijn geheel of
gedeeltelijk, kan niet draaien zonder de afhankelijkheden.
</p>

<p>
  Wanneer sommige van die afhankelijkheden van een programma niet vrij zijn,
betekent het dat het programma, of een gedeelte daarvan, niet kan draaien op
een compleet vrij systeem&mdash;het is onbruikbaar in de vrije
wereld. Natuurlijk, we kunnen het programma verspreiden en kopie&euml;n
houden op onze machines maar dat heeft weinig nut als we ze niet kunnen
laten draaien. Het programma mag dan vrije software zijn, het wordt bij
wijze van spreken geketend door zijn niet-vrije afhankelijkheden.
</p>

<p>
  Dit probleem kan zich voordoen in alle software, geschreven in welke taal
dan ook. Een vrij programma bijvoorbeeld dat alleen op Microsoft Windows
draait is duidelijk onbruikbaar in de vrije wereld. Maar software op
GNU/Linux kan ook onbruikbaar zijn wanneer het afhankelijk is van andere,
niet-vrije, software. In het verleden waren Motif (voordat we LessTif
hadden) en Qt (voordat de ontwikkelaars het vrije software maakten) grote
veroorzakers van dit probleem.  De meeste 3D-videokaarten werken alleen
volledig met niet-vrije stuurprogramma's die ook een oorzaak van het
probleem vormen. Maar de grootste bron van problemen op dit moment is Java,
mede doordat veel mensen die vrije software schrijven Java sexy
vinden. Verblind door de aantrekkingskracht van de taal zien ze het probleem
van de afhankelijkheden over het hoofd en raken verstrikt in de
Java-valstrik.
</p>

<p>
  De Java-implementatie door Sun is niet vrij. De standaard Java-bibliotheken
zijn ook niet vrij. We hebben echter wel vrije versies van Java, zoals de <a
href="http://gcc.gnu.org/java/">GNU-compiler voor Java</a> (GCJ) en <a href=
"/software/classpath">GNU Classpath</a>, maar die ondersteunen nog niet alle
mogelijkheden. We zijn bezig met een inhaalslag.
</p>

<p>
  Wanneer je een Java-programma op het Java-platform van Sun ontwikkelt loop
je het risico Sun-specifieke dingen te gebruiken zonder dat je het door
hebt. Wanneer je daar maanden later achter komt kan het ook weer maanden
kosten voordat je die afhankelijkheid eruit hebt. Je zou dan kunnen
verzuchten: &ldquo;Het is teveel werk om opnieuw te beginnen&rdquo;. Op dat
moment is je programma verstrikt geraakt in de Java-valstrik; het is niet
meer bruikbaar in de vrije wereld.
</p>

<p>
  De enige betrouwbare methode om de valstrik te omzeilen is alleen een vrije
implementatie van Java op je systeem toe te laten. Wanneer je op die manier
iets specifieks gebruikt van Java of een bibliotheek wat nog niet wordt
ondersteund, kom je er direct achter en kun je meteen je code aanpassen.
</p>

<p>
  Sun blijft bezig met het ontwikkelen van nieuwe &ldquo;standaard&rdquo;
Java-bibliotheken en ze zijn bijna allemaal niet-vrij; in veel gevallen is
zelfs de specificatie van de bibliotheek een handelsgeheim en de meest
recente versie van de licentie van Sun voor deze specificaties verbiedt
zelfs publicatie van implementaties die niet volledig zijn. (Zie <a href=
"http://jcp.org/aboutJava/communityprocess/JSPA2.pdf">
http://jcp.org/aboutJava/communityprocess/JSPA2.pdf</a> en <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>
voor voorbeelden).
</p>

<p>
  Gelukkig laat die licentie wel toe dat er een vrije implementatie
uitgebracht kan worden; anderen die deze bibliotheek dan ontvangen mogen hem
dan wel veranderen en hoeven niet volledig aan de specificatie te
voldoen. Maar deze vereiste beperkt wel de mogelijkheid om via een
samenwerkingsmodel een vrije implementatie te maken. In een dergelijk model
moet je onvolledige versies publiceren wat diegenen die de specificatie
hebben gelezen niet mogen doen.
</p>

<p>
  In de begintijd van de vrije software beweging was het onmogelijk om geen
afhankelijkheden te hebben met niet-vrije programma's. Voordat we de GNU
C-compiler hadden was ieder C-programma (vrij of niet), afhankelijk van een
niet-vrije C-compiler. Voordat we de GNU C-bibliotheek hadden was ieder
programma afhankelijk van een niet-vrije C-bibliotheek. Voordat we Linux
hadden, de eerste vrije kernel, was ieder programma afhankelijk van een
niet-vrije kernel. Voordat we Bash hadden moest ieder script
ge&iuml;nterpreteerd worden door een niet-vrije shell. Deze beperkende
afhankelijkheden waren onvermijdelijk maar dit was acceptabel omdat ons plan
was ze in de toekomst hiervan te redden. Ons hogere doel, een zelfstandig
besturingssysteem, zou een vrije vervanging hebben voor al deze
afhankelijkheden; wanneer we dit doel zouden bereiken zouden al onze
programma's gered zijn. Aldus geschiedde: met het GNU/Linux-systeem kunnen
we deze programma's laten draaien op een vrij platform.
</p>

<p>
  Vandaag de dag is het anders. We hebben krachtige vrije besturingssystemen
en een hoop vrije programmeer-hulpmiddelen. Wat je ook wilt doen, je kunt
het op een vrij platform doen; er is geen reden meer om een niet-vrije
afhankelijkheid te accepteren, zelfs niet voor even. Mensen raken
voornamelijk nog verstrikt omdat ze er niet goed over nadenken. De simpelste
oplossing voor deze Java-valstrik is door mensen aan te leren dit te
vermijden.
</p>

<p>
  Om je Java-code te beschermen tegen de Java-valstrik moet je een vrije
Java-ontwikkelomgeving installeren en die gebruiken. Meer in het algemeen,
wat voor taal je ook gebruikt, let op en controleer de vrije status van de
afhankelijkheden van je programma. De makkelijkste manier om dit na te gaan
is door te kijken of het programma in de lijst van vrije software (<a href=
"http://www.fsf.org/directory">http://www.fsf.org/directory</a>) staat. Als
hij niet in die lijst voorkomt dan kun je altijd nog zijn licentie nagaan op
de lijst van vrije licenties (<a href= "/licenses/license-list.html">
http://www.gnu.org/licenses/license-list.html</a>).
</p>

<p>
  We proberen nu de verstrikte Java-programma's te redden dus als je een zwak
hebt voor Java wordt je van harte uitgenodigd om te helpen bij de
ontwikkeling van GNU Classpath. Het testen van je programma met de
GCJ-compiler en GNU Classpath en problemen met reeds gebouwde klassen
rapporteren is ook nuttig. Het afmaken van GNU Classpath vergt echter tijd;
indien er meer niet-vrije programmabibliotheken toegevoegd blijven worden
zullen we wellicht nooit bij raken. Dus keten je vrije software alsjeblieft
niet.  Wanneer je nu een applicatie gaat schrijven, doe het dan zo dat het
vanaf het begin op vrije voorzieningen draait.
</p>

<h3>Zie ook:</h3>
<p><a href="/philosophy/sun-in-night-time.html">Het Merkwaardige Incident van
Sun in de Nacht</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.nl.html" -->
<div id="footer">
<div class="unprintable">

<p>Gelieve algemene vragen over FSF &amp; GNU te sturen naar <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Er zijn ook nog <a
href="/contact/">andere manieren om in contact te komen</a> met de
FSF. Foute links en andere correcties graag sturen aan <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>. -->
We doen ons best om goede vertalingen te maken maar staan altijd open voor
verbeteringen. Suggesties, op- en aanmerkingen sturen aan: <a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.</p>
<p>Zie <a href="/server/standards/README.translations.html"> Translations
README</a> voor informatie over het onderhoud van vertalingen op deze
website.</p>
</div>

<p>Copyright &copy; 2004, 2010, 2015 Richard Stallman</p>

<p>Deze pagina is uitgebracht onder een <a rel="license"
href="https://creativecommons.org/licenses/by-nd/4.0/deed.nl">Creative
Commons Naamsvermelding-GeenAfgeleideWerken 4.0 Internationaal licentie</a>.</p>

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

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
<strong>Vertaling:</strong> <a
href="//savannah.gnu.org/projects/www-nl">www-nl</a></div>

<p class="unprintable"><!-- timestamp start -->
Bijgewerkt:

$Date: 2017/05/22 08:01:00 $

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