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]
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. 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). 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.
--> Schaubild: Steuerung von Hardware über ein Netzwerk
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 Zielplattformen
beschränkt sich der Artikel auf Linux und Windows.
ArticleIllustration:[One image that will end up at the top of the
article]
ArticleBody:[The main part of the article]
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.
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.
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.
--> Beschreibung der Installation/Softwareentwicklung unter Windows;
Beschreibung des QtDesigner unter Linux
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:
|
Linux: GPL; Windows:
proprietäre Lizenz
|
Vorteile: |
- Basisbibliothek für den KDE Windows Manager unter
Linux
- Installationspakete in allen Standard-Distributionen
vorhanden (Installation sehr einfach)
- generische Controls unter Windows
- Mä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)
|
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 Browser
- Photoshop 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.
--> Beschreibung der Installation unter Linux und Windows.
Beschreibung der Software-Entwicklung.
--> Vergleich mit Qt
Linux (Quellcode hier) und Windows 2000 (Quellcode für Visual C++
hier) Screenshot.
Übersicht über wxWidgets
Name:
|
wxWidgets
|
Version:
|
2.4.2
|
Betriebssysteme:
|
Linux, Win32, embedded Devices
|
Programmiersprache:
|
C++
|
Lizenz:
|
|
Vorteile: |
- einfache Handhabung (viele Beispiele).
- sehr gute Dokumentation.
|
Nachteile:
|
|
Entwicklungsumgebung:
|
|
WWW: |
http://www.wxwidgets.org
|
Dokumentation:
|
Manuals, Tutorials, Mailing
Listen, Wiki
z.B. http://wiki.wxwidgets.org |
Referenzprojekte:
|
|
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
Linux
- Installationspakete in allen Standard-Distributionen
vorhanden (Installation sehr einfach)
- generische Controls unter Windows
- bewä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 Desktop
- GIMP
- Gnumeric
|
Verbreitung:
|
Linux: sehr große
Verbreitung, Windows: 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 (Linux) bzw. 3MB
(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.
--> Beschreibung der Windows Installation. Aufpoppen der DOS-Box ....
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 (Quellcode hier) und Windows 2000 (Quellcode für Visual C++
hier) Screenshot.
Übersicht über FLTK
Name:
|
Fast Light Tool Kit |
Version:
|
1.1.5rc2
|
Betriebssysteme:
|
Linux, Win32, MacOS
|
Programmiersprache:
|
C++
|
Lizenz:
|
LGPL
|
Vorteile: |
- sehr schlanke Bibliothek, unter Linux 2.3MB (.tar.gz)
bzw. 3MB unter Windows (.zip) inklusive Dokumentation und
Entwicklungsumgebung "fluid"
- gute OpenGL Unterstützung (wurde nicht untersucht)
- generische Controls unter Windows
|
Nachteile:
|
- Schwierig zu benutzen unter Win32 (Visual C++)
|
Entwicklungsumgebung:
|
z.B. fluid (GUI Builder)
|
WWW: |
http://www.fltk.org,
Download: http://freshmeat.net/projects/fltk/
|
Dokumentation:
|
Manuals, Tutorials, Mailing
Listen
z.B. http://
|
Referenzprojekte:
|
|
Verbreitung:
|
geringe Verbreitung; auch unter
Software-Entwicklern weitestgehend unbekannt
|
Weitere Möglichkeiten
Neben den angesprochenen Bibliotheken sollen der Vollständigkeit
halber noch weitere Projekte
genannt werden, auf die aber nicht weiter 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
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
--> TODO
Wundersprache oder kurzfristiger Hype?
--> Gegenstimmen ...
Java Screenshots im Java-, Motif- und
Windows Look & Feel (Quellcode hier)
Eclipse und SWT
-->
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.
|
|
|
Ü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)
|
Nachteile:
|
- proprietäre Sprache, alleinige Kontrolle durch SUN
- virtuelle Maschine der Zielplattform muss passen
- langsame Ausführungsgeschwindigkeit
|
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. Die am
weitesten verbreitete Variante ist Smalltalk-80 (Normierung von 1980).
--> Smalltalk Geschichte, Bytecode - Interpreter,
objektorientiert....
--> Squeak als Beispiel
Übersicht über Smalltalk
Name:
|
Smalltalk (z.B. Squeak)
|
Version:
|
3.6
|
Betriebssysteme:
|
Windows, Linux, Solaris,
MacOSX, Darwin
|
Programmiersprache:
|
Smalltalk
|
Lizenz:
|
Open Source
|
Vorteile: |
|
Nachteile:
|
|
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?
--> Beschreibung der Mozilla Umgebung, Geschichte, ...
--> XUL
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: |
|
Nachteile:
|
|
Entwicklungsumgebung:
|
|
WWW: |
http://www.mozilla.org
|
Dokumentation:
|
|
Referenzprojekte:
|
|
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 es 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.
--> Mono beschreiben
Normierung
--> ...
Linux und Windows 2000 Screenshot (Quellcode hier).
Übersicht über .NET
Name:
|
Microsoft .NET-Framework
|
Version:
|
|
Betriebssysteme:
|
Windows, Linux
|
Programmiersprache:
|
C#, Windows:
VB.NET
|
Lizenz:
|
proprietäre Lizenz
|
Vorteile: |
- zukünftiger Bestandteil von Windows
|
Nachteile:
|
- proprietäre Software
- keine 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.
Links
Abkürzungen
RAD
|
Rapid Application Development
|
GUI
|
|
API
|
|
|
|