Start Magazin Unterschiede und Gemeinsamkeiten zwischen Android und Linux

Unterschiede und Gemeinsamkeiten zwischen Android und Linux

2936
0

Android stammt vom freien Betriebssystem Linux ab. Doch wie stark wurde das Original für den mobilen Einsatz verändert, und welche Elemente sind gleichgeblieben? Im Folgenden vergleichen wir die wichtigsten Aspekte der beiden Systeme.

Falls Sie noch nie von Linux gehört haben, dann lesen Sie sich am besten als Einstieg den historischen Teil des Linux-Artikels und den Abschnitt zum Kernel auf der Wikipedia durch [1]. Falls Sie Linux bereits nutzen, sollten Sie dem Artikel gut folgen können.

Grundlegendes

Die innerste Schicht eines Betriebssystems kümmert sich um Dinge wie die Speicherverwaltung, die Kommunikation zwischen den Prozessen und die Ressourcenverteilung. Sie wird Kernel genannt und ist bei Linux monolithisch, was bedeutet, dass auch die Geräte-Treiber auf dieser niedrigen System-Ebene laufen und höheren Schichten den Zugriff nur indirekt über eine Schnittstelle gewähren. Da der Kernel direkt nach dem Booten geladen wird, ist dieses Konzept jedoch eher unflexibel: Das System würde bei einem streng monolithischen Kernel die Treiber während des gesamten Betriebs im Speicher behalten, und müsste alle bereits beim Hochfahren des Geräts laden. Deswegen führten Linux-Entwickler die sogenannten Kernel-Module ein. Diese können auch erst im laufenden Betrieb geladen, beziehungsweise wieder entfernt werden. Auch der Android-Kernel ist monolithisch und benutzt bei Bedarf Kernel-Module. Er lässt sich jedoch deutlich besser auf das Gerät anpassen, da er nicht mit jedem beliebigen PC kompatibel sein muss, sondern nur mit dem jeweiligen Smartphone.

Android basiert ab Icecream Sandwich auf dem Linux-Kernel 3.x (aktuell ist Android 4.2.2 mit dem Linux-Kernel 3.4.0), die älteren Fassungen des mobilen OS bauen auf Version 2.6 des Linux-Kernels auf. Dabei handelt es sich um den gleichen Kernel, den auch Server-Systeme oder viele Linux-Anwender auf dem Desktop nutzen. Die Android-Entwickler mussten aber auch einige Veränderungen am Original vornehmen: Smartphones müssen mit weniger Energie und in der Regel auch mit leistungsschwächerer Hardware als Desktop-Rechner auskommen. Während ein Teil der neuen Power-Management-Features (wie zum Beispiel autosleep) nachträglich in den Linux-Kernel zurückflossen und dort auch eingefügt wurden, ist dies bei spezielleren Funktionen nicht passiert.

Auch beim Multitasking gibt es Unterschiede: Auf dem Desktop-Rechner kann der Benutzer sicher sein, "echtes" Multitasking vorzufinden. Jedes geöffnete Programm ist im Prinzip aktiv und kann Prozessorzeit erhalten. Auf dem Smartphone ist das nur bei den Anwendungen der Fall, die sich als Service (Hintergrunddienst) eintragen. Bei normalen Apps funktioniert dies aus gutem Grund anders. Schließlich wäre es auch sinnfrei, wenn eine Anwendung auf dem mobilen Gerät die knappen Ressourcen verbraucht, obwohl der Nutzer sie gerade nicht benötigt, da er einen Anruf bekommt. Stattdessen "merkt" sich das System die Activity (vereinfacht gesagt die aktuelle Ansicht der App) und gibt bei Bedarf den von ihr belegten Speicherplatz frei. Wechselt der Anwender nach seinem Telefongespräch zurück zu der vorherigen App, startet sie wieder bei der zuletzt verwendeten Activity, so dass der Eindruck entsteht, sie habe sich die ganze Zeit über im Hintergrund befunden. Unter anderem deswegen sind auch sogenannte "Task Killer" aus dem Play-Store nicht wirklich sinnvoll. Sie geben vor, Speicherplatz freizugeben, obwohl das Betriebssystem sich bereits darum kümmert.

Bibliotheken

Der Kernel alleine macht noch kein Betriebssystem aus. Dazu gibt es viele Hilfsbibliotheken, die wichtige Zusatzfunktionen mitbringen. Unter Linux kommt hier die Standard-C-Bibliothek namens Glibc zum Einsatz. Google wollte diese aber nicht für Android übernehmen. Der Grund liegt im rechtlichen Bereich: Die Glibc nutzt die GNU Public Licence, welche fordert, dass alle unter ihr lizenzierten Programme und die daran gemachten Änderungen immer im Quellcode zugänglich gemacht werden müssen. Der Suchmaschinenriese aus Mountain View wollte sich jedoch die Möglichkeit offen halten, Teile seines Betriebssystem nicht, beziehungsweise erst mit einer Zeitverzögerung als Quelltext öffentlich zugänglich zu machen. Deswegen schrieb man eine eigene C-Bibliothek namens Bionic [2]. Diese ist teilweise inkompatibel zur Glibc. Deswegen liegen Leute falsch, die denken, es würde reichen Linux-Programme für ARM-Prozessoren neu zu kompilieren, und anschließend seien diese automatisch unter Android lauffähig. Selbst bei einfachsten Applikationen ohne Grafikausgabe sind üblicherweise Änderungen am Code notwendig.

Dalvik Virtual Machine

