Java Virtual Machine unter Linux

30.10.2001 von Alexander Scheb
Linux hat sich mittlerweile auch als Entwicklungsplattform für Software etabliert. Die Programmiersprache Java führte bisher jedoch unter Linux ein Schattendasein. Nun stehen auch für Java mehrere Development Kits zur Verfügung.

Die seit 1991 von Sun entwickelte plattformunabhängige Programmiersprache Java hat sich mittlerweile bei zahlreichen Entwicklern etabliert. Eine in Java geschriebene Anwendung ist auf allen Plattformen mit entsprechender Unterstützung lauffähig.

Jedoch ist für viele Entwickler und Anwender die geringe Geschwindigkeit der Java Virtual Machine (VM) ein großer Nachteil der Programmiersprache. Der Quellcode muss für das jeweilige System interpretiert werden. Dies ermöglicht es aber erst, dass die Programme auf verschiedenen Plattformen ausführbar sind.

Im Gegensatz zu anderen Programmiersprachen, wie beispielsweise C++, spielt jedoch unter Java die Geschwindigkeit eine untergeordnete Rolle. Java wurde für das Internet konzipiert - die Netzwerkanbindung bestimmt die Geschwindigkeit. Mit dem steigenden Boom des Internet wird auch Java immer beliebter. Bereits heute sind zahlreiche Software-Architekturen netzwerkbasiert.

Daneben gilt Linux als die ideale Entwicklungsplattform für Software. Das Betriebssystem liefert bereits eine Reihe kostenloser Werkzeuge für die Programmierung. Zudem werden Internet-Technologien konsequent unterstützt.

Wir beschreiben die Installation von drei aktuellen Java Entwicklungsumgebungen unter Linux: Software Development Kit von Sun, IBM Developer Kit und das Projekt Kaffe einer freien Entwicklergemeinde. Als Basis für die Beispiele verwenden wir eine Distribution von Red Hat.

Die Entwicklung von Java

Fehlerhafte Implementierungen der Virtual Machine in Internet-Browsern war bisher das Hauptproblem von Java. Microsoft hatte sich zwar laut Lizenzvereinbarung dazu verpflichtet, Java auf allen Windows-Versionen bereitzustellen. Es wurde jedoch dem Software-Konzern überlassen, auch eine entsprechende Unterstützung für Browser anzubieten.

Seitens Microsoft folgte daher nur eine mäßige Umsetzung. Die Implementierungen waren veraltet und entsprachen nicht dem aktuellen Java-Standard. Sun versuchte mit mehreren Ansätzen diese Probleme zu lösen.

Zunächst stellte Sun ein Java2-Plugin für Netscapes Navigator und Microsofts Internet Explorer zur Verfügung. Wurde zum ersten Mal eine Webseite mit integriertem Java-Applet aufgerufen, erhielt der Anwender eine Meldung, dass er zu dessen Ausführung das entsprechende Plug-in herunterladen muss. Viele

Anwender waren jedoch nicht bereit, die langen Download-Zeiten in Kauf zu nehmen.

Daraufhin führte Sun das Open Java Interface ein. Man wollte damit eine Browser-unabhängige Implementierung der Virtual Machine erreichen. Ein Update auf die neueste Java-Version sollte damit allen Browsern innerhalb eines Systems zur Verfügung stehen.

AOL und Netscape gaben die Unterstützung von Java2 und des Open Java Interface für ihre Produkte bekannt. Auch hatte Sun ein großes Interesse daran, die Java2 Virtual Machine über die AOL-CDs unters Volk zu bringen. Daneben war und ist Sun diesbezüglich auch an Kooperationen mit Linux-Distributoren interessiert.

Microsoft bietet bis dato keine Java2-Unterstützung und setzt mit C# auf eine eigene universelle Programmiersprache im Rahmen der .Net-Strategie.

Java und Linux

Die meisten Linux-Distributionen werden mit veralteten Versionen der Java2 Development Kits ausgeliefert. Die Anwender sind gezwungen, diese auf den neuesten Stand zu bringen. Erst dann lassen sich viele Java-Applikationen problemlos ausführen.

Verschiedene Firmen bieten heute Development Kits für Java an. Primär ringen Sun, IBM und Kaffe um die Gunst der Programmierer.

Suns Software Development Kit unterstützte bis vor kurzem Linux nicht offiziell. Nach dem großen Erfolg des Open Source Betriebssystems hat man im Unternehmen wohl umgedacht und sich mit der freien Entwicklergemeinde Blackdown zusammengeschlossen. Das Ergebnis ist das vor kurzem fertig gestellte Java Software Development Kit für Linux.

Linux-Kernel und Java-Support

