Über unsMediaKontaktImpressum
Olena Bochkor & Dr. Veikko Krypczyk 19. November 2019

Linux auf dem Desktop – Die Pinguine an Bord holen

Nutzer arbeiten zunehmend auf unterschiedlichsten Geräten und Plattformen. Für die Softwareentwicklung ist es eine besondere Herausforderung, alle relevanten Systeme zu adressieren. Insbesondere die grafische Benutzeroberfläche zu realisieren, ist eine größere Hürde, denn in diesem Punkt unterscheiden sich die Systeme am meisten.

Im Desktop-Bereich gehören neben Windows, macOS auch Linux-Distributionen dazu.

Zwar wird der Desktop-Bereich weiterhin durch die Versionen von Microsoft Windows dominiert. Auf den weiteren Plätzen folgen macOS (Apple) und die vielfältigen Linux-Distributionen. Als Hersteller von Software sollte man nach Möglichkeit alle relevanten Systeme sowohl auf dem Desktop als auch für die mobilen Endgeräte unterstützen. Damit hat der Nutzer die freie Wahl und kann auf seinen Systemen ohne Einschränkungen arbeiten. Unternehmen fällt es auf diese Weise auch leichter, eine neue Applikation in die bestehende Softwarelandschaft zu integrieren.

Eine besondere Herausforderung besteht darin, die grafische Benutzeroberfläche umzusetzen. In diesem Punkt unterscheiden sich die Systeme am meisten und jeder Hersteller eines Betriebssystems sieht eine andere Programmierschnittstelle (API) vor. Hinzu kommt der Umstand, dass sich auf Seiten der Hardware sehr unterschiedliche Voraussetzungen bieten. Die Bildschirmgrößen der zu unterstützenden Geräte und die Auflösungen sind meist sehr heterogen. Aus Sicht der Programmentwicklung ist es daher effizient, wenn man ein universelles Framework für die Benutzerschnittstelle einsetzen kann, welches für die notwendige Abstraktion der Hardware und Systemsoftware sorgt und für die Entwicklung einer Applikation eine einheitliche Schnittstelle bietet.

Es gibt eine Reihe solcher Frameworks, welche genau dieses Ziel der Systemabstraktion verfolgen. Ein bekanntes Framework auf Ebene der Systemhardware ist zum Beispiel OpenGL. Es handelt sich um eine Spezifikation in Form einer plattform- und programmiersprachenübergreifenden Programmierschnittstelle (API) zur Entwicklung von 2D- und 3D-Grafikanwendungen. Der OpenGL-Standard beschreibt etwa 250 Befehle, die die Darstellung komplexer 3D-Szenen in Echtzeit erlauben. Die Implementierung des OpenGL-API erfolgt in der Regel durch Systembibliotheken, auf einigen Betriebssystemen auch als Teil der Grafikkarten-Treiber, was dann wiederum sehr performant ist.

Ebenfalls auf einer Vielzahl von Plattformen können Java-Programme ausgeführt werden. Der Compiler erzeugt den so genannten Zwischencode (Java-Bytecode), welcher später in der jeweiligen virtuellen Maschine (VM) auf dem Zielbetriebssystem ausgeführt wird. Java-Programme laufen nicht nativ auf dem Rechner, sondern sie werden stets in einer Art "Sandbox" ausgeführt. Diese Sandbox oder auch Java-VM genannt, kümmert sich um die plattformspezifische Umsetzung. Auf Ebene der grafischen Benutzeroberfläche kommt dann zum Beispiel JavaFXzum Einsatz (s. Abb. 1 [1]).

Ebenfalls ein leistungsfähiges Framework, um moderne Benutzeroberflächen zu erstellen, ist FireMonkey. Ein sehr wichtiges Leistungsmerkmal ist es, dass man damit native Anwendungen erstellt. Diese überzeugen hinsichtlich der Performance und der Systemintegration. FireMonkey unterstützt ursprünglich direkt die Systeme Windows 32- und 64-Bit, macOS 64-Bit, iOS- 32- und 64-Bit und Android. Mit dem Zusatz FMXLinux kann man nun auch die Applikationen für eine große Auswahl auf Linux-Distributionen zur Verfügung stellen [2]. Die Architektur einer auf FireMonkey basierenden Anwendung zeigt Abb. 2 [3].

FireMonkey im Überblick

