In diesem Kapitel wird der Stand der Technik in Bezug auf die
Themenbereiche der Arbeit erläutert.

## Verwandte Arbeiten

Alex Rosca hat in seiner Masterarbeit (2024) die Integration von Wayland mit Flutter untersucht.
Dazu hat er einen Wayland-Compositor entwickelt, welcher Flutter zum rendern der UI-Elemente
und third-party Fenstern verwendet. Das besondere an dieser Arbeit ist, dass jede Anwendung
ein Widget ist, welches Teil von Flutter ist. Dies ermöglicht es, dass third-party Anwendungen
innerhalb von Flutter angezeigt werden können und in dem Desktop-System dadurch nicht nur
Flutter Anwendungen gestartet werden können. Der entwickelte Compositor ist dabei speziell
für ein Smartphone- oder Tablet-Interface entwickelt worden bei dem immer nur ein Fenster zur selben Zeit im Vordergrund
angezeigt wird. Die Arbeit zeigt, dass es möglich ist, Flutter so tief in ein Wayland-System zu integrieren
und damit ein vollständiges Desktop-System für Linux Smartphones und Tablets zu entwickeln [@roscaMasterThesisIntegrating2024].

Stefan Zindl hat in seiner Bachelorarbeit (2021) die Nutzung von Flutter für Windows Desktop Anwendungen untersucht.
Er hat dazu eine Gallerie Anwendung jeweils in Flutter und WPF (Windows Presentation Foundation) mit .NET 5
geschrieben und die Leistung und den Ressourcenverbrauch der beiden Anwendungen verglichen.
Dabei kam er zu dem Ergebnis, dass die Flutter Anwendung mit 55\% weniger Code geschrieben werden konnte und
die Anwendung 70 mal schneller starten konnte. Flutter hat dabei die meiste Zeit einen geringeren
RAM Verbrauch gehabt, jedoch ist die CPU Auslastung im Vergleich zu WPF höher gewesen. Er merkt
jedoch an, dass zum Zeitpunkt seiner Arbeit die Windows Unterstützung von Flutter noch in einem Beta Status war [@zindlFlutterWindowsDesktop2021].

<!-- Ferdi Armagan stellte in seiner Bachelorarbeit (2020) einen Vergleich zwischen Flutter und React Native an.
In der Arbeit sollte generell die Frage beantwortet werden wie tauglich Cross-Platform-Frameworks
für die Entwicklung von mobilen Anwendungen sind. -->

Wasilewski und Zabierowski führten eine Studie durch, in der sie Java, Flutter und
Kotlin/Native Technologien für sensordatengesteuerte Anwendungen miteinander verglichen.
Sie kamen zu dem Ergebnis, dass überall dort, wo es nicht darum ging Ressourcen zu sparen
und die Ausführungszeit im Vordergrund steht, Flutter die natürliche Wahl ist. In einigen
Tests hat sich Flutter auch hinsichtlich der CPU-Auslastung besser erwiesen, doch
besonders in Anwendungen, welche stark von Datenbankoperationen abhängen, ist laut den Autoren Flutter
nicht die beste Wahl. Als interessantes Ergebnis ist hier zu erwähnen, dass die Studie
zeigt wie Flutter mit der Dart Programmiersprache in vielen Fällen gut mit dem sehr
bekannten Java leistungstechnisch mithalten kann [@wasilewskiComparisonJavaFlutter2021].

## Nutzung von Flutter für eingebettetes Linux in der Industrie

### Toyota

Im Jahr 2021 wurde veröffentlicht, dass der japanische Autohersteller Toyota in
Zukunft Flutter für die Entwicklung
von Infotainmentsystemen in ihren Fahrzeugen nutzen wird. Daniel Hall, der Chief
Engineer von Toyota Motor Nordamerika, begründete die Entscheidung damit, dass
Flutter es Toyota ermöglicht, eine Benutzererfahrung zu schaffen, die sich anfühlt,
wie Kunden es von ihren Smartphones gewohnt sind und erwarten. Obwohl Toyota keine
Apps auf mehreren Plattformen veröffentlichen will, schätzt man die Vorteile wie
die schnellere Entwicklung durch den Hot-Reload durch den man die Iterationszyklen
verkürzen und sich schneller und öfter Feedback von Kunden einholen kann. Darüber
hinaus bietet die Flutter Rendering Engine laut Toyota eine gute Leistung in
Umgebungen mit begrenzten Ressourcen und Funktionen wie die AOT-Kompilierung
gewährleisten zudem die Konsistenz, die Toyota in fahrzeug-internen
Technologien anstrebt [@googleplayapps&gamesteamSeamlessMultiplatformApp2021].

Auf der CES 2024 konnte das von Toyota entwickelte System am Messestand von
Automotive Grade Linux (AGL) begutachtet werden. Von einer Berichterstattung
von Stephanie Van Ness ist zu entnehmen, dass für die Messe eine Demo App
für einen 8GB Raspberry Pi und einem 7 Zoll Touchscreen im Portrait-Modus
entwickelt wurde (siehe Abbildung \ref{toyota1}). Als Embedder wird standardmäßig Flutter-Auto
genutzt, welcher von Toyota entwickelt wurde. Als alternative Option gibt es einen Embedder von Sony.
Es wird auch erwähnt, dass die Demo App Riverpod als State
Management Lösung nutzt [@stephanievannessRacingCESExciting2024].