Linux unterstützt die Programmiersprache Java bereits auf Kernel-Ebene. Dabei unterscheidet sich Java hier von anderen Interpreter-Sprachen, da der Code erst im Kernel kompiliert wird.

Der Compiler kompiliert keinen nativen Code für einen speziellen Prozessor. Vielmehr wird ein Zwischencode erzeugt, der als Bytecode bezeichnet wird. Der Java-Bytecode ist sozusagen nativ für die Virtual Machine. Die Ausführung sieht letztendlich auf jedem Betriebssystem etwas anders aus.

Aus diesem Grund sind Java-Programme in der Regel immer langsamer als Programme, die in einer herkömmlichen Programmiersprache geschrieben wurden. Jedoch ist Java nicht direkt im Linux-Kernel integriert. Dieser lässt sich nur so einrichten, dass Java-Programme wie reguläre Linux-Programme ausgeführt werden.

Zur Integration in das Betriebssystem wird ein Interpreter-Programm gestartet, welches als Parameter einen Java-Programmnamen verwendet. Somit kommen Java-Programme automatisiert zur Ausführung.

Software Delevopment Kit von Sun

Das aktuelle Software Development Kit (SDK) 1.3 von Sun kommt mit einigen Verbesserungen. Auf Grund der neuen Virtual Machine "Hot Spot" sollen Anwendungen bis zu 40 Prozent schneller starten und 25 Prozent weniger Speicher benötigen. Für eine verbesserte Sicherheit sorgen Zertifikate und digitale Signaturen.

Neu ist auch das so genannte Applet Caching. Dabei werden Applets in einem Cache abgelegt, so dass sie bei einem erneuten Start schneller zur Verfügung stehen.

Der Industriestandard Corba wird nun konsequent unterstützt. Das Development Kit verfügt über die Standard-APIs. Die standardisierten Klassenbibliotheken unterstützen folgende Techniken: Java2-Sicherheitsmodell, Collections Framework, Java Beans sowie JDBC.

Sun stellt im Kit verschiedene Werkzeuge für die Entwicklung von Java-Programmen zur Verfügung: So gehören unter anderem ein Compiler (Javac), ein Archiv-Manager (Jar), ein Debugger sowie ein Applet-Viewer zum Umfang.

Für die eigentliche Eingabe des Quelltextes stellt die Entwicklungsumgebung allerdings keine Tools zur Verfügung. Hier muss man auf die zahlreichen Editoren unter Linux zurückgreifen.

Quickinfo

Produkt

Java Development Kit

Anbieter

Sun Microsystems

Download

http://java.sun.com/j2se/1.3/download-linux.html (24 MByte)

Programmpakete

Compiler, Appletviewer, API Documentation Generator, Archive Manager, Debugger

Verzeichnisstruktur

Um einen schnellen Zugriff auf alle Funktionen des Software Development Kits zu haben, sollte man dessen Verzeichnisstruktur kennen,.

Die Tools und Utilities für die Entwicklung finden Sie im Verzeichnis /bin. Sie sind zur Ausführung, Dokumentation und beim Debuggen von Java-Programmen hilfreich.

Die Java2-Laufzeitumgebung ist im Verzeichnis /jre zu finden. Diese besteht aus der Virtual Machine und weiteren Dateien, die zur Ausführung von Programmen erforderlich sind. Die Klassenbibliotheken sind im Verzeichnis /lib zusammengefasst.

Im Verzeichnis /demo finden Sie zahlreiche Beispiele für Java-Applets und Applikationen. Besonders für Java-Neulinge bieten die Beispiele einen guten Einstieg.

Die Header-Dateien sind im Verzeichnis /include hinterlegt. Diese unterstützen die native Programmierung mittels der Java-Native-Schnittstelle. Damit soll sicher gestellt sein, dass der Code auf allen Plattformen ausführbar ist.

Innerhalb der src.jar-Archivdatei sind die Quelldateien der Java2-Klassenbibliothek zusammengefasst. So können Entwickler tiefer in die Sprache einsteigen.

Installation

Die Standard-Edition des Software Development Kit ist als ausführbares RPM-Paket verfügbar. Die Installation startet man mit dem Befehl

j2sdk-1_3_0_02-linux-rpm.bin

Nach Akzeptieren der Lizenzbestimmungen wird die Installation fortgesetzt. Das Installationsskript legt nun das eigentliche RPM-Paket an. Dieses lässt sich mit dem Befehl

rpm -ivh j2sdk-1_3_0_02-linux-rpm

installieren. Dazu ist es erforderlich als root angemeldet zu sein.

In einigen Fällen wird bei der Installation eine Fehlermeldung angezeigt, dass die glibc-2.12-Bibliothek benötigt wird. Dies passiert, wenn glibc nicht als RPM-Paket installiert wurde und somit nicht in der RPM-Datenbank aufgeführt ist.

