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

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

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Frei, aber gefesselt: Die Java-Falle - GNU-Projekt - Free Software
Foundation</title>

<!--#include virtual="/philosophy/po/java-trap.translist" -->
<!--#include virtual="/server/banner.de.html" -->
<h2>Frei, aber gefesselt: Die Java-Falle</h2>

<p>von <strong><a href="http://www.stallman.org/">Richard Stallman</a></strong>
| 2004-04-12</p>


<div class="announcement"><blockquote><h3> </h3>
<p><span class="intro">Seitdem dieser Artikel 2004 erstveröffentlicht wurde,
hat Sun Microsystems&#160;&#8209;&#160;2010 durch Oracle übernommen und
eingegliedert!&#160;&#8209;&#160;den größten Teil ihrer Umsetzung der
Java-Plattform-Referenz unter der <a href="/licenses/gpl" xml:lang="en"
lang="en">GNU General Public License</a> (GPL) <a
href="https://www.fsf.org/news/fsf-welcomes-gpl-java.html" title="Free
Software Foundation, Sun begins releasing Java under the GPL, unter: fsf.org
2006.">relizenziert</a>. Es gibt nunmehr eine freie Entwicklungsumgebung für
Java. Somit stellt Java als solches keine Falle mehr dar.</span></p>

<p><span class="intro">Man muss jedoch achtsam sein, denn nicht jede
Java-Plattform ist frei. Sun vertreibt nach wie vor eine lauffähige
Java-Plattform, die unfrei ist, und andere Unternehmen tun dies auch.</span></p>

<p><span class="intro">Die freie Umgebung für Java heiẞt
<strong>IcedTea</strong>, der von Sun freigegebene Quellcode ist darin
enthalten, die sollte <ins>bevorzugt</ins> genutzt werden. IcedTea ist
bereits in vielen GNU/Linux-Distributionen enthalten, einige enthalten
jedoch unfreie Java-Plattformen.<br /><br /><em>Hinweis: Die freie Umsetzung
der Java-Plattform ist<!-- in vielen GNU/Linux Distributionen--> unter der
Bezeichnung <strong>OpenJDK</strong> bekannt.</em></span></p>

<p><span class="intro">Um zuverlässig sicherzustellen das Java-Programme
problemlos in einer freien Umgebung ausgeführt werden können, muss man diese
mit IcedTea entwickeln. Theoretisch sollten die Java-Plattformen kompatibel
sein, aber sie sind nicht 100%ig kompatibel.</span></p>

<p><span class="intro">Darüber hinaus gibt es unfreie Programme mit den Wort
<em>Java</em> im Namen, wie beispielsweise <strong>JavaFX</strong>‚ und es
gibt unfreie Java-Pakete, die einen vielleicht verlocken mögen, man aber
zurückweisen muss. Die Lizenz/en, von gleich welchen Paketen man plant
benutzen zu wollen sollten <ins>zuvor</ins> eingehend überprüft
werden. Möchte man etwa <ins>Java-Swing-Ereignisse</ins> nutzen, sollte man
dafür sorge tragen die freie Variante zu benutzen, die mit IcedTea kommt.<br
/><br /><em>Hinweis: Die freie Umsetung der JavaFX-Rahmenstruktur ist unter
der Bezeichnung <strong>OpenJFX</strong> bekannt.</em></span></p>

<p><span class="intro">Abgesehen von diesen Java-Besonderheiten bleibt die hier
beschriebene allgemeine Frage bedeutsam, weil jede unfreie Bibliothek oder
Programmierplattform ein ähnliches Problem verursachen kann. Wir müssen aus
der Geschichte von Java eine Lehre ziehen, damit wir andere Fallen zukünftg
vermeiden können.</span></p>

<p><span class="intro">Bitte beachten in diesem Zusammenhang auch den Artikel
<cite><a href="/philosophy/javascript-trap">Die
JavaScript-Falle</a></cite>!</span></p>
</blockquote>
</div>

<p> </p>

<p>
  Wenn Ihr Programm Freie Software ist, ist das grundsätzlich
