<!--
Challenges with Direct Statistics

No Centralized Reporting:
Unlike mobile OS usage (Android vs. iOS), there's no unified app store
or market survey specifically for embedded Linux UIs. Projects range
from hobbyist work to closed-source industrial systems, making data
collection highly fragmented.

Embedded Development Diversity:
The range of devices running embedded Linux is immense, varying greatly
in purpose and visibility. This creates a large sample space that’s
hard to track systematically.

Subjectivity in Definition:
What constitutes "most used" gets tricky. Is it by volume of devices
regardless of scale, or by developer preferences in recent projects?
-->

# Grundlagen

## Eingebettete Systeme

Traditionelle Ansichten über Computer beschreiben sie oft als
eigenständige Geräte wie Desktops oder Laptops. Im Gegensatz dazu
skizzierte Mark Weiser in seinem einflussreichen Paper
"The Computer of the 21st Century" 1999 eine Vision des "Ubiquitous Computing". [@weiserComputer21stCentury1999]
Diese Vision beschreibt eine Welt, in der nahtlos integrierte Geräte in unserem
Leben "verschwinden". Eingebettete Systeme verkörpern heute diese Philosophie.
Sie sind keine Allzweckcomputer, sondern spezialisierte Computer, die
in Geräten und Systemen eingebettet sind. Sie sind in der Regel auf eine
spezielle Aufgabe oder Funktion zugeschnitten und sind oft in
Geräten des täglichen Lebens zu finden.

Beispiele für eingebettete Systeme finden sich in allen Lebensbereichen:

- **Automobilindustrie**: Infotainment System
- **Industrie**: Automatisierungssysteme, Steuerung von Maschinen
- **Medizintechnik**: Medizinische Geräte, Diagnosegeräte
- **Haushaltsgeräte**: Waschmaschinen, Kühlschränke
- **Consumer Electronics**: Smartphones, Smartwatches

Eingebettete Systeme sind oft auf Echtzeitfähigkeit, Energieeffizienz
und Zuverlässigkeit ausgelegt. Sie sind in der Regel nicht so leistungsfähig
wie Desktop- oder Server-Computer, aber sie sind in der Lage, spezialisierte
Aufgaben zu erfüllen.

Auch Experten fällt eine klare Definition von eingebetteten Systemen
in der heutigen Zeit nicht leicht, wie auch Jack Ganssle, ein
Experte für eingebettete Systeme mit über 30 Jahre Berufserfahrung,
in einem Blog Beitrag schreibt. [@ganssleWhatEmbedded2008]
So konnte man laut Ganssle früher Systeme, die mit einem Mikrocontroller oder
Mikroprozessor ausgestattet sind und in einem Gerät eingebettet sind,
klar als eingebettete Systeme bezeichnen.
Doch heutzutage werden oft auch Systeme, die mit einem vollwertigen
Betriebssystem ausgestattet sind, als eingebettete Systeme bezeichnet.
Dazu gehört das Linux Betriebssystem, welches in vielen eingebetteten
Systemen zum Einsatz kommt und auch Windows ist laut Ganssle in
eingebetteten Systemen anzutreffen. Als weiteres Beispiel dazu
nennt er das Handy, welches, als es nur zum telefonieren genutzt wurde,
klar als eingebettetes System bezeichnet werden konnte, doch heutzutage
ist es ein vollwertiger Computer, der auch als solcher
für eine Vielzahl von anderen Funktionen genutzt werden kann.

In weiterer Literatur zu eingebetteten Systemen finden sich
die folgenden Definitionen:

> "An embedded system is a microprocessor based system that is
> built to control a function or a range of functions." [@heathEmbeddedSystemsDesign2002]

> "Embedded systems are information processing systems embedded into enclosing products."
> [@marwedelEmbeddedSystemDesign2021]

Auch aus diesen Definitionen geht hervor, dass die Definition von eingebetteten
Systemen nicht eindeutig ist. Da es sowohl eine Funktion oder eine Reihe von
Funktionen steuern kann, als auch speziell ein System ist, das in ein Produkt
eingebettet ist.

Ein eingebettetes System ist also meistens ein Computersystem, welches spezialisiert
ist auf eine bestimmte Funktion oder Aufgabe. In der heutigen Zeit heißt das,
dass es sich dabei oft um Systeme handelt, welche eigentlich vollwertige Computer sind und
daher viele Funktionen ausführen könnten, doch der Hersteller oder Entwickler das
System auf gezielte Funktionen beschränkt. So würde ein Bankautomat mit eingebetteten Linux
nur auf die speziellen Aufgaben beschränkt werden, welche ein Bankautomat zu erfüllen hat, obwohl er
eigentlich ein vollwertiger Computer sein könnte und viele weitere Funktionen ausführen könnte.
Besonders bei eingebetteten Systemen mit Touchscreens könnte eine schier unendliche Anzahl von
Funktionen auf dem Display angezeigt und angesteuert werden. Daher kommt die Definition
eines eingebetteten Systems auch auf die Definition des Systems vom Hersteller oder Entwickler an.

<!-- Ein weiterer Name für eingebettete Systeme is "Cyber-Physical Systems" (CPS).