Um in diesem Fall die Installation fortzusetzen, muss man diese ohne eine Abhängigkeitsprüfung starten. Dazu übergibt man beim Aufrufen der Installation den Parameter -nodeps. Sollte die glibc-Bibliothek generell auf dem System fehlen, ist diese zuvor zu installieren.

Die Installation und die Version des Development Kits überprüft man mit dem Befehl

java -version

Die Virtual Machine wird gestartet und Version 1.3 sollte erscheinen.

Java-Plugin

Mit der Standard-Editon des Software Development Kits von Sun wird auch ein Browser-Plug-in mitgeliefert. Dieses wurde weiter entwickelt und enthält zahlreiche Bugfixes.

Bei der Installation des Plug-ins sollte man darauf achten, dass sich keine älteren Versionen auf der Festplatte befinden. Zum Entfernen dieser sind folgende Befehle auszuführen:

rm -fr $home/.netscape/java

rm $home/.netscape/plugins/javaplugins.so

Zudem ist in der Konfigurationsdatei /etc/profile die Umgebungsvariable NPX_PLUGIN_PATH zu setzen. Dazu fügt man in der Datei folgende Zeile hinzu:

export NPX_PLUGIN_PATH=<jre>/plugin/i386/ns

Der gesamte Installationsprozess lässt sich aber auch automatisieren. Beim Aufruf einer Webseite, welche Java-Applets verwendet, wird in der Regel die Installation des Plug-ins automatisch ausgeführt, sofern dieses noch nicht installiert wurde.

Anwender von Netscape 6 und Mozilla brauchen das Plug-in nicht mehr zu installieren. Diese Browser verfügen bereits über die neueste Version.

Java Developer Kit von IBM

Auch Big Blue IBM hat seine Produktpalette um ein Java Developer Kit für Linux erweitert, das auf dem SDK von Sun aufbaut.

IBM hat jedoch einen schnellen Just-in-Time-Compiler integriert und eine eigene Virtual Machine entwickelt. Die Basisklassen wurden dabei von Sun übernommen und um eigene Java-Klassen ergänzt, welche Entwicklern die Arbeit vereinfachen sollen.

Sun hat IBMs Developer Kit nach einem Kompatibilitätstest offiziell anerkannt und seine Stabilität bestätigt.

Quickinfo

Produkt

Java Developer Kit for Linux

Anbieter

IBM

Download

http://www6.software.ibm.com/dl/dklx130/dklx130-p (45 MByte)

Programmpakete

Developer Kit, Runtime Environment, Java Authentication, Java Communication

Installation

Mit dem Befehl

rpm -ivh IBMJava2-SDK-1.3-1.0.i386.rpm

startet man als Benutzer root die Installation des Developer Kit. Mit dem Parameter -prefix lässt sich das Installationsverzeichnis angeben. Soll keine Abhängigkeitsprüfung erfolgen, ist der Parameter -nodeps zu übergeben.

Damit das Programm beim Aufruf zur Verfügung steht, ist die Datei /etc/profile anzupassen. Dazu fügt man folgende Zeile ein:

export PATH=$PATH:/opt/IBMJava2-13/bin

Ob das Developer Kit korrekt installiert wurde, überprüft man mit dem Befehl

java -version

Als nächstes ist die Java Runtime Environment (JRE) zu installieren. Mit dem Befehl

rpm -ivh IBMJava2-JRE-1.3-1.0.i386.rpm

wird die Installation gestartet. Bei der Einrichtung benutzt man den bereits gesetzten Pfad. Hierzu setzt man einen Verweis auf das Installationsverzeichnis /opt/IBMJava2-13/bin. Dies erledigt der Befehl

ln -sf /opt/IBMJava2-13/jre/bin/java /opt/IBMJava2-13/jre/bin/jre

Die virtuelle Maschine "Kaffe"

Die dritte Entwicklungsumgebung ist die Implementierung einer freien Programmiergemeinde: Kaffe.

Die Kaffe wird ständig weiter entwickelt und ist kompatibel zum aktuellen Java-Standard. Das Projekt unterliegt der General Public License (GPL).

Die Entwicklungsumgebung besitzt eine eigene Standard-Klassenbibliothek und unterstützt Java Beans. Zahlreiche Projekte verwenden bereits Kaffe als Laufzeitsystem.

Kaffe ist eine eigenständige Entwicklung und baut nicht auf Suns Quellcode auf. Die Vorgaben zur Virtual Machine und der Sprachspezifikation werden jedoch eingehalten. Dies ist insofern wichtig, damit Java-Anwendungen ohne große Änderungen funktionieren.

Quickinfo

Produkt

Kaffe