FireMonkey bietet u. a. die folgenden Funktionen [3]:

  • plattformübergreifende Abstraktionsschicht für Betriebssystemfunktionen, wie Fenster, Menüs und Dialogfelder,
  • die Möglichkeit, 2D- und 3D-Grafiken darzustellen,
  • die Darstellung beruht auf einer Vektor-Engine, d. h. es sind verlustfreie Skalierungen und die korrekte Anzeige auf unterschiedlichen Geräten und Bildschirmen möglich,
  • Anzeige von Farbübergängen,
  • grundlegende Formen für 2D-Grafiken mit einem integrierten Satz von Pinseln, Stiften, Geometrien und Transformationen,
  • Basisobjekte und Funktionen für Darstellungen in 3D,
  • Lese- und Schreibunterstützung für die Formate JPEG, PNG, TIFF und GIF,
  • im Hintergrund-Thread berechnete Animationen mit minimaler CPU-Nutzung und automatischer Bildfrequenzkorrektur,
  • flexible Layouts für relative Positionierung der Oberflächenelemente und
  • ein umfassender und vollständiger Designer, welcher sich nahtlos in die integrierte Entwicklungsumgebung RAD Studio einfügt.

Damit stehen alle wichtigen Funktionen bereit, um Applikationen mit grafischer Benutzeroberfläche zu erstellen, welche auf den unterschiedlichsten Geräten und Systemen ausgeführt werden können. Ein besonderes Feature ist der Designer, welcher das Erstellen der Oberfläche zu 100 Prozent in einem visuellen Prozess erlaubt.

Applikationen mit grafischer Benutzeroberfläche müssen auf die jeweiligen Zielsysteme ausgerichtet sein. Desktop-Rechner und Notebooks verfügen über größere Bildschirme und weisen teilweise eine sehr hohe Auflösung auf. Sehr oft ist eine leistungsfähige Grafikkarte mit eigenem Prozessor und Speicher vorhanden. Mobile Geräte haben deutlich kleinere Bildschirme. Ebenso ist die Leistungsfähigkeit der mobilen Hardware nicht mit derjenigen von Desktop- und Notebook-PCs zu vergleichen. Unmittelbar über der Hardware sind die Systembibliotheken für eine Kommunikation zwischen den Anwendungen und der Grafikhardware angeordnet. Diese Systembibliotheken (zum Beispiel DirectX, OpenGL) werden direkt durch das jeweilige Betriebssystem bereitgestellt und stellen damit eine universelle Schnittstelle für die Programme dar. Die Systembibliotheken kapseln die unterschiedlichen Hardwarevoraussetzungen auf den Zielgeräten. Mit anderen Worten: Aus Sicht der Software spielt der konkrete Typ der Grafikkarte keine Rolle, es bietet sich eine genormte Programmierschnittstelle innerhalb eines Betriebssystems bzw. Geräteklasse.

Um jedoch geräte- und plattformübergreifende Applikationen zu erstellen ist eine weitere Abstraktionsschicht notwendig. Diese kommuniziert mit den jeweiligen Systembibliotheken und standardisiert die Programmierschnittstelle nun sogar über Geräte- und Plattformgrenzen hinweg. Eine solche Abstraktionsschicht stellt das hier vorgestellte Grafikframework FireMonkey dar. Es ermöglicht grafische Applikationen für die o. g. Betriebssysteme und Geräte. Es sorgt dafür, dass die Oberflächen nativ für das Zielsystem gerendert werden.

Benutzeroberfläche erstellen

FireMonkey-Applikationen erstellt man direkt mit Hilfe von Delphi oder C++-Builder. Beide Produkte werden zu RAD Studio zusammengefasst, in welchen man dann zwischen den Programmiersprachen Delphi bzw. C++ wählen kann [4]. Um eine Anwendung zu entwickeln, welche auf mehreren Plattformen läuft, müssen Sie die Projektvorlage Geräteübergreifende Anwendung aus dem Menü Datei | Neues Projekt auswählen (Abb. 3).

Mit Hilfe des Assistenten konfiguriert man den Applikationsrahmen und erstellt eine so genannte FireMonkey-Applikation. Danach gelangt man direkt zum grafischen Designer der Entwicklungsumgebung. Ein Hauptformular ist bereits angelegt und man kann direkt mit dem Design der Benutzeroberfläche starten. Dieses geschieht durch das Platzieren von visuellen Komponenten, welche man aus der Toolpalette auswählt und auf dem Formular platziert. Über den Eigenschafteneditor werden die Komponenten wunschgemäß konfiguriert. Ein Unterschied von RAD Studio gegenüber vielen grafischen Designern anderer integrierter Entwicklungsumgebungen besteht darin, dass die Arbeit im Designer abschließend ist. Es ist nicht vorgesehen und vor allem auch nicht notwendig, dass man den generierten Quellcode zur Definition des User Interfaces manuell nachbearbeitet. Geräteübergreifende Programme müssen mit unterschiedlichsten Auflösungen und Bildschirmgrößen umgehen können. FireMonkey setzt auf eine relative Positionierung der Komponenten mit Hilfe von Layout-Containern. Mit deren Hilfe werden die untergeordneten Komponenten beispielsweise in einem Raster (Grid-Layout) oder nacheinander in der Erstellungsreihenfolge erst von links nach rechts und dann von oben nach unten (Flow-Layout) angeordnet. Mit Hilfe dieser Container kann das User Interface so gestaltet werden, dass es sich an die gegebenen Platzverhältnisse automatisch anpasst.