ethisch&#160;&#8209;&#160;aber es gibt eine Falle, bei der Sie auf der Hut
sein müssen. Ihr Programm, obwohl an sich frei, kann durch unfreie Software,
von der es abhängt, eingeschränkt werden. Da das Problem bei heutigen
Java-Programmen am auffälligsten ist, nennen wir es die Java-Falle.
</p>

<p>
  Ein Programm ist Freie Software, wenn deren Nutzer bestimmte entscheidende
Freiheiten haben. Diese sind grob gesagt: das Programm ausführen, den
Quellcode untersuchen und ändern, den Quellcode und Binärdateien erneut
distribuieren und verbesserte Versionen bereitstellen (siehe <cite><a
href="/philosophy/free-sw">Freie Software. Was ist das?</a></cite>). Ob ein
bestimmtes Programm in Quellcodeform <em>freie</em> Software ist, hängt
ausschließlich von der Bedeutung seiner Lizenz ab.
</p>

<p>
  Ob das Programm aber in der freien Welt genutzt werden kann, genutzt von
Menschen die beabsichtigen in Freiheit zu leben, ist schon eine komplexere
Frage. Dies hängt nicht allein von der Lizenz des Programms selbst ab, weil
kein Programm isoliert funktioniert. Jedes Programm hängt von anderen
Programmen ab. Ein Programm muss beispielsweise kompiliert oder
interpretiert werden und hängt damit von einem Compiler oder Interpreter
ab. Wenn in Bytecode kompiliert, hängt es von einem Bytecode-Interpreter
ab. Außerdem benötigt es zur Ausführung Bibliotheken und kann auch andere
separate Programme aufrufen, die in anderen Prozessen ausgeführt werden. All
diese Programme sind Abhängigkeiten. Abhängigkeiten sind möglicherweise
notwendig, damit das Programm überhaupt ausgeführt wird, oder sind
möglicherweise nur für bestimmte Funktionen notwendig. So oder so, ohne die
Abhängigkeiten kann das Programm ganz oder teilweise nicht ausgeführt
werden.
</p>

<p>
  Wenn einige der Abhängigkeiten eines Programms unfrei sind, bedeutet das,
dass das ganze oder ein Teil des Programms nicht auf einem völlig freien
System ausgeführt werden kann&#160;&#8209;&#160;es ist in der freien Welt
unbrauchbar. Sicher, wir könnten das Programm zwar weiterverbreiten und
Kopien auf unseren Rechnern haben, aber das nützt nicht viel, wenn es nicht
ausgeführt werden kann. Dieses Programm ist zwar Freie Software, aber
praktisch durch eigene unfreie Abhängigkeiten gefesselt.
</p>

<p>
  Dieses Problem kann in jeder Art von Software auftreten&#160;&#8209;&#160;in
jeder Programmiersprache. Beispielsweise ist ein freies Programm, das nur
unter Microsoft Windows läuft, in der freien Welt eindeutig
unbrauchbar. Aber Software, die unter GNU/Linux läuft, kann ebenfalls
unbrauchbar sein, wenn sie von anderer unfreier Software abhängig ist. In
der Vergangenheit waren Motif (bevor wir LessTif hatten) und Qt (bevor seine
Entwickler es zu Freie Software machten) Hauptursachen dieses Problems. Die
meisten 3D-Grafikkarten funktionieren nur vollständig mit unfreien Treibern,
die dieses Problem ebenfalls verursachen. Aber die Hauptquelle dieses
Problems ist heute Java, weil Menschen, die Freie Software schreiben, oft
meinen, Java sei sexy. Verblendet von der Anziehungskraft der Sprache,
übersehen sie das Problem der Abhängigkeiten und tappen in die Java-Falle.
</p>

<p>
  Suns Java-Umsetzung ist unfrei. Die Standard-Java-Bibliotheken
ebenfalls. Wir haben zwar freie Java-Umsetzungen, wie den <strong><a
href="http://gcc.gnu.org/java/" xml:lang="en" lang="en">GNU Compiler for
Java</a></strong> (GCJ) und <strong><a href="/software/classpath">GNU
Classpath</a></strong>, aber sie unterstützen noch nicht alle
Funktionen. Wir haben noch einiges an Aufholarbeit zu leisten.
</p>