Mit der zunehmenden Verbreitung von eingebetteten Systemen in einer
Vielzahl von Geräten und der steigenden Netzwerkkonnektivität verschmelzen
rechnerische und physikalische Prozesse immer enger miteinander. Im Jahr
2006 prägte Helen Gill von der National Science Foundation den Begriff
"Cyber-Physical Systems" (CPS), um diesen Paradigmenwechsel zu beschreiben. -->

## Linux

Linux ist die Bezeichnung für ein freies und quelloffenes Betriebssystem,
das auf dem Linux-Kernel und dem GNU-Betriebssystem basiert. Hinter der
Bezeichnung GNU steht das GNU-Projekt, das 1983 von Richard Stallman
ins Leben gerufen wurde. Das GNU-Projekt hat das Ziel, ein vollständig
freies Betriebssystem zu entwickeln, das auf freier Software basiert.
Im allgemeinen Sprachgebrauch wird Linux oft als Bezeichnung für das
gesamte Betriebssystem genutzt, obwohl es sich eigentlich um das
Betriebssystem GNU/Linux handelt. Richard Stallman, der Gründer des
GNU-Projekts und der Free Software Foundation, erläutert in einem
Blog-Beitrag, dass es wichtig wäre, GNU zu erwähnen, da es viele
der Kernkomponenten des Betriebssystems zusammen mit dem Linux-Kernel
bildet und dass die Bezeichnung GNU/Linux diesen wichtigen Beitrag
anerkennt. Zudem würde es dabei helfen, die Idee des GNU-Projekts
und der Free Software Foundation zu verbreiten [@richardstallmanWhyGNULinux].

In der Arbeit wird die Bezeichnung "Linux" für das Betriebssystem
verwendet, da es sich um die allgemein gebräuchliche Bezeichnung
handelt und die Bezeichnung "GNU/Linux" in der Literatur und im
allgemeinen Sprachgebrauch wenig verbreitet ist. Besonders im
eingebetteten Bereich wird es allgemein als "Eingebettetes Linux"
bezeichnet und fast nie als "Eingebettetes GNU/Linux".

Linux gehört zu den weltweit am weitesten verbreiteten Betriebssystemen
und zählt zur Gruppe von "unixoide" oder unix-ähnlichen Betriebssystemen,
da es Konzepte des 1969 von Bell Laboratories entwickelten Betriebssystems
Unix aufgreift. Nutzer von Linux verwendet oft eine sogenannte "Distribution" von Linux
wie Ubuntu. Eine Linux-Distribution, auch als Distro bezeichnet, ist ein vollständiges
Betriebssystem, das auf dem Linux-Kernel aufbaut. Der Kernel ist das
Herzstück des Betriebssystems. Zusätzlich zum Kernel gibt es weitere
wichtige Bestandteile einer Distribution, wie Systembibliotheken, Dienstprogramme
und Softwareanwendungen. Die Auswahl dieser wird vom Ersteller der Distro
getroffen. Distros gibt es in vielen Varianten, jede mit ihren eigenen
Zielen, Zielgruppen und Softwareauswahl. Das bedeutet, dass für viele
verschiedene Anwendungsfälle eine passende Linux Distro erstellt werden kann. [@dikkyryanpratamaWhatLinuxDistribution]

### Eingebettetes Linux

Unter eingebetteten Linux versteht man die Nutzung des
Linux-Betriebssystems im Umfeld eingebetteter Systeme. Der
einzige wesentliche Unterschied zu dem normalen Linux-Betriebssystem
ist dabei, dass das System auf die speziellen Anforderungen
eingebetteter Systeme zugeschnitten ist und vor allem
sparsamer mit den Ressourcen umgeht. Es hält jedoch nichts davon ab,
jede Art von Linux-Distribution auf einem eingebetteten System zu
installieren und als "eingebettetes Linux" zu betreiben. Um jedoch
das volle Potenzial eines eingebetteten Systems auszuschöpfen, ist
es ratsam, eine speziell für eingebettete Systeme entwickelte
Linux-Distribution zu verwenden. Yocto ist ein Projekt mit
dem eine solche spezielle Distribution für eingebettete Systeme
erstellt werden kann.

### Das Yocto Projekt

Yocto ist ein Open-Source-Projekt der Linux Foundation, das es ermöglicht,
maßgeschneiderte Linux-Distributionen für eingebettete Systeme
zu erstellen. Es bietet hierzu eine Sammlung von Tools, Vorlagen und
Methoden, die vor allem auf den Prinzipien der quellbasierten
Linux-Distribution Gentoo basieren. Eine quellbasierte Distribution
ist eine Linux-Distribution, die aus den Quellcodes der Software
zusammengestellt wird. Das bedeutet, dass die Software auf dem
Zielgerät aus dem Quellcode kompiliert wird und nicht
vorkompilierte Binärdateien installiert werden. Dies ermöglicht
eine hohe Flexibilität und Anpassbarkeit der Distribution und
Software. Yocto erweitert dieses Prinzip speziell auf eingebettete
Systeme. Es ist keine fertige Distribution, sondern ein Framework,
mit dem eigene Distributionen speziell für eingebettete Systeme erstellt werden können
[@linuxfoundationYoctoProject162024]. In der Arbeit wird das Yocto Projekt
für die Erstellung einer speziellen Linux-Distribution für
die Nutzung von Flutter auf eingebetteten Systemen verwendet.
In Kapitel \ref{yoctoChapter} wird die Erstellung einer solchen
Distribution mit dem Yocto Projekt beschrieben.
