English [en]   български [bg]   Deutsch [de]   ελληνικά [el]   español [es]   français [fr]   italiano [it]   Nederlands [nl]   polski [pl]   română [ro]   русский [ru]   српски [sr]  

Knock: Eine Abrissbirne für HACIENDA

GNU-Hacker eröffneten das GHM mit Offenlegung des offensiven HACIENDA als globales Überwachungsprogramm zur vollständigen Kolonisierung des Netzes, und wie man es mit TCP Stealth ausknockt! Jetzt angucken! [mehr]

Dieses Werk ist eine Übersetzung aus dem Englischen.

Frei, aber gefesselt: Die Java-Falle

von Richard Stallman

Seit dieser Artikel erstmals veröffentlicht wurde, hat Sun den größten Teil seiner Umsetzung der Java-Plattform-Referenz unter der GNU General Public License (GPL) relizenziert und es gibt nun eine freie Entwicklungsumgebung für Java. Somit ist die Programmiersprache Java als solche keine Falle mehr.

Sie müssen jedoch achtsam sein, denn nicht jede Java-Plattform ist frei. Sun vertreibt weiterhin eine ausführbare Java-Plattform, die nicht frei ist, und andere Unternehmen tun dies auch.

Die freie Umgebung für Java wird IcedTea genannt; der von Sun freigegebene Quellcode ist darin enthalten. Somit sollten Sie diese nutzen. Viele GNU/Linux-Distributionen enthalten IcedTea, einige enthalten aber unfreie Java-Plattformen.

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.

Darüber hinaus gibt es unfreie Programme mit dem Wort Java im Namen, wie JavaFX, und unfreie Java-Pakete, die Sie vielleicht verlockend finden, aber zurückweisen müssen. Überprüfen Sie die Lizenzen beliebiger Pakete, die Sie nutzen möchten. Wenn Sie Swing nutzen möchten, überzeugen Sie sich die freie Version zu nutzen, die mit IcedTea kommt.

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 eine Lehre aus der Geschichte von Java ziehen, damit wir andere Fallen in der Zukunft vermeiden können.

Bitte beachten Sie auch: Die JavaScript-Falle.

2004-04-12

Wenn Ihr Programm Freie Software ist, ist das grundsätzlich ethisch ‑ 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 heute bei Java-Programmen am auffälligsten ist, nennen wir es die Java-Falle.

Ein Programm ist Freie Software, wenn deren Nutzer bestimmte entscheidende Freiheiten haben. Diese sind grob gesagt: die Freiheit, das Programm auszuführen, die Freiheit, den Quellcode zu untersuchen und zu ändern, die Freiheit, den Quellcode und Binärdateien weiterzuverbreiten und die Freiheit, verbesserte Versionen zu veröffentlichen (siehe Freie-Software-Definition). Ob ein bestimmte Programm in Quellcodeform freie Software ist, hängt ausschließlich von der Bedeutung seiner Lizenz ab.

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.

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 ‑ 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.

Dieses Problem kann in jeder Art von Software auftreten ‑ 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.

Suns Umsetzung von Java ist unfrei. Die Standard-Java-Bibliotheken ebenfalls. Wir haben zwar freie Umsetzungen von Java, wie den GNU Compiler für Java (GCJ) und GNU Classpath, aber sie unterstützen noch nicht alle Funktionen. Wir haben noch einiges an Aufholarbeit zu leisten.

Wenn Sie ein Java-Programm auf Suns Java-Plattform entwickeln, laufen Sie Gefahr nur noch 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, „Es ist zu viel Arbeit, um anzufangen.“ Dann wird Ihr Programm in die Java-Falle getappt sein ‑ in der freien Welt unbrauchbar.

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.

Sun entwickelt weiterhin zusätzliche „Standard“-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 jcp.org/aboutJava/communityprocess/JSPA2.pdf und jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html).

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.

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 ‑ ein im Wesentlichen alle zum Betrieb notwendigen Komponenten umfassendes (Self-Hosting) GNU-Betriebssystem ‑ 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.

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.

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 Freie-Software-Verzeichnis <directory.fsf.org> zu gucken. Sollte ein Programm nicht aufgeführt sein, können die Lizenz(en) anhand Verschiedene Lizenzen und Kommentare <gnu.org/licenses/license-list.html> überprüft werden.

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 dem GCJ Compiler 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.

Siehe auch:

Supergute Tage oder Die sonderbare Welt von Sun

FSF„Unsere Mission ist die Freiheit zu bewahren, zu schützen und zu fördern, um Rechnersoftware nutzen, untersuchen, kopieren, modifizieren und weiterverbreiten zu können und die Rechte von Freie-Software-Nutzern zu verteidigen.“

Die Free Software Foundation ist der organisatorische Hauptsponsor des GNU-Betriebssystems. Unterstützen Sie GNU und die FSF durch den Kauf von Handbüchern und Kleidung, als assoziiertes Mitglied oder mit einer Spende direkt an die FSF oder via Flattr.

Zum Seitenanfang