Plattformunabhängige Softwareentwicklung
    ArticleCategory: [Choose a category, translators: do not
    translate this, see list below for available categories]
    Software Development
    AuthorImage:[Here we need a little image from you]
    ![[Photo of the Author]](../../common/images2/MichaelTschater.jpg) 
 
    TranslationInfo:[Author + translation history. mailto: or
    http://homepage]
    original in de Michael
    Tschater
    AboutTheAuthor:[A small biography about the author]
    Michael beschäftigt sich hauptsächlich mit hardwarenaher
    Software-Entwicklung (Firmware). Bei seinem aktuellen Projekt
    muss zusätzlich eine Strategieentscheidung über eine
    Entwicklungsumgebung getroffen werden, mit der zukünftig ein
    Front-End zum Ansteuern seiner Firmware programmiert werden
    soll.
    
    Abstract:[Here you write a little summary]
    Nahezu alle Geräte in der Industrie lassen sich heutzutage über
    ein Netzwerk steuern. Die Bedienoberfläche läuft dabei auf
    Standard-Hardware und arbeitet als reiner Client, der
    zeitunkritisch Daten sendet (z.B. Initialisierungsparameter)
    und empfängt (z.B. Meßergebnisse). Im folgenden Schaubild ist
    die hier angesprochene Kommunikation grün gekennzeichnet.
    
     ![[gui frontend]](../../common/images2/article350/frontend_de.jpg) 
 
    Bei Softwareprojekten stellt sich vielfach die Frage, welche
    Betriebssysteme unterstützt werden sollen. Während der Leser
    dieses Artikels wohl in Richtung Linux tendieren dürfte, werden
    aber auch andere Betriebssysteme (hauptsächlich Windows)
    gefordert. Prinzipiell spielt das verwendete Betriebssystem für
    den genannten Anwendungsfall keine große Rolle, es muß
    lediglich gewährleistet sein, daß der Benutzer intuitiv in
    gewohnter Weise zu den gewünschten Ergebnissen kommt.
    
    Der folgende Artikel soll aufzeigen, dass es keine Entscheidung
    für eine einzelne Plattform geben muss, sondern dass es ohne
    weiteres möglich ist Software zu schreiben, die sich auf
    mehreren Betriebssystemen übersetzen läßt. Als Zielplattform
    beschränkt sich der Artikel auf Standard PCs mit Linux und
    Windows. Es sollte auch möglich sein die erstellten Anwendungen
    auf einem Mac unter MacOSX zu übersetzen, dies kann aber aus
    Mangel an Hardware nicht untersucht werden.
    ArticleIllustration:[One image that will end up at the top
    of the article]
    ![[Illustration]](../../common/images2/article350/osindep.gif) 
 
    ArticleBody:[The main part of the article]
    Einleitung
    Bei betriebssystemunabhängigen Bibliotheken unterscheidet man
    zwei Ansätze zum Darstellen von Steuerelementen in
    Dialogen:
    
      - Native Bibliotheken: Für die Darstellung von Elementen
      werden die entsprechenden Routinen des Betriebssystems
      genutzt. Dadurch ist gewährleistet, dass alle Steuerelemente
      aussehen wie in den Standard-Applikation dieses
      Betriebssystems. Eine native Bibliothek stellt Steuerelemente
      unter Linux anders dar als unter Windows 2000 oder Windows
      XP.
 
- Die zweite Möglichkeit ist ein entsprechendes
      Look&Feel selbst zu programmieren, d.h. sämtliche
      Steuerelemente werden von der Bibliothek gezeichnet und sehen
      unter allen Betriebssystemen gleich aus.
 
Neben den technischen Merkmalen der Bibliotheken spielen in der
    Praxis noch weitere Faktoren eine Rolle, die ebenfalls
    verglichen werden sollen:
    
      - Entwicklungsungebung: Eine integrierte
      Entwicklungsumgebung (z.B. mit GUI Builder, Makefile
      Generator) vereinfacht die Softwareentwicklung.
- Dokumentation und Support: Bei auftretenden Problemen ist
      schnelle Hilfe nötig.
- Kosten: Während die meisten Bibliotheken für private
      Anwendungen frei verfügbar sind, fallen beim gewerblichen
      Einsatz teilweise Kosten an. Bei Grundsatzentscheidungen zu
      Softwareprojekten gilt es solche Kosten vor den
      Entscheidungsträgern zu rechtfertigen.
- Tatsächlicher Aufwand beim Portieren zwischen den
      Systemen.
Im konkreten Fall wird auf einen weiteren Punkt Wert gelegt,
    der jedoch nicht für alle Projekte zutreffen wird:
    
      - Die erzeugte Software soll native Steuerelemente
      verwenden um sich nahtlos in die jeweilige Systemarchitektur
      einzugliedern. Der Benutzer soll keine Unterschiede zwischen
      dieser Software und der existierenden Software auf dem System
      erkennen können.
 
Stellt man die Bibliotheken in einem Schichtenmodell dar,
    ergibt sich folgendes Bild:
    
     
    
       
    
    Programmiersprachen
    Das erste Auswahlkriterium ist die Programmiersprache. Hier
    bieten sich bereits mehrere Möglichkeiten auf die im Anchluss
    konkret eingegangen wird:
    
      - C/C++ Bibliotheken.
- Java
- Kylix
- Smalltalk
 
- Mozilla
Die Alternativen zu C und C++ werden etwas ausführlicher
    angesprochen, da sie auch unter Software-Entwicklern weniger
    bekannt sind.
    
    Eine Beispielanwendung
    Um die einzelnen Softwarepakete praktisch vergleichen zu können
    wird mit allen Bibliotheken eine Beispielanwendung erzeugt. Die
    implementierte Anwendung verfügt über keinerlei Funktionalität,
    zeigt aber die wichtigsten Steuerelemente. Für die Windows
    Seite wird zudem eine reine Windows Software (Visual C++ 6.0,
    MFC Klassenbibliothek) erzeugt, an der sich die anderen Pakete
    bezüglich des Look&Feels messen müssen. Als Linux
    Distributionen kommen RedHat Fedora Core 2 und Debian 3.0 zum
    Einsatz.
    
     
    
      
      
      Windows 2000 und Windows XP Screenshot (Quellcode für Visual
      C++ hier).
      
    
    C/C++ Bibliotheken
    Trolltech Qt
    Qt ist eine Klassenbibliothek der norwegischen Firma Trolltech
    für die plattformübergreifende Programmierung unter C++. Der
    Linux Windows Manager KDE basiert auf dem Qt Paket.
    Ursprünglich wurde Qt unter einer Lizenz vertrieben, die für
    viele Linuxanwender nicht akzeptabel war. Aus diesem Grund
    wurde die GTK+ Bibliothek entwickelt, die Grundlage für den
    Gnome Windows Manager ist. Inzwischen ist sowohl die Linux- als
    auch die MacOS-Version unter der GPL inklusive Quelltexten
    verfügbar, Qt für Windows wird nach wie vor kommerziell
    vertrieben. Zur Evaluaierung kann eine zeitlich befristete
    Testversion von der Webseite heruntergeladen werden, dabei wird
    unterschieden zwischen Evaluierungen für anschließende
    kommerzielle Nutzung und Evaluierung für akademische Zwecke. Im
    folgenden wird auf die kommerzielle Evaluierungsversion
    eingegangen, die eine Registrierung erfordert.
    
    Neben den Versionen für Windows, Linux (Unix) und Mac ist eine
    embedded Version verfügbar, die auf embedded Linux Varianten
    läuft und eine schlankere Fensterverwaltung bietet.
    
    Unter Linux verläuft die Installation wie erwartet völlig
    problemlos. Im Programmpaket enthalten ist der GUI Generator Qt
    Designer. Die enthaltene umfangreiche Dokumentation gefällt
    durch eine detaillierte Beschreibung von Beispielprojekten,
    einem Kapitel zum Schnelleinstieg, sowie einer
    Klassenübersicht. Der Qt Designer ist leider keine komplette
    Entwicklungsumgebung, für die Code-Generierung muss eine Shell
    bemüht werde. Als Ouput des GUI Generators erhält man eine XML
    Beschreibung der erstellten grafischen Oberfläche. Aus dieser
    Beschreibung wird über das Qt-Tool qmake ein gültige Makefile
    erzeugt. Das Makefile erzeugt aus der Oberflächen-Beschreibung
    zunächst C++ Quellcode-Dateien (Qt-Tool: uic) und ruft
    anschließend den Meta Object Compiler (Qt-Tool: moc) auf, der
    Qt spezifische Spracherweiterungen in C++ Quellcode umsetzt
    (z.B. Signal-Slot-Mechanismus). Erst danach kann ein Standard
    make aufgerufen werden.
    
    Möchte man die Source-Files von Hand generieren ist folgende
    Sequenz nötig (Ausgangsbasis ist MyDialog.ui):
    
      - uic MyDialog.ui > MyDialog.h
- uic -impl MyDialog.h MyDialog.ui > MyDialog.cpp
- moc -o moc_MyDialog.cpp MyDialog.h
 
Bei der Installation unter Windows benötigt das Toolkit einen
    Benutzer- und Firmennamen sowie eine Seriennummer. Diese Daten
    werden von Trolltech per Email nach der Registrierung
    mitgeteilt. Wider Erwarten läuft die Installation auf den
    Testsystemen nicht reibungslos ab. Eine Windows 2000
    Installation mit Visual C++ 6.0 Entwicklungsumgebung wird zwar
    korrekt erkannt, dem Wizard gelingt es aber nicht, die
    Beispielprojekte zu übersetzen und die Installation muss
    abgebrochen werden. Auf einem zweiten System mit Windows 2000
    wird eine Visual C++ 5.0 Umgebung erst gar nicht erkannt. In
    beiden Fällen muss also Hand angelegt werden um zu einem
    lauffähigen System zu gelangen. Wie bei der Linux Version wird
    auch unter Windows die Entwicklungsumgebung Qt Designer
    mitgeliefert. Die Dokumentation ist offensichtlich die gleiche
    wie unter Linux. Die Windows spezifischen Informationen gehen
    etwas unter. So muss der Visual C++ Programmierer intensiv
    suchen, um die wichtigen Zeilen "For Visual Studio users, qmake
    can also generate '.dsp' files, for example: qmake -t vcapp -o
    hello.dsp hello.pro" zu finden.
    
     
    
      
      Linux und Windows 2000 Screenshot (Quellcode für QtDesigner
      hier).
    
    Übersicht über Qt
    
      
        
          | Name: 
 | Trolltech Qt 
 | 
        
          | Version: 
 | 3.3.2 
 | 
        
          | Betriebssysteme: 
 | Linux, Win32, MacOS, Solaris, IRIX, AIX, HP-UX 
 | 
        
          | Programmiersprache: 
 | C++ 
 | 
        
          | Lizenz: 
 | GPL oder proprietäre Lizenz (kommerziell) 
 | 
        
          | Vorteile: | 
              Basisbibliothek für den KDE Windows Manager unter
              LinuxInstallationspakete in allen Linux
              Standard-Distributionen vorhanden (Installation sehr
              einfach)
generische Controls unter WindowsMächtige Entwicklungsumgebung(en)bewährt
Migrationsunterstützung für Win32 MFC Anwendungen
              (Qt/MFC Migration Framework) ermöglicht das
              schrittweise Umsetzen von MFC Quellcode.
 | 
        
          | Nachteile: 
 | 
              evtl. Lizenzkosten (teuer)Evaluierungssoftware läßt sich unter Windows
              nicht fehlerfrei installieren
 | 
        
          | Entwicklungsumgebung: 
 | z.B. QtDesigner, KDevelop 
 | 
        
          | WWW: | http://www.trolltech.com | 
        
          | Dokumentation: 
 | Manuals, Tutorials, Mailing Listen z.B. http://doc.trolltech.com/3.3/index.html
 
 | 
        
          | Referenzprojekte: 
 | 
              KDE Desktop (Default z.B. bei SuSE)
Opera BrowserPhotoshop Album | 
        
          | Verbreitung: 
 | sehr große Verbreitung 
 | 
      
    
    wxWidgets
    Seit mittlerweilen 12 Jahren ist das wxWidgets Toolkit
    verfügbar, jedoch erst vor wenigen Monaten bekam das Paket
    seinen heutigen Namen. Der bis dahin verwendete Name wxWindows
    wurde nach "Gesprächen" mit Microsoft aufgegeben. wxWidgets
    verfügt über eine riesige Sammlung an Klassen für alle
    Bereiche. Neben der mächtigen Dokumentation sind sehr viele
    Beispielanwendungen verfügbar. Die Liste der
    Referenzanwendungen macht deutlich, dass es hier um ein
    ausgereiftes Softwarepaket handelt. 
    
    Die Programmierung erfolgt in C++ und ist ähnlich der Visual
    C++ Programmierung unter Windows. Ein Umstieg dürfte hier die
    geringsten Probleme verursachen.
    
    Nach der Installation der Version wxWindows2.4.2 unter RedHat
    Fedora Core 2 treten beim Übersetzen der Beispielprogramme
    Fehler auf. Die Ursache der Fehler liegt in GTK+ Aufrufen, die
    in der von RedHat gepatchten Version von GTK+ privat und somit
    nicht zugelassen sind. Hier zeigt sich, das die Dynamik der
    Open Source Gemeinde durchaus auch Probleme verursachen kann.
    Die Probleme sollten aber nicht überbewertet werden. Mit der
    Installation einer Standard GTK+ Bibliothek dürfte alles glatt
    laufen. Für die weitere Untersuchung im Rahmen dieses Artikel
    wird stattdessen auf die Debian Distribution Version 3.0
    gewechselt. Hier funktioniert alles auf Anhieb.
    
    Ebenfalls problemlos verläuft die Installation unter Windows.
    Das Generieren der Bibliotheken und Beispielprogamme
    funktioniert mustergültig. 
    
     
    
      
      
       Linux und Windows 2000 Screenshot (Quellcode hier).
    
    
    Übersicht über wxWidgets
    
      
        
          | Name: 
 | wxWidgets 
 | 
        
          | Version: 
 | 2.4.2 
 | 
        
          | Betriebssysteme: 
 | Linux, Win32, embedded Devices 
 | 
        
          | Programmiersprache: 
 | C++ 
 | 
        
          | Lizenz: 
 | LGPL 
 | 
        
          | Vorteile: | 
              einfache Handhabung (viele Beispiele).
sehr gute Dokumentation.
 | 
        
          | Nachteile: 
 | 
              Probleme bei der Kombination Fedora Core 2 -
              wxWindows2.4.2
 | 
        
          | Entwicklungsumgebung: 
 | 
 | 
        
          | WWW: | http://www.wxwidgets.org 
 | 
        
          | Dokumentation: 
 | Manuals, Tutorials, Mailing Listen, Wiki z.B. http://wiki.wxwidgets.org
 | 
        
          | Referenzprojekte: 
 | AOL Communicator 
 | 
        
          | Verbreitung: 
 | geringe Verbreitung 
 | 
      
    
    
    
    GTK+ (mit gtkmm)
    Die Abkürzung GTK steht für "The GIMP Toolkit". Die beiden
    bekanntesten Projekte sind der Gnome Windows Manager, der in
    allen Standard Linux Distributionen enthalten ist, und die
    professionelle Grafikanwendung GIMP. Gnome ist neben KDE (siehe
    Qt) die zweite große Desktop-Umgebung unter Linux. Sie wird von
    vielen Distributionen als Standard-Umgebung installiert. Mit
    Einführung der Version 2 von GTK+ ist das Look&Feel
    wesentlich verbessert worden. 
    
    Eine Besonderheit von GTK+ ist, dass es komplett in C
    implementiert wurde. Konsequenterweise erzeugt der GUI-Builder
    glade2 ebenfalls C-Code. Durch Verwendung von gtkmm (früher
    GTK--) läßt sich aber ebenfalls in C++ programmieren.
    
    Ganz im Gegensatz zum professionellen Auftreten von GTK+ für
    Linux scheint es mit 'GTK+ for Win32' nicht weit her zu sein.
    Klickt man auf der GTK+-Hauptseite auf diesen Link erscheint
    sofort die Warnung: "The program(s) might crash unexpectedly
    or behave otherwise strangely. (But of course, so do many
    commercial programs on Windows.) The stability seems to depend
    a lot on the machine, display drivers, other software
    installed, and whatnot." (Stand 2004-09-06). Der wagemutige
    Software-Entwickler klickt natürlich dennoch auf die Download
    Seite und bekommt eine lange Liste an einzelnen
    Softwarekomponenten zum Download angeboten. Ein
    zusammenhängendes Paket sucht man vergebens. Stattdessen liest
    man die Anweisung, eine Reihe von Softwarekomponenten zu
    installieren und gegebenfalls, wenn bestimmte Sachen fehlen,
    die Download-Seite eben noch einmal zu besuchen. Dies passt zur
    Aussage der 'GTK+ for Windows' - Webseite: "You are expected to
    be pretty experienced to be able to use GTK+ in your own
    programs. This isn't Visual Basic.".  Nach einer Installation
    der Basiskomponeneten und einem erfolglosen Versuch eine
    Beispielanwendung zu starten, dürfte den meisten Entwicklern
    allmählich die Lust auf eine tiefere Einarbeitung vergangen
    sein. Die völlig unprofessionelle Aufmachung der 'GTK+ for
    Win32' Einzelkomponenten (von einem Paket kann keine Rede sein)
    disqualifiziert das Software-Paket und jeglicher
    (professionelle) Einsatz ist ausgeschlossen.
    
     
    
      
       GTK+ Screenshot für Linux (Quellcode für glade2 hier)
    
    Übersicht über GTK+
    
      
        
          | Name: 
 | GTK+ - The GIMP Toolkit 
 | 
        
          | Betriebssysteme: 
 | Linux, Win32 
 | 
        
          | Programmiersprache: 
 | C (C++ mit gtkmm) 
 | 
        
          | Lizenz: 
 | LGPL 
 | 
        
          | Vorteile: 
 | 
              Basisbibliothek für den Gnome Windows Manager
              unter LinuxInstallationspakete in allen
              Standard-Distributionen vorhanden (Installation sehr
              einfach)
generische Controls unter Windowsbewährt (unter Linux)
 | 
        
          | Nachteile: 
 | 
              Win32-Implementierung ist unhandlich läuft nicht
              stabil (Stand 09-2004)
 | 
        
          | Entwicklungsumgebung: 
 | z.B. glade2 (GUI Builder), Anjuta | 
        
          | WWW: | http://www.gtk.org | 
        
          | Dokumentation: 
 | Manuals, Tutorials, Mailing Listen z.B. http://developer.gnome.org/doc/API/2.0/gtk/index.html
 
 | 
        
          | Referenzprojekte: 
 | 
              Gnome DesktopGIMPGnumeric
 | 
        
          | Verbreitung: 
 | Linux: sehr große Verbreitung, Windows: sehr geringe
          Verbreitung 
 | 
      
    
    
    
    FLTK
    Beim FLTK Toolkit (Fast, Light Tool Kit) handelt es sich um ein
    weitestgehend unbekanntes Paket, dass als Nachfolger von XForms
    implementiert wurde. Auf der Web-Seite bekommt man die
    kompletten Sourcen zum Download angeboten. Die Größe von 2.3MB
    (.tar.gz, Linux) bzw. 3MB (.zip, Win32) macht dem Namen alle
    Ehre. Unter Linux erfolgt die Installation problemlos:
    auspacken und "make" aufrufen, fertig. Danach stehen dem
    Benutzer die Bibliotheken, Beispielanwendungen, der GUI-Builder
    "fluid" und ein Programmierhandbuch zur Verfügung. Dass bei
    dieser Größe die Anzahl der zur Verfügung gestellten Klassen
    geringer ist als bei den Schwergewichten Qt und wxWindows
    dürfte klar sein. Die enthaltenen Klassen decken den
    GUI-Bereich ab, d.h. Fenster, Menüs, Controls, OpenGL und
    Darstellung von Bildern. Klassen für Netzwerk-Kommunikation und
    ähnliches sind nicht vorhanden.
    
    Unter Windows läuft die Installation nicht ganz so rund. Bei
    Verwendung der Visual C++ Entwicklungsumgebung muss lediglich
    ein Hauptprojekt übersetzt werden, dabei kommt es aber zu
    Problemen mit den Grafikbibliotheken. Der Einfachheit halber
    können diese in der Konfigurationsdatei config.h auskommentiert
    werden. 
    Eine weitere Besonderheit der Windows-Variante ist, dass sich
    beim Starten eines Projekts stets auch ein DOS-Fenster öffnet,
    wenn die FLTK-Bibliothek in der DEBUG Variante erstellt wurde.
    Dies ist kein Bug, sondern ein Feature: Auf diese Art wird
    gewährleistet, dass Anwendungen die von der Konsole gestartet
    werden auf stderr und stdout schreiben können.
    
    Insgesamt gesehen macht das FLTK Toolkit einen sehr
    durchdachten Eindruck. Die Dokumentation hebt insbesondere die
    geringe Größe der Executables (80kB für ein "hello world") und
    schlanke schnelle 2D und 3D Grafik (OpenGL/Mesa) hervor.
    Desweiteren wird auf eine gute Portierbarkeit hingewiesen.
     
    
      
      
       Linux und Windows 2000 Screenshot (Quellcode hier).
    
    
    Übersicht über FLTK
    
      
        
          | Name: 
 | Fast Light Tool Kit | 
        
          | Version: 
 | 1.1.5rc3 
 | 
        
          | Betriebssysteme: 
 | Linux, Win32, MacOS 
 | 
        
          | Programmiersprache: 
 | C++ 
 | 
        
          | Lizenz: 
 | LGPL 
 | 
        
          | Vorteile: | 
              sehr schlanke BibliothekQuellcode inklusive Dokumentation und
              Entwicklungsumgebung "fluid"
gute OpenGL Unterstützung (wurde nicht
              untersucht)
generische Controls unter Windows | 
        
          | Nachteile: 
 | 
              Installation unter Win32 (Visual C++) nicht
              fehlerfreifluid-Entwicklungsumgebung läuft nicht stabil
              unter Windows
 | 
        
          | Entwicklungsumgebung: 
 | z.B. fluid (GUI Builder), Eclipse 
 | 
        
          | WWW: | http://www.fltk.org, Download:
          http://freshmeat.net/projects/fltk/ 
 | 
        
          | Dokumentation: 
 | Manuals, Tutorials, Mailing Listen z.B. http://www.fltk.org
 
 | 
        
          | Referenzprojekte: 
 |  | 
        
          | Verbreitung: 
 | geringe Verbreitung; auch unter Software-Entwicklern
          weitestgehend unbekannt 
 | 
      
    
    FOX Toolkit
    Das Fox Toolkit bezeichnet sich selbst als eines der
    schnellsten verfügbaren Toolkits. Es verfügt über eine Vielzahl
    von Steuerelementen und eine OpenGL Anbindung.
    
    Die obligatorischen Test-Installationen unter Windows und Linux
    verlaufen problemlos. Neben Beispielprojekten ist eine
    ausführliche Dokumentation verfügbar. Leider fehlt bei der
    getesteten Version die Klassenübersicht, die aber online
    eingesehen werden kann. Bei der weiteren Untersuchung leistet
    sich das Toolkit keine Schwächen.
    
     
    
      
      
       Windows 2000 Screenshot (Quellcode hier)
    
    Übersicht über FOX
    
      
        
          | Name: 
 | FOX Toolkit | 
        
          | Version: 
 | 1.2.9 
 | 
        
          | Betriebssysteme: 
 | Linux, Win32 
 | 
        
          | Programmiersprache: 
 | C++ 
 | 
        
          | Lizenz: 
 | LGPL 
 | 
        
          | Vorteile: |  | 
        
          | Nachteile: 
 |  | 
        
          | Entwicklungsumgebung: 
 | 
 | 
        
          | WWW: | http://www.fox-toolkit.org 
 | 
        
          | Dokumentation: 
 | Manuals, Tutorials, Mailing Listen 
 | 
        
          | Referenzprojekte: 
 |  | 
        
          | Verbreitung: 
 | geringe Verbreitung 
 | 
      
    
    
    
    Weitere Möglichkeiten
    Neben den angesprochenen Bibliotheken sollen der
    Vollständigkeit halber noch weitere Projekte genannt werden,
    auf die aber nicht eingegangen wird: 
    
    
    JAVA
    Im Jahre 1995 stellte die Firma Sun eine neue
    Programmiersprache vor. Neben normalen Desktop-Computern war
    Java für Industriegeräte (Kaffemaschinen, Toaster, ...)
    vorgesehen. Der große Durchbruch gelang aber zunächst über
    Internet-Anwendungen (Applets) in Verbindung mit Web-Browsern.
    In der Zwischenzeit wird Java aber auch für Standalone
    Anwendungen verwendet, für die es sich durch verschiedenen
    Eigenschaften sehr gut eignet. 
    
    Im folgenden sollen die wichtigsten Eigenschaften von Java
    aufgezählt und kurz erklärt werden.
    
    Plattformunabhängigkeit
    Java ist plattformunabhängig. Java Anwendungen bestehen aus
    einem Bytecode, der von einer virtuellen Maschine interpretiert
    wird. Dadurch sind die Anwendungen auf jeder Hardware
    lauffähige für die eine passende virtuelle Maschine existiert.
    Das Interpretieren durch die virtuelle Maschine bedeutet eine
    geringere Abarbeitungsgeschwindigkeit gegenüber compilierter
    Software. Um diesen Nachteil auszugleichen sind mittlerweile
    Verbesserungen wie beispielsweise Just-In-Time-Compilierung
    (JIT) entwickelt worden, die zur Laufzeit Programmanweisungen
    der virtuellen Maschine in Anweisungen für die physaklische
    Maschine übersetzt. Als Ergebnis erhält man hier ein
    angepasstes Programm im Speicher, dass ohne Interpretation
    schnell ausgeführt werden kann. Die Hotspot-Technologie führt
    zusätzlich eine Analyse des Laufzeitverhaltens zur weiteren
    Optimierung durch.
    Objektorientierung 
    Java ist objektorientiert. Bei der Objektorientierung ließen
    sich die Entwickler der Sprache von Smalltalk inspirieren.
    Vermutlich aus Performance-Gründen sind aber dennoch primitive
    Datentypen vorhanden, die nicht als Objekte verwaltet
    werden.
    
    Sprachsyntax
    Die Sprachsyntax ist ähnlich wie bei C und C++, jedoch wurden
    fehlerträchtige Inkonsistenzen nicht übernommen. Eine Grundsatz
    beim Entwicklen der Sprache war, dass Java die besten Konzepte
    der existierenden Programmiersprachen vereinen soll. 
    
    Einige Beispiele sind:
    
      - Kein Präprozessor: Ein Präprozessor und Header-Dateien
      sind nicht mehr nötig, da alle Informationen direkt aus den
      Klassendateien gelesen werden.
- Zeiger: Java kennt keine Zeiger, sondern verwendet statt
      dessen Referenzen. Eine Referenz repräsentiert ein
      Objekt.
- Garbage-Collector: Um Probleme mit dem Anlegen und
      Löschen von Objekten zu umgehen wird die Objektverwaltung von
      der Java-Laufzeitumgebung übernommen. Beim Verlassen des
      Wirkungsbereichs werden Objekte automatisch gelöscht. Nicht
      freigegebene Objekte bzw. Speicherbereiche sowie falsche
      Destruktoren werden durch diese Technik verhindert.
- Ausnahmebehandlung: Im Gegensatz zur C++
      Ausnahmebehandlung werden Java Exceptions wesentlich
      intensiver genutzt und sind oftmals obligatorisch.
 
Klassenbibliothek 
    Java verfügt über eine umfangreiche Klassenbibliothek: JFC
    (Java Foundation Class) zum Erstellen von Oberflächen
    (Durchgesetzt hat sich hier der Codename Swing).  
    Sicherheit
    Von einem Verifier wird Java-Code zunächst auf strukturelle
    Korrektheit und Typsicherheit überprüft. Ein Security-Manager 
    überwacht die Zugriffe auf die Peripherie. Jegliche
    Sicherheitsprobleme werden über Exceptions zur Laufzeit
    gemeldet.  
    Eignung für Projekte
    
    Die genannten Vorteile haben Nebeneffekte, die Java nicht für
    alle Projekte sinnvoll erscheinen lassen. Diese Eigenschaften
    sind jedoch keine Fehler oder Schwächen, sondern sind bewußt
    nicht implementiert worden und gehören zur
    Sprachphilosophie.
    
    Dazu gehören z.B.:
    
      - plattformspezifische Peripherie-Zugriffe
- direkte Hardware-Zugriffe
- Eingriffe in das Betriebssystem
Das Java Development Kit kann von der Sun Internetseite
    heruntergeladen werden und umfasst eine Basisausstattung an
    Applikationen, Java-Klassen und die Online-Dokumentation. Bei
    den Anwendungen handelt es sich um einen Compiler, einen
    Debugger, einen Appletviewer, sowie verschiedenen
    Hilfsprogrammen, die zum Erstellen und Testen von Java
    Anwendungen und Java Applets notwendig sind. Die Ausstattung
    bietet jedoch nur das Nötigste, der Compiler etwa muss von der
    Kommandozeile aus bedient werden. Desweiteren ist im Paket das
    Java Runtime Environment (JRE, enthält die virtuelle Maschine)
    enthalten, die zum Ausführen des Bytecodes notwendig ist. Die
    Dokumentation umfasst schließlich die Beschreibung der
    kompletten API.
    
    
    
    Unter Benutzung des Standard JDK soll die obligatorische
    Hello-World Anwendung implementiert werden:
    
    1. Schritt: Erzeugen des Quellcodes.
sh>vi Helloworld.java
public class HelloWorld {
  public static void main (String[] args) {
    System.out.println("Hello World!");
  }
}
    Dateiname und Klassenname müssen übereinstimmen.
    
    2. Schritt: Übersetzen.
sh>javac Helloworld.java
    
    3. Schritt: Anwendung unter Verwendung der virtuellen Maschine
    starten.
sh>java Helloworld
    
    JavaScript und Java
    Fälschlicherweise werden zwischen JavaScript und Java oft
    Gemeinsamkeiten vermutet. Dies ist grundsätzlich falsch.
    JavaScript wurde als Skript-Sprache zur Einbettung in HTML
    ursprünglich von der Firma Netscape entwicklet. Es ist keine
    eigenständige Programmiersprache und ist vom verwendeten
    Browser abhängig. Der Name JavaScript ist also mehr als
    Marketing-Gag zu verstehen. 
    Normierungsversuche
    Bisher sind sämtliche Normierungsversuche der Sprache Java
    gescheitert. Grund hierfür dürfte sein, dass Sun die alleinige
    Kontrolle über die Weiterentwicklung des Java-Standards nicht
    aus der Hand geben möchte. 
    Dekompilierung
    Ein Wunder Punkt von Java ist die Tatsache, dass Anwendungen
    dekompiliert werden können. Trotz aller Sicherheitsmechanismen
    kann, zumindest im Augenblick, der Bytecode wieder in Source
    Code umgewandelt werden. Da der Java Compiler Bytecode für
    einen virtuellen Prozessor erstellt, müssen im Gegensatz zum
    klassischen Assembler-File weitere wichtige Informationen
    enthalten sein, die die Dekompilierung deutlich vereinfachen.
    Dies ist vor allem dann kritisch, wenn spezielles Wissen im
    Source Code steckt. 
    Wundersprache oder kurzfristiger Hype?
    
    Nachdem das Java Konzept anfänglich für die ultimative Lösung
    für plattformunabhängige Programmierung gehalten wurde, hat
    sich die Euphorie wieder gelegt. Neben Versionskonflikten
    zwischen verschiedenen virtuellen Maschinen wird immer wieder
    auf die Geschwindigkeit verwiesen. Viele Firmen sind nach einer
    Versuchsphase wieder zur Standard-C++ Programmierung
    zurückgekehrt. Dies wird z.B. von den wxWidgets Entwicklern
    bestätigt, die von wieder steigender Anzahl von Downloads
    berichten. 
    
    Eine interessante Webseite in diesem Zusammenhang ist: 
    http://www.internalmemos.com/memos/memodetails.php?memo_id=1321.
    Hier sprechen sich (angeblich) Sun Mitarbeiter gegen Java
    aus.
     
    Grafische Oberflächen mit Java
    Standardmäßig bietet Java 2 Möglichkeiten zur Programmierung
    von grafischen Oberflächen:
    
      - Zum einen ist eine umfangreiche Klassenbibliothek
      enthalten (JFC,  Swing), die sämtliche Arten von
      Steuerelementen zur Verfügung stellt. Im Gegensatz zu den
      bisher vorgestellten Toolkits werden wird hier keine
      Betriebssystemfunktionalitäten verwendet, sondern sämtliche
      sogenannten Widgets werden durch Java Befehle gezeichnet.
      Dadurch ist es möglich das Look&Feel der Anwendung zur
      Laufzeit umzuschalten. Die im Anschluß folgenden Screenshots
      zeigen die identische Anwendung, die von dieser Möglichkeit
      Gebrauch macht.
 
- Zum anderen gibt es die sehr rudimentären AWT Funktionen.
      Bei AWT fehlen komplexere Oberflächenelemente wie z.B. Bäume,
      weswegen es für die meisten Anwendungen unbrauchbar ist.
 
     
    
      
      
       Java Screenshots im Metal-, Motif- und  GTK+ Look & Feel
      (Quellcode hier)
      
       
      
      
      Java Screenshot mit Windows Look & Feel unter Windows
      2000 und Windows XP (identischer Sourcecode)
    
    
    Da alle gängigen Browser Java unterstützen, können Anwendungen
    auch als sogenannte Applets im Browser laufen. Diese
    Technologie kann z.B. im Embedded Bereich genutzt werden. Der
    Java-Bytecode wird auf Anforderung über einen Webserver an die
    Clients (Browser) geschickt, die die Anwendung auf dem Host
    ausführen. Daraus resultiert dass der Webserver lediglich über
    genügend Speicherplatz zum Ablegen der Applets verfügen muss,
    die Rechenleistung spielt keine Rolle, da der Code in der
    virtuellen Maschine des Aufrufers läuft.
    Der folgende Screenshot zeigt die identische Anwendung als
    Java-Applet in eine Webseite eingebunden.
    
     
    
      
       
       Java Screenshot mit der Beispielanwendung als Applet
      (Beispielcode hier)
    
    SWT und Eclipse
    Obwohl Java über ähnliche Eigenschaften zur Darstellung von
    grafischen Steuerlementen verfügt wie andere Toolkits, gab es
    unter Software-Entwicklern in der Vergangenheit immer wieder
    unzufriedene Stimmen. Als größte Probleme wurde der mangelnde
    Funktionsumfang und geringe Geschwindigkeit von Swing genannt.
    
    Als Alternative wurde von IBM das Standard Widget Toolkit (SWT)
    entwickelt, das unter Java die Verwendung von nativen Elementen
    erlaubt. Ein Referenzprojekt ist die ebenfalls von IBM
    entwickelte IDE Eclipse, die eine offene Plattform für
    Entwicklungswerkzeuge darstellt. Sowohl Toolkit als auch
    Entwicklungsumgebung sind freie Software. 
    
    Abkürzung in Zusammenhang mit JAVA
    
      
        
          | JDK (Java Development Kit) | Das komplette Java Paket zum Erstellen von Java 
          Anwendung bestehend aus Anwendungen, Java Klassen und
          Dikumentation. 
 | 
        
          | JRE (Java Runtime Environment) 
 | enthält die virtuelle Maschine und ist zum Benutzen
          von Java Anwendungen notwendig. 
 | 
        
          | J2ME (Java 2 Micro Edition) 
 | Java für Geräte mit geringen Ressourcen. 
 | 
        
          | J2SE (Java 2 Standard Edition) 
 | Java für den Desktop (Linux, Windows, ...) 
 | 
        
          | J2EE (Java 2 Enterprise Edition) 
 | Java zum Erstellen mehrschichtiger
          Client-/Server-Anwendungen sowie von Java Servlets und
          Java Server Pages. 
 | 
        
          | JFC (Java Foundation Class) 
 | Klassensammlung zum Erstellen von Oberflächen (->
          Swing) 
 | 
      
    
    
    Übersicht über JAVA
    
      
        
          | Name: 
 | JAVA 2 PLATFORM STANDARD EDITION DEVELOPMENT KIT
          5.0 | 
        
          | Version: 
 | 5.0 
 | 
        
          | Betriebssysteme: 
 | 
              Linux, Windows, Solaris (SUN)Linux, Windows, AIX, Solaris (evtl. MacOS, OS/2,
              FreeBSD, Amiga, BeOS) (Jikes -> IBM) | 
        
          | Programmiersprache: 
 | JAVA 
 | 
        
          | Lizenz: 
 | proprietäre Lizenz (SUN) 
 | 
        
          | Vorteile: | 
              robuste Sprache (viele Fehlerquellen sind durch
              das Sprachkonzept ausgeschlossen)große Anzahl von leistungsfähigen Tools wie z.B.
              Eclipse
 | 
        
          | Nachteile: 
 | 
              proprietäre Sprache, alleinige Kontrolle durch
              SUNvirtuelle Maschine der Zielplattform muss
              passen
langsame AusführungsgeschwindigkeitSWT aufwändiger zu programmieren als Swing
 | 
        
          | Entwicklungsumgebung: 
 | z.B. Eclipse 
 | 
        
          | WWW: | http://java.sun.com | 
        
          | Dokumentation: 
 | Manuals, Tutorials Allgemein: http://java.sun.com/j2se/1.5.0/docs/,
          http://www-e.uni-magdeburg.de/mayer/java.html
 SWT: http://eclipse-wiki.info/SWT,
          http://www.java-tutor.com/java/swtlinks.html
 
 | 
        
          | Referenzprojekte: 
 |  | 
        
          | Verbreitung: 
 | sehr große Verbreitung 
 | 
      
    
    
    
    
    Kylix
    Kylix ist eine Cross-Platform Entwicklungsumgebung für Linux
    und Windows. Mit Hilfe der Borland CLX Bibliothek (Component
    Library for Cross-platform) können Anwendungen unter Delphi und
    C++ erstellt werden, die dann auf beiden Plattformen laufen.
    Laut einem Bericht auf der Wikipedia-Homepage (Link hier) ist diese
    Bibliothek aber nichts anderes als ein Wrapper für die bereits
    vorgestellte Bibliothek Qt. Zusätzlich handelt es sich bei der
    Kylix IDE offenbar um eine auf WINE (Link hier)
    basierende nicht-native Linuxanwendung, deren erstellten
    Executables gegen libwine gelinkt werden müssen. Wenn man dies
    berücksichtigt dürfte der Einsatz von Kylix für C++-Entwickler
    wenig Sinn machen, da hier der Einsatz von Qt mit einer freien
    IDE wesentlich geradlinige ist. 
    
    Übersicht über Kylix
    
    
      
        
          | Name: 
 | Kylix 
 | 
        
          | Version: 
 | 3 
 | 
        
          | Betriebssysteme: 
 | Windows, Linux 
 | 
        
          | Programmiersprache: 
 | Delphi, C++ 
 | 
        
          | Lizenz: 
 | proprietäre Software 
 | 
        
          | Vorteile: | 
              Entwicklung unter Delphi und C++
 | 
        
          | Nachteile: 
 |  | 
        
          | Entwicklungsumgebung: 
 | Kylix 
 | 
        
          | WWW: | http://www.borland.de/kylix | 
        
          | Dokumentation: 
 | 
 | 
        
          | Referenzprojekte: 
 | 
 | 
        
          | Verbreitung: 
 | geringe Verbreitung 
 | 
      
    
    
    
    
    
    Smalltalk
    Ein Klassiker unter den Programmiersprachen ist Smalltalk. In
    den Jahren 1969/70 von Xerox entwickelt, ist die Sprache bis
    heute ein Musterbeispiel für völlige Objetorientierung. In
    Smalltalk ist alles ein Objekt, es gibt keine einfachen
    Datentypen. Smalltalk arbeitet wie Java und .Net (siehe unten)
    mit einer virtuellen Maschine. Die Sprachsyntax orientiert sich
    an der natürlichen Sprache, unterscheidet sich aber deutlich
    von anderen existierenden Programmiersprachen. Smalltalk wurde
    bereits damals mit einer grafischen Oberfläche programmiert,
    weshalb man sagt, dass Smalltalk seiner Zeit 10-15 Jahre
    vorraus war. Es ist möglich zur Laufzeit das Kernsystem zu
    ändern und diese Modifikationen sind im Anschluß, ohne dass ein
    Neustart nötig ist, gültig. Smalltalk war relativ erfolgreich
    bis Java aufkam.
    
    Das obligatorische 'Hello world !' unter Smalltalk:
Transcript show: 'Hello world !'; cr.
    
    Smalltalk wird auch heute noch für Projekte eingesetzt. Die am
    weitesten verbreitete Variante ist Smalltalk-80 (Normierung von
    1980). Eine leistungsfähige Entwicklungsumgebung ist
    beispielsweise Squeak.
    
    Übersicht über Smalltalk
    
      
        
          | Name: 
 | Smalltalk (z.B. Squeak) 
 | 
        
          | Version: 
 | 3.6 
 | 
        
          | Betriebssysteme: 
 | Windows, Linux, Solaris, MacOSX, Darwin 
 | 
        
          | Programmiersprache: 
 | Smalltalk 
 | 
        
          | Lizenz: 
 | Open Source 
 | 
        
          | Vorteile: |  | 
        
          | Nachteile: 
 | 
              Smalltalk wird von Java verdrängt und hat eine
              deutlich kleinere Nutzerzahl
 | 
        
          | Entwicklungsumgebung: 
 | z.B. Squeak 
 | 
        
          | WWW: | http://www.smalltalk.org | 
        
          | Dokumentation: 
 | 
 | 
        
          | Referenzprojekte: 
 | 
 | 
        
          | Verbreitung: 
 | geringe Verbreitung 
 | 
      
    
    
    
    
    Mozilla
    Mozilla? Ein Browser? Wie soll man mit einem Browser
    programmieren? Bei Mozilla handelt es sich nicht nur um einen
    Webbrowser, sondern zusätzlich um ein plattformübergreifendes
    Framework, das verschiedene Standards wie z.B. XUL (XML based
    user interface language) unterstützt. XUL wird verwendet um die Struktur
    und den Inhalt einer Applikation zu definieren. Sämtliche
    Dateien werden als Klartextdateien abgelegt. Mozilla
    unterscheidet nicht zwischen Programmen und Webseiten da diese
    konzeptionell sehr ähnlich sind. Folgende Zeile im Feld für dir
    URL eingegeben läßt den Browser sich selbst rendern:
chrome://navigator/content
    
    Der folgende Code stellt im Mozilla Browser einen Button dar,
    der beim Anklicken ein Fenster mit dem Text "Hello World"
    öffnet.
<?xml version="1.0"?>
<!-- Beispiel XUL Datei -->
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<box align="center">
  <button label="Push" onclick="alert('Hello World');" />
</box>
</window>
    
    Softwareentwicklung mit Mozilla entscheidet sich grundlegend
    von der klassischen Programmierung. Viele innovative Konzepte
    haben Einzug gefunden, wie zum Beispiel die Trennung der
    Anwendung von der Darstellung. So können existierende
    Anwendungen durch geänderte 'Themes' ihr Aussehen ändern.
    Erfolgreiche Projekte wie der Mozilla Firefox Browser zeigen,
    dass es sich bei diesem Framework um eine ausgereifte und
    robuste Umgebung handelt.
    
     
    
      
      
      Linux und Windows 2000 Screenshot (Quellcode hier).
    
    
    Übersicht über Mozilla
    
    
      
        
          | Name: 
 | Mozilla 
 | 
        
          | Version: 
 | 1.6 
 | 
        
          | Betriebssysteme: 
 | Windows, Linux, 
 | 
        
          | Programmiersprache: 
 | XUL 
 | 
        
          | Lizenz: 
 | Mozilla Public License, Netscape Public License | 
        
          | Vorteile: | 
              innovative Konzeptebestehende Webstandards werden unterstützt
              (JavaScript, Stylesheets, ...)Anwendungen können im Browser oder als standalone
              Anwendung dargestellt werden.
 | 
        
          | Nachteile: 
 |  | 
        
          | Entwicklungsumgebung: 
 | 
 | 
        
          | WWW: | http://www.mozilla.org 
 | 
        
          | Dokumentation: 
 | Manuals, Tutorials, Mailing Listen z.B. www.xulplanet.com
 
 | 
        
          | Referenzprojekte: 
 | Mozilla Firefox Browser 
 | 
        
          | Verbreitung: 
 | große Verbreitung, aber selten bei Softwareprojekten
          eingesetzt 
 | 
      
    
    
    
    
    Microsofts Antwort
    Natürlich hat auch Microsoft die Zeichen der Zeit erkannt und
    inzwischen einen eigenen Ansatz präsentiert. Unter dem Name
    .NET wurde eine Plattform entwickelt, die nicht zuletzt den
    Abwanderungsprozess von Software-Entwicklern zur
    Konkurrenzplattform Java eindämmen soll. Bei näherer
    Betrachtung finden sich auch tatsächlich viele Parallelen
    zwischen den beiden Konkurrenten, auch wenn diese durch
    unterschiedliche Namensgebung verschleiert werden. So heißt
    beispielsweise das Gegenstück zu Javas 'Bytecode' bei
    Microsofts C# 'Intermediate Language' (MSIL). 
    
    Was ist .NET ?
    .NET ist eine proprietäre Microsoft Technologie auf der alle
    weiteren Microsoft Produkte basieren sollen. Die Unterstützung
    der bisher favorisierten MFC Bibliothek für Visual C++ wurde im
    Zuge der .NET Einführung eingestellt. .NET soll die Entwicklung
    von Netzwerk- und Internet-Anwendung vereinfachen und hat viele
    Ideen von Java übernommen. Es unterstützt objektorientierte
    Programmierung und wird mit einer einzigen Klassenbibliothek
    geliefert, die von verschiedenen Programmiersprachen (C#,
    VB.NET) genutzt werden kann. Das bedeutet dass aus dem
    Programmcode die 'Intermediate Language' erzeugt wird, die über
    das .NET-Framework auf die Zielhardware zugreift (vgl. Java
    Sourcecode -> Java Bytecode -> virtuelle Maschine ->
    physikalische Hardware). 
    
    Zukünftige Windows Versionen werden mit dem .NET Framework
    ausgeliefert.
    
    Was ist Visual Sudio .NET ?
    Visual Studio .NET ist eine Programmierumgebung, die das
    Entwickeln von .NET-Software vereinfachen soll, es ist aber
    nicht zwingend erforderlich. 
    
    Unterschiede zwischen Visual Basic (VB) und VB.NET
    Obwohl VB.NET aus Kompatibilitätsgründen viele alte VB
    Funktionen unterstützt und die Sprach-Syntax beibehalten wurde,
    ist VB.NET eine komplett neue Programmiersprache. 
    
    Welche Programmiersprache eignet sich am besten?
    Da sowohl der VB.NET Quellcode als auch der C# Quellcode in die
    MSIL übersetzt werden, macht die verwendete Programmiersprache
    keinen Unterschied. So gibt es zum Beispiel auch keine
    Geschwindigkeitsunterschiede zwischen C# Code und VB.NET Code.
    Da der C# Compiler aber speziell für das .NET Framework
    entwickelt wurde, dürfte er das geeignetere Tool sein.
    
    .NET und Linux
    Trotz des plattformunabhängigen Ansatzes wird Microsoft wohl
    keine Linux .NET-Variante entwickeln, weshalb sich ein
    Entwicklerteam um Miguel de Icaza (Ximian: Evolution) dieser
    Aufgabe angenommen hat. Das Open Source Paket namens Mono ist
    mittlerweile in der Version 1.0 verfügbar. 
    
    Übersicht über .NET
    
      
        
          | Name: 
 | Microsoft .NET-Framework 
 | 
        
          | Version: 
 | 1.1 
 | 
        
          | Betriebssysteme: 
 | Windows, Linux 
 | 
        
          | Programmiersprache: 
 | C#, Windows: VB.NET 
 | 
        
          | Lizenz: 
 | proprietäre Lizenz 
 | 
        
          | Vorteile: | 
              zukünftiger Bestandteil von Windows
 | 
        
          | Nachteile: 
 | 
              proprietäre Softwarekeine Linux .NET Version verfügbar
komplett neue API
 | 
        
          | Entwicklungsumgebung: 
 | Visual Studio .NET 
 | 
        
          | WWW: | 
 | 
        
          | Dokumentation: 
 | 
 | 
        
          | Referenzprojekte: 
 | 
 | 
        
          | Verbreitung: 
 | bisher nur geringe Verbreitung 
 | 
      
    
    
    
    
    Zusammenfassung
    Vor der abschließenden Beurteilung wird noch einmal auf die
    gestellte Aufgabe verwiesen: Es geht um die Entwicklung eines
    Front-Ends, das über Netzwerk-Kommunikation mit angeschlossener
    Hardware kommuniziert. Dabei soll der Software-Quellcode auf
    den Plattformen Linux und Win32 übersetzbar sein. Die Anwendung
    darf sich nicht von anderer Software auf dem System
    unterscheiden. Durch diese Aufgabenstellung wird das Bild auf
    die getesteten Pakete verfälscht und kann nicht als allgemeine
    Aussage gesehen werden.
    
    Bestes Beispiel hierfür ist das FLTK Toolkit. Hier bekommt man
    in einem sehr kleinen Paket ein leistungsfähiges System. Die
    Stärken liegen in geringer Codegröße, guter Grafikanbindung und
    guter Portierbarkeit. Diese Eigenschaften machen das Toolkit
    für Projekte im Embedded- und Grafikbereich interessant. Für
    die Front-End Entwicklung spielt aber eher die Anzahl der
    Klassen, das Handling und das Aussehen der erzeugten
    Anwendungen eine Rolle. Somit ist FLTK für diese Aufgabe eher
    weniger geeignet.
    
    Eine herbe Enttäuschung für Software-Entwickler dürfte das GTK+
    Projekt unter Windows sein. Hier sollte die Linux Community
    deutlich mehr Einsatz zeigen. Mit Warnungen auf der Web-Seite
    gewinnt man jedenfalls kein Vertrauen. Dies ist um mehr schade,
    als dass das GTK+ Paket als reines Linux Paket sehr gelungen
    wirkt. Das Potential ist sehr groß, die Umsetzung auf die
    Windows Plattform läßt aber zu wünschen übrig.
    
    Der Einsatz der Exoten Smalltalk und Mozilla bleibt
    Geschmacksache. Eine Firma, die mit selbstentwickelter Hardware
    Geld verdient, wird wenig Sinn für philosophische Ansätze
    haben. Auch wenn Smalltalk die bessere objektorientierte
    Programmiersprache ist und wenn Mozilla-XUL-Programmierung den
    sowieso vorhandenen Browser noch sinnvoller erscheinen läßt, so
    sind diese Pakete doch keine Mainstream Produkte zur
    Software-Entwicklung. 
    
    Kylix fällt bei dieser Betrachtung ebenso wie GTK+ für Win32
    eher negativ auf. Von dem einstigen Glanz des Urprodukts Turbo
    Pascal ist nur wenig geblieben. Mit diesem Produkt präsentierte
    Borland in den 80er Jahren eine mächtige IDE die sowohl auf
    Home-Computern wie auch auf den frühen PCs lief. Es war bekannt
    für seinen günstigen Preis und seinen schnellen Code. In der
    Zwischenzeit hat sich viel geändert. Aus Borland wurde Inprise
    und dann wieder Borland. Aus Turbo Pascal wurde erst Object
    Pascal, dann Delphi und schließlich Kylix (natürlich mit
    Erweiterungen bzw. Veränderungen). Zumindest für neue Projekte
    dürfte ein Einsatz heute nur noch wenig Sinn machen.
    
    Microsoft zeigt in diesem Umfeld, dass es die Zeichen der Zeit
    erkannt hat. Historisch betrachtet hat der Konzern zunächst
    versucht, den Java Standard mit Visual J++ zu durchsetzen.
    Neben den Java Standardbefehlen wurden Win32 API Zugriffe und
    selbst Zugriffe auf die Windows Registry zugelassen (Was der
    Sprachphilosphie völlig widerspricht). Außerdem wurden
    automatisch Win32 Executables erzeugt. Nach gerichtlichen
    Auseinandersetzungen mit Sun mußte daraufhin bei jedem
    Übersetzungsvorgang ein Warnhinweis angezeigt werden, dass die
    erzeugten Applikationen wahrscheinlich nicht auf anderen
    Betriebssystemen laufen werden. Das Ende der Geschichte war das
    Einstellen des Java Engagements von Microsoft. Stattdessen
    wurde eine völlig neue Strategie entwickelt. Mit .NET und #C
    wurde ein komplett neuer Standard entwickelt. Die Kombination
    Windows, .NET und C# sind sicherlich ein gut zusammenpassendes
    Paket, aber das muss man Microsoft auch für die ausgediente
    Kombination Windows mit Visual C++ und MFC Klassenbibliothek
    zugestehen. Der Nachteil dabei ist, dass man bedingungslos
    einem Anbieter ausgeliefert ist, der "seinen" Standard (hier:
    Windows) durchsetzen möchte. Mit an Sicherheit grenzender
    Wahrscheinlichkeit wird Microsoft in absehbarer Zeit keine
    Umsetzungen von .NET auf andere Betriebssysteme planen. Die
    freie Umsetzung Mono muss ihre Praxistauglichkeit erst noch
    beweisen. Hier kann zu gegenwärtigen Zeitpunkt noch kein
    Resumee gezogen werden, auch wenn schon erste Achtungserfolge
    erzielt wurden.
    
    Ohne Einschränkung empfehlenswert sind somit die Pakete Qt,
    wxWindows und Java. Die Wahl fällt hier schwer, da alle 3
    Pakete zum Erzeugen komplexer Front-End Software taugen. Je
    nach Gewichtung der Punkte Support, Kosten,
    Einsatzbereitschaft, Programmier-Philosophie, usw. dürften sich
    hier verschiedene Meinungen bilden. Die Unterschiede liegen
    eher im Detail, so verbietet die Java Philosophie eigentlich
    direkte Hardware Zugriffe. Dafür kann es wieder bei anderen
    Aspekten punkten. Rein technisch gesehen können diese 3
    Konkurrenten die gestellte Aufgabe problemlos meistern.
    
    Somit bleibt nur ein subjektives Ergebnis des Autors: Als Open
    Source Fan wird man bei der gestellten Aufgabe wohl am ehesten
    zu wxWindows tendieren. Neben einem stimmigen Konzept und guter
    Tool Unterstützung sind ebenfalls ausreichend Dokumentation
    vorhanden.