\section{Technische Grundlagen} Die Wahl der Plattform hängt von zwei verschiedenen Faktoren ab. Zum Einen stellt sich die Frage, ob die Handymodelle die benötigte Hardware, wie zum Beispiel \textit{GPS} oder eine Kamera besitzen, zum Anderen ob Schnittstellen vorhanden sind, um das Programm für das System zu entwickeln. \newline Die Problematik der Plattformwahl aufgrund von vorhandener oder nicht vorhandener Hardware ist nicht allzu groß. Die meisten aktuellen Geräte haben mittlerweile eine ähnliche Ausstattung was Speicher und Prozessorleistung angeht. Auch erweiterte Features wie \textit{GPS} oder Lage\-sensoren sind in den meisten aktuellen Geräten vorhanden, oder werden in der nächsten Generation des jeweiligen Herstellers vorhanden sein.\newline Da die gegebenen Hardwareunterschiede minimal sind, findet die Auswahl aufgrund des Betriebs\-systemes statt. Bei geeigneter Wahl ist es möglich, die Software auf mehrere Betriebs\-systeme für Smartphones zu portieren und somit eine mehrfache Implementation zu vermeiden. Es wäre somit auch möglich, viele Nutzer zu erreichen und die Kommunikation zwischen einem Besitzer eines \textit{iPhones}, sowie dem Besitzer eines \textit{Palm Pre's} sicherzustellen.\newline Ein weiterer Punkt der zu einer Entscheidung beiträgt, ist die Frage, ob andere Programme und Bibliotheken auf den jeweiligen Systemen ausführbar sind. Es wird also ein \textit{Layer} benötigt, mit welchem immer die gleichen Programmbibliotheken genutzen werden können. Dabei sollte das zu\-grun\-de\-lie\-gen\-de System unabhängig von diesem \textit{Layer} sein. Es soll also damit vom zugrundeliegenden Betriebssystem abstrahiert werden. Ein entsprechender \textit{Layer} stellt der \textit{Portable Operating System Interface for Unix Layer (POSIX Layer)}\footnote{POSIX http://standards.ieee.org/regauth/posix/ [Online; letzter Aufruf 16.02.2010]} dar. Mit diesem \textit{Layer} stehen eine große Menge an aktuellen Bibliotheken aus der \textit{Open-Source} Gemeinde zur Verfügung. Diese haben den Vorteil, dass sie aktiv weiterentwickelt werden und auch ständig neue Bibliotheken hinzukommen. Anwendungen, die auf einem \textit{Linux}-System entwickelt wurden können somit ohne weiteres auf ein anderes, \textit{POSIX} kompatibles System portiert werden, ohne dass die ge\-nutz\-ten Bibliotheken ausgetauscht werden müssen.\newline Zusätzlich stellt sich auch die Frage der zu nutzenden Programmiersprache. Diese sollte von einer möglichst großen Menge an Betriebsystemen unterstützt werden. Somit ist es nicht nötig das Programm neu zu implementieren, falls es für eine neue Plattform portiert werden soll. \subsection{Betriebsysteme für mobile Geräte} Durch die Wahl eines Betriebsystemes wird schon indirekt eine Vorauswahl an nutzbaren Bibliotheken und Programmiersprachen getroffen. Im Folgenden werden fünf Betriebssysteme für mobile Plattformen vorgestellt und auf deren Portierungsmöglichkeiten eingegangen. \subsubsection{Windows Mobile} Das von Microsoft entwickelte \textit{Windows Mobile}\footnote{Windows Mobile http://www.microsoft.com/windowsmobile/de-de/default.mspx\newline[Online; letzter Aufruf 25.01.2010]} ist aktuell in der Version 6.5 verfügbar. Das gesamte Betriebssystem basiert auf der \textit{Windows Win32 API} und lässt Ähnlichkeiten zu den Desktop-Varianten der Windows-Familie erkennen. Es existiert ein \textit{Cross-Compiler} mit dem Namen \textit{CeGCC}\footnote{CeGCC http://cegcc.sourceforge.net/ [Online; letzter Aufruf 24.02.2010]}, mit welchem in \textit{C}/\textit{C++} geschriebene Programme für diese Plattform übersetzt und portiert werden können. \subsubsection{Android} Das von \textit{Google} entwickelte \textit{Android}\footnote{Android http://www.android.com/ [Online; letzter Aufruf 25.01.2010]} setzt auf einen \textit{Linux-Kernel} der Version 2.6 auf. Dieser \textit{Kernel} kümmert sich um die Prozess- und Speicherverwaltung, Kommunikation sowie um die Hardwareabstraktion. Auf diese Grundlage setzt eine virtuelle \textit{Java}-Maschine auf, in welcher \textit{Android} läuft.\newline Zum Implementieren von Anwendungen stellt \textit{Google} eigens ein \textit{SDK} bereit. Dieses greift aller\-dings nur auf \textit{Java}-Bibliotheken zurück, womit sich die Anzahl der Sprachen bei Nutzung des \textit{SDKs} im Moment auf diese Eine beschränkt. Des Weiteren bietet \textit{Google} ein \textit{NDK} an, mit dessen Hilfe es auch möglich ist Programme in \textit{C} oder \textit{C++} zu schreiben. \subsubsection{WebOS} \textit{WebOS}\footnote{WebOS http://palmwebos.org/ [Online; letzter Aufruf 25.01.2010]} wurde von \textit{Palm} als Nachfolger von \textit{PalmOS}\footnote{PalmOS http://www.palm.com/ [Online; letzter Aufruf 25.01.2010]} entwickelt und ist momentan nur auf zwei Geräten zu finden: auf dem \textit{Palm Pre} und dem \textit{Palm Pixi}.\newline Unter der Benutzeroberfläche von \textit{WebOS} arbeitet ein \textit{Linux-Kernel} in der Version 2.6. Somit ist es möglich, wenn man Zugriff auf das zugrundeliegende System hat, \textit{POSIX}-kompatible Software unter \textit{WebOS} zu betreiben. Für dieses Betriebssystem existiert ein \textit{SDK} welches \textit{HTML5}, \textit{CSS} und \textit{Java} unterstütz. Ein weiteres \textit{SDK}, welches im März 2010 veröffentlicht wird, soll die \textit{C} und \textit{C++} Entwicklung ermöglichen. \subsubsection{iPhone OS} Bei dem Betriebssystem \textit{iPhoneOS}\footnote{iPhoneOS http://www.apple.com/de/iphone/ [Online; letzter Aufruf 03.02.2010]} handelt es sich um eine abgeänderte und angepasste Version von \textit{MacOS}. Somit basiert auch der Kernel von \textit{iPhoneOS} sowohl auf Teilen eines \textit{BSD}-\footnote{BSD https://www.bsdwiki.de/ [Online; letzter Aufruf 24.02.2010]} sowie \textit{Mach}-Kernels\footnote{Mach http://www.cs.cmu.edu/afs/cs/project/mach/public/www/mach.html\newline[Online; letzter Aufruf 24.02.2010]}. Dieses Betriebssystem wurde eigens für das \textit{iPhone} entwickelt. Auch für dieses System existiert ein \textit{SDK}, welches allerdings nur die Sprache \textit{Objective-C} unterstützt. Der größte Kritikpunkt an diesem System ist das Fehlen von \textit{Multitasking}-Unterstützung. Somit ist es nicht möglich zwei Anwendungen parallel auszuführen, was gerade die geplante Anwendung stark einschränkt, da hier weitere Dienste im Hintergrund aktiv sein sollten. \subsubsection{Symbian OS} \textit{SymbianOS}\footnote{SymbianOS http://www.symbian.org/ [Online; letzter Aufruf 03.02.2010]} ist ein Betriebssystem, welches vorzugsweise auf Geräten der Firma \textit{Nokia} zum Einsatz kommt. Es existiert ein \textit{SDK}, was neben \textit{C}/\textit{C++} auch noch weitere Sprachen wie zum Beispiel \textit{Python} oder \textit{Java} unterstützt. Mit dem \textit{SDK} wird auch ein \textit{Cross-Compiler} angeboten, welcher es ermöglicht Programme direkt zu portieren. Des Weiteren besitzt \textit{Symian OS} einen \textit{POSIX Layer}. \subsubsection{Zielplattform} \textit{iPhoneOS} wurde aufgrund seiner mangelnden \textit{Multitasking}-Unterstützung ausgeschlossen. Diese ist für den geplanten Dienst wichtig, da bei diesem Prozesse im Hintergund notwendig sind und dies somit auf einem solchen System nicht realisierbar wäre. \textit{Android} hat zwar eine \textit{C} Unterstützung, allerdings sind nur die mit dem \textit{NDK} verfügbaren Bibliotheken zum momentanen Zeitpunkt stabil. Dies schränkt die Entwicklung stark ein und ist für das geplante somit Programm nicht geeignet.\newline Unter Nutzung des \textit{CeGCC's} wird das Programm für \textit{Windows Mobile} portiert werden. Aufgrund der Implementierung in \textit{C} ist es möglich, den Quellcode für \textit{WebOS} und \textit{SymbianOS} zu übersetzen und im Anschluss auszuführen. \subsection{Softwaregrundlagen} Anhand der gewählten Zielplattform und Programmiersprache muss nun eine Möglichkeit gefunden werden, das Programm sowohl für die jeweiligen Plattformen zu übersetzen sowie die graphischen Elemente auf den Plattformen darzustellen. \subsubsection{CeGCC} Mit dem \textit{CeGCC} ist es möglich \textit{C} Programmcode, der unter \textit{Linux} entwickelt wurde, nach \textit{Windows Mobile} zu portieren. Bei \textit{CeGCC} handelt es sich um ein \textit{Open-Source} Projekt, basierend auf dem \textit{GCC}. Mit diesem Tool können in einer \textit{Linux} Umgebung die für \textit{Windows Mobile} benötigten Bibliotheken und ausführbaren Dateien erstellt werden.\newline Der \textit{CeGCC} kann in zwei unterschiedlichen Versionen genutzt werden. Die erste Version, der \textit{arm-wince-mingw32ce}, bietet eine Menge an \textit{Tools}, mit welchen native \textit{Windows Mobile} Ap\-plikationen erstellt werden können. Hierzu wird eine Portierung der \textit{GNU}\footnote{GNU http://www.gnu.org/ [Online; letzter Aufruf 03.02.2010]} Enwicklungswerk\-zeu\-ge aus dem \textit{MinGW}\footnote{MinGW http://mingw.org/ [Online; letzter Aufruf 03.02.2010]} Projekt genutzt. Diese \textit{Tools} übersetzen und verlinken Quellcode, um selbigen unter \textit{Windows Mobile} ausführbar zu machen. Die andere Version stellt die Nutzung des \textit{arm-cegcc} dar, mit welchem \textit{POSIX} kompatibler Quellcode nach \textit{Windows Mobile} portiert werden kann. %verfeinern %# arm-mingw32ce : toolset to build native Windows CE applications %# arm-cegcc : toolset to port unix source to Windows CE % Remember that arm-wince-cegcc implements a unix-like layer on top of Windows CE, and that arm-wince-mingw32ce implements the %native CE API. %The unix-like layer is only provided in the arm-wince-cegcc tools, the arm-wince-mingw32ce deliberately lack this as they attempt %to provide a development environment that is as close to Windows CE as possible. % Part of the code in this directory is required to be able to create executables that start a program in a consistent way (e.g. % crt0.o, the startup code in an executable), but another part of this code provides a unix like layer with functionalities absent % in Windows CE. \subsubsection{Enlightenment} Neben einem \textit{Cross-Compiler} wird noch ein geeignetes Frontend benötigt, um das Programm auch für den Benutzer ansprechend darzustellen und eine einfache Bedienbarkeit zu garantieren. Dieses Frontend sollte auch in \textit{C} oder \textit{C++} geschrieben sein, um auch hier die Portierbarkeit für die gewünschten Plattformen zu erhalten. Genutzt wird das freie, seit 1997 existierende, \textit{Enlightenment}\footnote{Elementray http://www.enlightenment.org/ [Online; letzter Aufruf 20.01.2010]} Projekt. Dieses Softwarepaket unterstützt alle gängigen Plattformen wie \textit{Windows, Linux, BSD} und \textit{MacOS}. Es beinhaltet einen eigenen \textit{Window-Manager} names \mbox{\textit{Elementary}}. \textit{Elementary} bietet ein umfangreiches Paket an graphischen Elementen, die genutzt und frei angeordnet werden können. \begin{figure}[h] \centering \includegraphics[width=2.2cm]{Bilder/elm-app-01_2} \includegraphics[width=2.7cm]{Bilder/elm-app-02_2} \caption{Beispiele verschiedener \textit{Elementary} Icons} \label{efl} \end{figure} \textit{Elementary} setzt auf die \textit{Enlightenment Foundation Libraries (EFL)} auf. Diese Bibliotheken werden zum Teil von Enlightenment benötigt, andere können für optionale Funktionalitäten installiert werden. Für die Darstellung auf mobilen Geräten sind die Pakete \textit{Evil, Eina, Eet, Embryo, Evas, Ecore, Edje} und \textit{Elementary} nötig. \begin{figure}[h] \centering \includegraphics[width=2.7cm]{Bilder/efl} \caption{Aufbau von \textit{Enlightenment}} \label{enl} \end{figure} Bei \textit{Ecore} handelt es sich um eine Bibliothek, welche das Serialisieren von mehreren Programmteilen ermöglicht und für den Betrieb auf mobilen Geräten optimiert wurde. \textit{Edje} ist eine grafische Design und Layout Bibliothek, welche mit einer internen \textit{state machine} und einem Zustandsgraphen speichert, welche Elemente an welchem Ort, in welcher Farbe und wie sichtbar sind. Die Bibliothek \textit{Evas} ist eine \textit{canvas}-Bibliothek, welche sich um Effekte wie Alpha-Blending oder das Skalieren von Bildern kümmert. \textit{Eina} stellt verschiedene, optimierte Datentypen und \textit{Tools} bereit.\newline Im Anhang 1 sind genaue Anweisungen zu finden, mit deren Hilfe es möglich ist, \textit{Elementary} für \textit{Windows Mobile} zu portieren.