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]

[Illustration]

ArticleBody:[The main part of the article]

Bei betriebssystemunabhängigen Bibliotheken unterscheidet man zwei Ansätze zum Darstellen von Steuerelementen in Dialogen:
  1. 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.
  2. 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:
Im konkreten Fall wird auf einen weiteren Punkt Wert gelegt, der jedoch nicht für alle Projekte zutreffen wird:
Stellt man die Bibliotheken in einem Schichtenmodell dar, ergibt sich folgendes Bild:

Layers here.


Programmiersprachen

Das erste Auswahlkriterium ist die Programmiersprache. Hier bieten sich bereits mehrere Möglichkeiten auf die im Anchluss konkret eingegangen wird:
  1. C/C++ Bibliotheken.
  2. Java
  3. Kylix
  4. Smalltalk
  5. 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 Screenshot here.
Windows XP Screenshot here.

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

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:

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

Java Development Kit (JDK)

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.

JHelloWorld

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

--> 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:
  • Lizenzkosten
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