```{=latex}
\begin{figure}[h]
\centering
\caption{AGL Demo App von der CES 2024}
\label{toyota1}
\includegraphics[width=8cm]{./assets/toyota/agl.png}

<!-- prettier-ignore -->
\caption*{
```

Quelle: @stephanievannessRacingCESExciting2024

```{=latex}
}
\end{figure}
```

#### Flutter-Auto

Flutter-Auto ist ein Wayland Embedder für Flutter, welcher von Toyota entwickelt wird.
Der Embedder kann nur innerhalb einer Wayland Umgebung genutzt werden und hingegen
des Namens kann er auch für andere eingebettete Systeme jeglicher Art genutzt werden.
Besondere Merkmale des Embedders sind die Unterstützung von mehreren Bildschirmen, Integration Tests
und Accessibility Features.
Auf GitHub wird das Projekt noch "ivi-homescreen" genannt
und es ist unter der Apache 2.0 Lizenz veröffentlicht worden
[@ToyotaconnectedIvihomescreen2024].

### Sony

Neben Toyota arbeitet auch Sony als ein weiteres großes und bekanntes japanisches
Unternehmen an einer Lösung für die Nutzung von Flutter in eingebetteten Systemen.
Der Embedder von Sony basiert auf Flutter-Tizen, ein Projekt von Samsung,
welches es ermöglicht Flutter Anwendungen für Tizen OS zu entwickeln [@FluttertizenFluttertizen2024].
Tizen OS ist ein Linux basiertes Betriebssystem welches Samsung für verschiedene
eingebettete Systeme und Smart-TVs nutzt.

Hidenori Matsubayashi, der Hauptentwickler des Sony Embedders, hat auf der
Embedded Linux Conference Europe 2020 eine Präsentation gehalten, in der er
erklärt, weshalb Sony in seinem Research und Development Bereich die Nutzung
von Flutter für eingebettete Systeme erforscht. Er erwähnt, dass meistens
Qt oder web basierte Technologien für die Entwicklung von eingebetteten
Systemen genutzt werden (siehe Abbildung \ref{sony1}). Web basierte Technologien in
diesem Kontext bedeuten: HTML und JavaScript in einer Webview wie die des
Chromium Browsers. Matsubayashi erklärt, dass Webviews zwar einfach zu
entwickeln sind, jedoch nicht die beste Leistung bieten und es oft erschwert
ist Hardware direkt anzusprechen. Zu Qt erwähnt er nur die hohe Popularität
und die duale Lizenzierung.

```{=latex}
\begin{figure}[h]
\centering
\caption{Präsentations-Slide zu Beispielen für grafische Oberflächen von Sony}
\label{sony1}
\includegraphics[width=15cm]{./assets/pdf/sony1.pdf}

<!-- prettier-ignore -->
\caption*{
```

Quelle: @matsubayashiGraphicalUserInterface2020

```{=latex}
}
\end{figure}
```

Als Hauptgründe für die Nutzung von Flutter in eingebetteten Systemen nennt
Matsubayashi die einfache Entwicklung, die Cross-Plattform Unterstützung,
die native Kompilierung mit guter Leistung und die Popularität von Flutter
als Open Source Software. Außerdem erwähnt er, dass Flutter wenige
Abhängigkeiten hat und nur OpenGL/EGL benötigt, es ein Custom Embedder API-Layer gibt
welches es ermöglicht, Flutter auf spezifischen Plattformen auszuführen und
dass Flutter unter der freizügigen BSD-Lizenz lizenziert ist (siehe Abbildung \ref{sony2}).

```{=latex}
\begin{figure}[h]
\caption{Präsentations-Slide von Sony zu den Gründen für die Nutzung von Flutter in eingebetteten Systemen}
\label{sony2}
\begin{center}
\includegraphics[width=15cm]{./assets/pdf/sony2.pdf}
\end{center}
<!-- prettier-ignore -->
\caption*{
```

Quelle: @matsubayashiGraphicalUserInterface2020

```{=latex}
}
\end{figure}
```

<!-- \begin{figure}[h]
\caption{This is a figure.}
\begin{center}
\includegraphics[width=15cm]{./assets/pdf/sony3.pdf}
\end{center}
\end{figure} -->

### Flutter-Pi

Flutter-Pi ist ein Projekt welches in einer Zusammenarbeit von Texas Instruments
und KDAB enstanden ist [@krunalbhargavFAQAM625Flutter2023]. Der Hauptentwickler,
Hannes Winkler, hat das Projekt auf GitHub unter der MIT Lizenz veröffentlicht [@winklerArderaFlutterpi2024].
Die besondere Eigenschaft von Flutter-Pi ist, dass es ohne Wayland oder X11
funktioniert und somit auch auf Systemen ohne Display Server genutzt werden kann.
Es nutzt dafür den DRM (Direct Rendering Manager) und KMS (Kernel Mode Setting).
Flutter-Pi kommt auch mit einem eigenen Build Tool _flutterpi_tool_ und der Entwickler
hat ein spezielles _flutterpi_gstreamer_video_player_ Plugin entwickelt, welches
es ermöglicht, Videos mit GStreamer in der Flutter Anwendung abzuspielen. Gstreamer
ist ein Open Source Multimedia Framework mit dem hardwarebeschleunigt Videos
dekodiert und gerendert werden können [@GStreamerOpenSource].

\pagebreak