Features

Erwähnenswert ist zum Beispiel das so genannte Live-Binding. Damit ist es möglich, Eigenschaften der visuellen Komponenten an Datenstrukturen oder Eigenschaften von anderen Komponenten zu binden. Auf diese Weise können Datenflüsse zum User Interface auf dem Wege der Konfiguration umgesetzt werden, d. h. es ist nicht notwendig, dafür Programmcode zu schreiben. Mit Hilfe des Bindungs-Experten kann man Quelle und Ziel einer solchen visuellen Datenverbindung schnell auswählen und entsprechend konfigurieren. Der Entwicklungsprozess wird vereinfacht, erheblich beschleunigt, für sich wiederholende Aufgaben standardisiert und weniger fehleranfällig. Es lohnt sich bei der Anbindung des User Interfaces an die Datenwelt zu prüfen, ob man viele Aufgaben mit Hilfe der Live-Bindings umsetzen kann. Der Quellcodeumfang schrumpft damit erheblich.

Die in der Palette standardmäßig verfügbaren Komponenten dürften in den meisten Fällen genügen, um die Anforderungen an Benutzeroberflächen umzusetzen. Trotzdem gibt es die Möglichkeit, externe zusätzliche Komponenten zu installieren und zu verwenden.

Über vordefinierte Styles kann man das Aussehen der Applikation auf der Basis von FireMonkey schnell an das gewünschte Design anpassen. Um multimediale Präsentationen und Anwendungen zu erstellen, besteht auch die Option der 3D-Darstellung. Dabei können 3D-Objekte in einem herkömmlichen 2D-Formular angezeigt werden oder alternativ können 3D-Formulare erstellt werden. Es stehen mehrere Arten von 3D-Objekten bereit. Das gesamte Spektrum der modernen 3D-Grafikprogrammierung wie Positionierung im Raum, Bestimmung der Kameraposition, Bildschirmprojektionen, Licht und zur Verfügung stehende Materialien kann eingesetzt werden. Ebenso können 3D-Modelle aus anderen Applikationen importiert und verarbeitet werden. Dabei kann der Entwickler oder der Designer auf die bekannte Arbeitsweise, d. h. den Einsatz von vordefinierten Komponenten, die Platzierung über den Designer und das Einstellen von Eigenschaften über den Editor zurückgreifen. Applikationen mit einer 3D-Benutzeroberfläche können damit ebenso effektiv und zeitsparend realisiert werden. Ein weiteres Feature ist die Möglichkeit, eine FMXLinux-Anwendung als HTML5-Web-Applikation im Browser auszuführen. Dazu nutzt man die WebKitGTK-Unterstützung.

Fazit

Unternehmen müssen immer öfter moderne Anwendungen erstellen, welche auf allen Zielgeräten und Plattformen ihrer Kunden laufen. Auf dem Desktop sind das neben diversen Versionen von Microsoft Windows, macOS auch die unterschiedlichsten Linux-Distributionen. Dabei sollten plattformspezifische Anpassungen am Quellcode nach Möglichkeit auf ein Minimum reduziert werden. Die Anwendungsentwicklung wird dadurch erheblich beschleunigt und die Time to Market reduziert. Das sind die besten Voraussetzungen, um Wettbewerbsvorteile zu generieren.

Nicht alle Komponenten zur Gestaltung des User Interfaces sind auf allen Zielplattformen verfügbar. Bereits während der Designzeit werden die unterstützten Plattformen angezeigt. Das endgültige Erstellen der lauffähigen Anwendungen nimmt man direkt auf dem Projektmappen-Explorer vor. Hier kann man die gewünschte Zielplattform aktivieren und das Projekt direkt dafür erstellen. Über die Bibliothek FMXLinux können nun auch auf Linux-Distributionen (Abb. 4) ausgeführt werden.

Autoren

Olena Bochkor

Der Arbeitsschwerpunkt von Olena Bochkor ist der Entwurf und das Design moderner und kundengerechter Benutzeroberflächen.
>> Weiterlesen

Dr. Veikko Krypczyk

Dr. Veikko Krypczyk arbeitet u. a. als Softwareentwickler, Fachautor und Dozent. Über die Firma LARInet gibt er darüber hinaus sein Wissen in Schulungen zu aktuellen Fragestellungen der IT weiter.
>> Weiterlesen
Das könnte Sie auch interessieren
botMessage_toctoc_comments_9210