Anbieter

Transvirtual

Download

http://www.kaffe.org (3,4 MByte)

Programmpakete

Interpreter, Just-in-Time-Compiler, Ahead-of-Time-Compiler

Architektur

Die Entwicklungsumgebung Kaffe besteht aus drei Hauptkomponenten: der modularen Virtual Machine, einer Java1.1-kompatiblen Bibliothek und verschiedenen Bibliotheken für diverse Plattformen.

Das Entwicklungsziel bei der Virtual Machine war eine hohe Portabilität und Skalierbarkeit. Sie besteht aus verschiedenen Untersystemen. Von diesen werden das Threading, Memory Management, Native Method Interfacing und die Native Systems Calls erledigt.

Eine ausführliche Beschreibung der Architektur von Kaffe finden Sie hier.

Mittlerweile unterstützt Kaffe die komplette JDK1.2-API. Fast alle Applikationen sollten damit ohne Probleme lauffähig sein. Während Kaffe für verschiedene Komponenten einen besseren Lösungsansatz bereit hält, sind andere funktionale Komponenten derzeit noch nicht implementiert.

So verfügt die Entwicklungsumgebung beispielsweise über kein Sicherheitskonzept. Ebenfalls fehlt Remote Method Invocation (RMI) und der Just-in-Time-Compiler führt keine Optimierung des Codes durch.

Installation

Die Entwicklungsumgebung Kaffe baut auf automake, libtool, autocinf und dem gcc-Standard-Compiler auf. Diese Tools müssen vorhanden sein, um eine reibungslose Installation von Kaffe zu gewährleisten.

Einige Linux-Distributionen wie beispielsweise Red Hat liefern Kaffe bereits mit. Ob das Paket auf dem System in der aktuellen Version installiert ist, überprüft man mit dem Befehl

rpm -q Kaffe

Bei einer vorhandenen Installation müsste nun "Kaffe-1.0.2" erscheinen.

Um das Paket unter einem Gnome-Desktop zu installieren, kann man das GnoRPM-Tool oder das Terminal benutzen. Mit dem Kommando

rpm -ivh kaffe.rpm

startet man die Installation.

Nach der Installation stehen die Programme Javac zur Kompilierung von Anwendungen und Java zur Ausführung von Programmen zur Verfügung. Dabei führt Java eine kompilierte Klasse aus und startet so die Anwendung.

Java-Support unter Linux aktivieren

Unabhängig von der gewählten Entwicklungsumgebung muss man innerhalb des Kernels die Unterstützung für das Java-Binärformat (BINFMT_JAVA) aktivieren. Die Funktion ist nicht direkt im Kernel fest integriert, sondern wird dynamisch als Modul geladen.

Die Unterstützung für Java lässt sich als root-Benutzer mit dem Befehl

modprobe binfmt_java

aktivieren.

Damit der Java-Interpreter oder der Appletviewer sofort gefunden werden, empfiehlt es sich, einen Verweis innerhalb des Verzeichnisses /usr/bin anzulegen.

Folgende Befehle erledigen dies:

ln -s /usr/jdk13/bin/java /usr/bin/java
ln -s /usr/jdk13/bin/appletviewer /usr/bin/appletviewer

Das System führt Java-Applikationen nun automatisch aus. Ein manuelles Starten ist nicht mehr erforderlich. Jede Java-Anwendung besteht allerdings aus einer Vielzahl von Klassendateien. Nur eine einzige Klasse ist zur Ausführung des Gesamtprogramms verantwortlich. Diese muss man als ausführbar markieren. Dies geschieht über den Befehl

chmod +e [programmname]

Fazit

Die hier vorgestellten Development Kits stellen Java-Programmierern unter Linux komplette Entwicklungsumgebungen zur Verfügung. Somit steht der Programmierung von Java-Applikationen unter Linux nichts mehr im Wege.

Die Frage nach der besten Entwicklungsumgebung lässt sich nicht pauschal beantworten. Jedes der besprochenen Programme hat seine individuellen Vor- und Nachteile.

Suns Development Kit setzt allerdings den Standard in Sachen Java. Die beiden anderen Entwicklungsumgebungen weichen in Details von diesem ab. Aus diesem Grund sollte man der Software von Sun den Vorzug geben. So beugt man proprietären Lösungswegen vor.

Einsteigern in Sachen Java sind zudem die Tutorials auf den Seiten von Sun und IBM zu empfehlen. Dort findet man eine Vielzahl ausführlicher Einführungen in die plattformübergreifende Programmiersprache. (kpf)

tecCHANNEL Buch-Shop

Literatur zum Thema Linux

Bestell-Link

Titel von Pearson Education

Bestellung

PDF-Titel (50% billiger als Buch)

Downloads