Was bedeutet Write Once Run Anywhere?
Schon seit Jahren gibt es Bestrebungen, diese Vielfalt konstruktiv zu vereinfachen und zu systematisieren. Write Once Run Anywhere bezeichnet einen Anspruch, der heute in ersten Fällen wirklich einlösbar geworden ist.
Virtualisierung als Grundlage von Write Once Run Anywhere
Hier betrachten wir hauptsächlich eine Virtualisierung eines Prozessors und eines Betriebssystems. Traditionell werden die in einer bestimmten höheren Programmiersprache geschriebenen Anweisungen interpretiert oder kompiliert in Befehle, die der Prozessor ausführen kann. Dasselbe gilt für das Betriebssystem, das System Calls bereitstellt, die von einem Anwenderprogramm aufgerufen werden können.
Virtualisierung bedeutet das Einziehen einer weiteren Schicht zwischen dem Anwenderprogramm und der Ausführung. Eine virtuelle Maschine bietet eine Menge von Befehlen und System Calls genau wie ein Prozessor mit einem Betriebssystem. Ein Anwenderprogramm wird in diesen Befehlssatz übersetzt und der virtuellen Maschine zur Ausführung übergeben. Jeder Befehl der virtuellen Maschine muss dann nochmals in Befehle des realen Prozessors übertragen werden.
Was bedeutet dann Write Once Run Anywhere hier? All dieser Aufwand muss schließlich einen Vorteil besitzen. Dieser liegt darin, dass nur die Übersetzung der Sprache der virtuellen Maschine in diejenige des Prozessors auf diesen Prozessor angepasst werden muss.
Die Virtualisierung der Programmiersprache Java
Hier ist es möglich, eine konkretere Antwort auf die Frage „Was bedeutet Write Once Run Anywhere?“ zu geben. Für Java wird auf den verschiedensten Plattformen eine JRE oder Java Laufzeitumgebung bereitgestellt. Diese entspricht einer virtuellen Maschine mit eigenen Funktionen, Befehlen und System Calls. Sie entspricht also in etwa einem eigenen Betriebssystem.
In Java entwickelte Software können Sie also auf allen diesen Plattformen laufen lassen, obwohl die Entwicklung nur einmal in der Sprache Java durchgeführt werden muss. Die technische Trennung bringt es auch mit sich, dass bei einem Absturz des Programms nur die JRE betroffen ist. Sie müssen also in einem solchen Fall nicht damit rechnen, dass der ganze Computer neu gestartet werden muss.
Probleme und Nachteile des „Write Once Run Anywhere“
– Die virtuelle Maschine nimmt eine bestimmte Rechenleistung in Anspruch. Diese steht dann für die Anwendungen nicht mehr zur Verfügung, was eine langsamere Ausführung zur Folge hat.
– Die Isolierung der realen Maschine durch die virtuelle ist aus den oben genannten Gründen gewollt, bringt aber auch nicht vermeidbare negative Konsequenzen mit sich. Die Speicherverwaltung ist nicht unter Ihrer direkten Kontrolle und das kann die Verarbeitungsgeschwindigkeit merklich beeinflussen. Deshalb wird die Verwendung von Java für Echtzeitsysteme mit zeitkritischen Anwendungen nicht empfohlen.
– Ihnen als Anwendungsentwickler stehen nur die von der JRE unterstützten Funktionen zur Verfügung. Der Prozessor Ihres Geräts mag noch weitere Befehle ausführen können, aber auf diese lässt sich durch die virtuelle Maschine nicht zugreifen. Das würde schließlich den Anspruch universeller Ausführbarkeit verletzen, da die entsprechenden Befehle eben nicht auf allen Prozessoren ausführbar sind.
Möglichkeiten der Umsetzung von Write Once Run Anywhere
Im Fall der JRE für Java wird der Anspruch der universellen Ausführbarkeit nur eingeschränkt erfüllt. Es können sich subtile Unterschiede zwischen der Ausführung eines für die JRE kompilierten Programms auf verschiedenen Plattformen ergeben. Auch die Gerätetreiber sind hinreichend unterschiedlich und auf die jeweiligen realen Geräte anzupassen, sodass die Ausführbarkeit nur eingeschränkt gegeben sein kann.
Schließlich sollten Sie auch bedenken, dass die Compiler und die Teile der JRE genauso wenig wie andere Software als fehlerfrei angesehen werden können. Durch verschiedene Fehler der JRE für unterschiedliche Plattformen ergibt sich ebenfalls unterschiedliches Laufzeitverhalten auf den entsprechenden Geräten.
Manche Programmierer haben deshalb die Erfahrung gemacht, dass die Antwort auf die Frage „Was bedeutet Write Once Run Anywhere?“ auch „Write once, debug everywhere“ lauten kann. Das Javaprogramm muss dann also auf den verschiedenen Plattformen zumindest getestet und gut möglicherweise auch korrigiert werden.
Es sollte auch bemerkt werden, dass dieselbe Software für verschiedene Plattformen auch einfach nicht wünschenswert sein kann, weil sie in einem solchen Fall keine Rücksicht auf unterschiedliche Erwartungen der Nutzer nehmen kann. So sind schon einfache Konventionen der grafischen Benutzeroberfläche verschieden wie etwa die Position der Buttons für das Speichern und Verwerfen von Änderungen an einer Datei. Wird ein solcher Unterschied nicht beachtet, kann das zu eingeschränkter Benutzerfreundlichkeit oder sogar zu Fehlern in der Benutzung führen.
Neue Antworten auf die Frage „Was bedeutet Write Once Run Anywhere?“
Ein neuer Zugang zu diesem Themenkreis ist der Dialekt Squeak der Programmiersprache Smalltalk. In diesem System wurde die universelle Ausführbarkeit im Wesentlichen komplett realisiert. Die strukturellen Einschränkungen dieses Zugangs kann aber auch Squeak logischerweise nicht vermeiden.
- Über den Autor
- Aktuelle Beiträge
Daniel Faust ist Redakteur im Content-Team der Biteno und betreut den Blog der Biteno GmbH.