<p>
  Wenn Sie ein Java-Programm auf Suns Java-Plattform entwickeln, laufen Sie
Gefahr nur noch <!--(proprietäre)-->Funktionen von Sun zu nutzen, ohne es zu
bemerken. Bis Sie das herausgefunden haben, können Sie diese schon
monatelang benutzt haben, und das Ganze umzuschreiben könnte weitere Monate
dauern. Sie könnten dann sagen, &#8222;Es ist zu viel Arbeit, um
anzufangen.&#8220; Dann wird Ihr Programm in die Java-Falle getappt
sein&#160;&#8209;&#160;unbrauchbar in der freien Welt.
</p>

<p>
  Der zuverlässigste Weg die Java-Falle zu vermeiden ist nur eine freie
Umsetzung von Java auf dem System zu haben. Dann, wenn Sie eine
Java-Funktion oder -Bibliothek benutzen, die Freie Software noch nicht
unterstützt, werden Sie das stehenden Fußes herausfinden und können diesen
Quellcode sofort umschreiben.
</p>

<p>
  Sun entwickelt weiterhin zusätzliche
&#8222;Standard&#8220;-Java-Bibliotheken, und fast alle sind unfrei. In
vielen Fällen ist sogar die Spezifikation einer Bibliothek ein
Geschäftsgeheimnis, und Suns neueste Lizenz für diese Spezifikationen
untersagt die Freigabe von nichts geringerem als einer vollständigen
Umsetzung der Spezifikation (siehe <a
href="https://jcp.org/aboutJava/communityprocess/JSPA2.pdf" title="Java
Community Process, Java Specification Participation Agreement, unter:
jcp.org 2005." type="application/pdf" xml:lang="en"
lang="en">https://jcp.org/aboutJava/communityprocess/JSPA2.pdf</a> und <a
href="https://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html"
title="Java Community Process, J2ME Personal Basis Profile Specification"
type="application/pdf" xml:lang="en"
lang="en">https://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html</a>).
</p>

<p>
  Glücklicherweise ermöglicht diese Lizenzspezifikation die Freigabe einer
Umsetzung als Freie Software; anderen, die die Bibliothek erhalten, kann
eingeräumt werden sie zu ändern und müssen sich nicht an die Spezifikation
halten. Aber diese Bedingung bewirkt die Verwendung eines
zusammenarbeitenden Entwicklungsmodells zu verbieten, um die freie Umsetzung
zu erzeugen. Die Verwendung dieses Modells würde die Veröffentlichung von
unvollständigen Versionen mit sich bringen, was jenen, die die
Spezifikationen gelesen haben, nicht eingeräumt wird.
</p>

<p>
  In den frühen Tagen der Freie-Software-Bewegung war es unmöglich zu
vermeiden, dass man von unfreien Programmen abhängig war. Bevor wir den GNU
C-Compiler hatten, hing jedes C-Programm (frei oder nicht) von einem
unfreien C-Compiler ab. Bevor wir die GNU C-Bibliothek hatten, hing jedes
Programm von einer unfreien C-Bibliothek ab. Bevor wir Linux hatten, den
ersten freien Betriebssystemkern, hing jedes Programm von einem unfreien
Systemkern ab. Bevor wir Bash hatten, musste jedes Shell-Skript von einer
unfreien Shell interpretiert werden. Es war unvermeidlich, dass unsere
ersten Programme zunächst durch diese Abhängigkeiten behindert würden. Aber
wir akzeptierten das, weil unser Plan beinhaltete diese nachträglich zu
befreien. Unser oberstes Ziel&#160;&#8209;&#160;ein im Wesentlichen alle zum
Betrieb notwendigen Komponenten umfassendes (Self-Hosting)
GNU-Betriebssystem&#160;&#8209;&#160;beinhaltete freien Ersatz für all jene
Abhängigkeiten; sofern wir das Ziel erreichten, würden all unsere Programme
befreit. So geschah es: mit dem GNU/Linux-System können wir nun diese
Programme auf freien Plattformen ausführen.
</p>

<p>
  Heute ist die Situation eine andere. Wir haben nun leistungsfähige freie
Betriebssysteme und viele freie Programmierwerkzeuge. Welche Aufgabe Sie
auch immer erledigen wollen, Sie können es auf einer freien Plattform tun;
es gibt keinen Grund, eine unfreie Abhängigkeit auch nur zeitweilig zu
akzeptieren. Der Hauptgrund warum Menschen in die Falle tappen besteht heute
darin, weil sie dabei nicht darüber nachdenken. Die einfachste Lösung des
Problems ist den Menschen beizubringen dies zu erkennen und nicht
hineinzufallen.
</p>

<p>
  Um Ihren Java-Quellcode vor der Java-Falle zu schützen, installieren Sie
eine freie Java-Entwicklungsumgebung und benutzen Sie sie. Welche Sprache
auch immer Sie benutzen, halten Sie generell die Augen offen und prüfen Sie
den freien Status der Programme, von denen Ihr Quellode abhängt. Am
einfachsten, um zu überprüfen ob ein Programm frei ist, ist danach im <a
href="http://directory.fsf.org/">Freie-Software-Verzeichnis
&lt;directory.fsf.org&gt;</a> zu gucken. Sollte ein Programm nicht
aufgeführt sein, können die Lizenz(en) anhand <a
href="/licenses/license-list"><em>Verschiedene Lizenzen und Kommentare</em>
&lt;gnu.org/licenses/license-list.html&gt;</a> überprüft werden.
</p>

<p>
  Wir versuchen die in die Falle getappten Java-Programme zu befreien. Wenn
Sie also die Sprache Java mögen, laden wir Sie ein bei der Entwicklung von
GNU Classpath zu helfen. Auch hilfreich ist Programme mit GCJ und GNU
Classpath auszuprobieren und etwaige Probleme, die in bereits
implementierten Klassen auftreten, zu berichten. Allerdings wird GNU
Classpath’ letzter Schliff Zeit beanspruchen. Werden weiterhin mehr unfreie
Bibliotheken geschrieben, werden wir möglicherweise niemals alle aktuellen
haben. Legen Sie also Ihrer freien Software keine Fesseln an. Wenn Sie heute
ein Anwendungsprogramm schreiben, schreiben Sie es, damit es von Anfang an
in freien Umgebungen ausgeführt werden kann.
</p>

<h3>Siehe auch:</h3>
<p>Richard Stallman, <cite><a href="/philosophy/sun-in-night-time">Supergute
Tage oder Die sonderbare Welt von Sun</a></cite> 2006.</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.de.html" -->
<div id="footer">
<div class="unprintable">

<p>Bitte senden Sie allgemeine Fragen zur FSF &amp; GNU an <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Sie können auch die <a
href="/contact/"><span xml:lang="en" lang="en">Free Software
Foundation</span> kontaktieren</a>. Ungültige Verweise und andere
Korrekturen oder Vorschläge können an <a
href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a> gesendet
werden.</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>. -->
Bei der Übersetzung dieses Werkes wurde mit größter Sorgfalt
vorgegangen. Trotzdem können Fehler nicht völlig ausgeschlossen
werden. Sollten Sie Fehler bemerken oder Vorschläge, Kommentare oder Fragen
zu diesem Dokument haben, wenden Sie sich bitte an unser Übersetzungsteam <a
href="mailto:web-translators@gnu.org?cc=www-de-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.</p>
<p>Weitere Informationen über die Koordinierung und Einsendung von
Übersetzungen unserer Internetpräsenz finden Sie in der <a
href="/server/standards/README.translations">LIESMICH für Übersetzungen</a>.</p>
</div>

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

<p>Dieses Werk ist lizenziert unter einer <a rel="license"
href="//creativecommons.org/licenses/by-nd/4.0/deed.de">Creative Commons
Namensnennung-Keine Bearbeitung 4.0 International</a>-Lizenz.</p>

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

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
<strong>Übersetzung:</strong> Andreas K. Förster, 2006. Jоегg Kоhпе <a
href="https://savannah.gnu.org/projects/www-de">&lt;www-de&gt;</a>, 2013,
2015.</div>

<p class="unprintable"><!-- timestamp start -->
Letzte Änderung:

$Date: 2016/12/03 23:45:10 $

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