Große Teile von Linux in der Programmiersprache C verfasst, einige Abläufe werden aber auch über Skripte gesteuert. So befindet sich im Verzeichnis /etc/rc.d eine Sammlung von ausführbaren Dateien, welche das System in bestimmten Situationen automatisch aufruft. Diese sind nach Runleveln geordnet. Wird ein Linux-Rechner beispielsweise in eine GUI gebootet, läuft er in Runlevel 5, so dass vorher die Skripte von rc.1 bis rc.5 ausgeführt wurden. Dieses Konzept konnte und wollte man für Android nicht übernehmen. So besteht hier die einzige Gemeinsamkeit mit Linux darin, dass beim Booten das Skript init.rc aufgerufen wird, welches unter anderem die Dalvik Virtual Machine startet. Dies ist eine spezielle Laufzeitumgebung und quasi das Herz von Android: Nun folgende Initialisierungsvorgänge liegen in der Verantwortung von Systemprozessen, die in Java programmiert wurden.

Doch was genau ist überhaupt die Dalvik Virtual Machine? Auf einem Smartphone ist die Sicherheit des Systems noch wichtiger als sie auf einem privaten Desktop-Rechner ohnehin schon ist. Schließlich wäre es äußerst unangenehm, wenn eine bösartige App sensible Daten auslesen oder SMS verschicken könnte. Deswegen läuft jede App abgeschottet in einer eigenen virtuellen Maschine – das Betriebssystem simuliert also für jede Anwendung einen fiktiven Mini-Computer. Der Java-Bytecode eines Programmes wird dabei nochmal separat in den Dalvik-Code der virtuellen Maschine übersetzt (das Ergebnis findet sich im Dateisystem als .DEX-Dateien). Nun werden die Programmierer unter den Lesern aufhorchen: Ist das wirklich notwendig? Schließlich läuft Java-Bytecode auch auf einem fiktiven Kleinrechner, der (wenn nicht gerade eine Sicherheitslücke vorliegt) in der Java-Sandbox eingesperrt ist? Ja, es ist nötig: Dalvik ist wesentlich schlanker aufgebaut und erlaubt durch seine Struktur einen ressourcenschonenderen Betrieb auf Mobilgeräten.

Abbildung 1: Der Kernel (rot) ist bei Linux und Android praktisch identisch, bei den Bibliotheken im grünen Bereich gibt es viele Überschneidungen. Blau und Gelb gibt es nur bei Android.
Abbildung 1: Der Kernel (rot) ist bei Linux und Android praktisch identisch, bei den Bibliotheken im grünen Bereich gibt es viele Überschneidungen. Blau und Gelb gibt es nur bei Android.

Rechte und Benutzer

Linux ist nahezu perfekt für den Mehrbenutzerbetrieb ausgelegt. An einem Rechner melden sich bei Bedarf mehrere Leute mit ihrem eigenen Zugang an. Für jede Datei und jedes Verzeichnis speichert das System, wem diese "gehört". Erstellt jemand zum Beispiel in seinem eigenen /home-Verzeichnis einen Text, so wird das Besitzrecht automatisch ihm zugeordnet. Dieses könnte er einem anderen Benutzer komplett übertragen; stattdessen wäre es aber auch möglich, einfach nur jemand anderem den Zugriff zu gestatten. Hier lässt sich auch im Detail festlegen, ob besagte Datei von dem anderen nur gelesen, oder etwa auch verändert werden darf. Auch kann der Administrator für eine größere Anzahl an Benutzern Rechte festlegen, in dem er sie zu Gruppen zuweist. So hat dann beispielsweise nur die Benutzergruppe Freunde Zugriff auf das Verzeichnis ~/Urlaubsfotos.

Abbildung 2: Der typische Aufbau des Linux-Dateisystems. Die Nutzerdaten befinden sich in /home.
Abbildung 2: Der typische Aufbau des Linux-Dateisystems. Die Nutzerdaten befinden sich in /home.

Bei Android ist die Sache etwas anders gelagert. Zwar benutzt es intern ebenfalls eines der Linux-Dateisysteme, welches die Benutzerrechte beachtet und weist auch Gemeinsamkeiten bei den benutzten Verzeichnissen auf. Das ursprüngliche Benutzer-Konzept stellt es aber auf den Kopf: Für jede App legt es auf Betriebssystem-Ebene einen eigenen Benutzer an (auch wenn dies dem Anwender im normalen Betrieb verborgen bleibt). Auf die Weise können Apps Daten derart abspeichern, dass keine andere Anwendung auf diese Zugriff hat – außer der Benutzer führt sie auf einem gerooteten Gerät mit Superuser-Rechten aus. Deshalb entdecken Sie zwischen dem Dateisystem eines Linux-Rechners und eines Android-Geräts nur dann Gemeinsamkeiten, wenn Sie das Android-Gerät rooten (Abbildung 3).

Dies alles sollte man übrigens nicht mit der Mehrbenutzerverwaltung verwechseln, welche Jelly Bean ermöglicht: Letztere spielt sich auf einer – im Vergleich zu Linux – viel höheren Ebene des Betriebssystems ab.

Abbildung 3: Auf einem gerooteten Android-Smartphone sehen Sie sämtliche Verzeichnisse des Dateisystems. So sind auch Gemeinsamkeiten mit Linux zu erkennen.
Abbildung 3: Auf einem gerooteten Android-Smartphone sehen Sie sämtliche Verzeichnisse des Dateisystems. So sind auch Gemeinsamkeiten mit Linux zu erkennen.

Zusammenarbeit mit Linux

Es gibt zwischen Android und Linux zwar Gemeinsamkeiten, aber nur beim Kernel und einigen benutzten Bibliotheken. Android ist somit mindestens so weit von Linux entfernt, wie es traditionelle Unix-Systeme sind. Im folgenden Artikel zeigen wir Ihnen, welche Probleme bei der Zusammenarbeit zwischen Android und Linux entstehen können und wie Sie diese lösen.

Kommentiere den Artikel

Please enter your comment!
Please enter your name here