Flower News: Fuchsia OS-Entwickler bieten Unterstützung für die Ausführung nicht modifizierter Linux-Programme



Trotz der Tatsache, dass es wenig Neuigkeiten über Fuchsia OS gibt, entwickelt sich das Projekt weiter und ist sehr aktiv. Beweis - Eine Nachricht der Entwickler über ihre Pläne, einen Mechanismus zum Ausführen unveränderter Programme zu implementieren, die für Linux erstellt wurden.



Dieser Mechanismus basiert auf einer speziellen "Schicht", die als Starnix bezeichnet wird. Sie ist es, die Kompatibilität mit dem Linux ABI bietet.



Die Linux-Kernel-Systemschnittstellen sind in einem Handler implementiert, der als Prozess für das Fuchsia-Betriebssystem ausgeführt wird. Der Prozess arbeitet im Benutzerbereich und übersetzt die Anforderungen von Linux-Programmen in Aufrufe an die entsprechenden Betriebssystem-Subsysteme. Während der Entwicklung dieses Projekts müssen viele Subsysteme modifiziert werden, damit den Benutzern alle erforderlichen Systemschnittstellen zur Verfügung stehen.



Die Architektur der "Schicht" ähnelt laut den Entwicklern stark einem ähnlichen Subsystem für Windows, das als Windows-Subsystem für Linux bezeichnet wird. Es wird auch verwendet, um Linux-Systemaufrufe in Windows-Systemaufrufe zu übersetzen.



Der Interlayer-Code wird in Rust geschrieben, um Schwachstellenprobleme zu minimieren. Die Entwickler glauben, dass diese Programmiersprache dazu beitragen wird, das Risiko von Sicherheitslücken zu minimieren, die ausgenutzt werden können, um die Berechtigungen eines Linux-Prozesses auf den Starnix-Prozess selbst zu erhöhen. Hierzu werden auch die Standard-Fuchsia-Schutzmechanismen eingesetzt.



Beispiel: Beim Zugriff auf das Dateisystem, den Netzwerkstapel oder das Grafiksubsystem übersetzt starnix Anforderungen und konvertiert das Linux-ABI in das Fuchsia-System-ABI. Dies ermöglicht wiederum die gleichen Einschränkungen, die für normale Prozesse in Fuchsia gelten. Die Standard-Linux-Autorisierungsmechanismen werden ebenfalls verwendet.





Es ist erwähnenswert, dass die Betriebssystementwickler die Möglichkeit entwickelt haben, Linux-Anwendungen früher unter Fuchsia auszuführen. Sie verwendeten jedoch eine Implementierung, die der in Chrome OS verwendeten ähnlich ist. Im Allgemeinen können Sie sie verstehen, da Fuchsia eine Art Haustierprojekt von Google ist. Zuvor wurde aus Gründen der Kompatibilität mit Linux vorgeschlagen, die Machina-Bibliothek zu verwenden, in der Linux-Software in einer speziellen virtuellen Maschine ausgeführt wird, die mithilfe eines Hypervisors auf der Grundlage des Zircon-Kernels und der VirtIO-Spezifikationen erstellt wird.



Soweit Sie sehen, wird die Virtualisierung in Fuchsia parallel verwendet, da die Implementierung der Linux-Systemschnittstelle nicht so einfach ist. Die Virtualisierung wird höchstwahrscheinlich in Verbindung mit der "Ebene" verwendet. In diesem Fall wird der Linux-Kernel in einer separaten virtuellen Maschine ausgeführt, was nicht schlecht ist, aber Ressourcen erfordert. Aufgrund der Ressourcenintensität hat das Microsoft-Team, das am Windows-Subsystem für Linux gearbeitet hat, den Übersetzer gelöscht und den nativen Linux-Kernel in WSL 2 verwendet.



Übrigens essen die Fuchsia-Entwickler ihr Brot nicht umsonst - das Betriebssystem bietet bereits die POSIX Lite-Kompatibilitätsstufe, die auf dem Fuchsia System ABI aufbaut. All dies ermöglicht es Ihnen, eine Reihe von Linux-Programmen auszuführen, aber Sie müssen die Anwendungen neu kompilieren oder sogar den Quellcode ändern. Eines der Probleme mit POSIX Lite ist die unvollständige Implementierung aller POSIX-Funktionen.



Das Hauptproblem hierbei ist die mangelnde Unterstützung für Aufrufe zur Änderung des globalen Status von Prozessen, einschließlich Kill. Dementsprechend ist eine Änderung des globalen Zustands verboten, wenn eine Diskrepanz mit den Sicherheitskonzepten in Fuchsia besteht. Die Verwendung der Lite-Version von POSIX zahlt sich jedoch beim Portieren von Open Source-Anwendungen aus. Es stimmt, es gibt ein Problem beim Ausführen von Programmen, die keinen Zugriff auf den Code haben.



Fuchsia ist ein universelles Betriebssystem: Wo genau es verwendet wird, ist noch unbekannt. Es ist jedoch mit fast allen Gerätetypen kompatibel, einschließlich Workstations, Smartphones, IoT-Geräten und Unterhaltungselektronik. Die Entwicklung erfolgt unter Berücksichtigung der Erfahrungen bei der Erstellung einer Android-Plattform und der Mängel im Bereich Skalierung und Sicherheit.



Grundlage des neuen Betriebssystems ist der Zircon-Mikrokernel, der wiederum auf den Entwicklungen des LK-Projekts basiert.





Das Projekt ist seit mehreren Jahren relativ aktiv. Im Netzwerk wurden Vorschläge veröffentlicht, dass Google es als Alternative zu Android entwickelt. Während dieser ganzen Zeit entwickelte sich das Betriebssystem weiter. Beispielsweise wurde 2017 berichtet, dass das Betriebssystem eine neue Benutzeroberfläche, Befehlszeilenfunktionen und mehrere weitere Funktionen erhalten hat. Im Jahr 2018 veröffentlichte Google eine neue Version seines Betriebssystems, die bereits getestet werden konnte.



Fuchsia hat eine eigene GUI, die mit dem Flatter-Framework in Dart geschrieben ist.



Darüber hinaus entwickelt das Projekt:



  • Framework zum Erstellen von Benutzeroberflächen Peridot;
  • Fargo Paketmanager;
  • Standardbibliothek libc;
  • Rendering-System Escher;
  • Vulkan-Fahrer Magma;
  • Scenic Composite Manager;
  • Dateisysteme MinFS, MemFS, ThinFS (FAT in Go-Sprache) und Blobfs
  • FVM-Partitionsmanager.


Für die Anwendungsentwicklung wird C / C ++ unterstützt, Dart wird bereitgestellt, Rust ist auch in Systemkomponenten zulässig, Go ist im Netzwerkstapel zulässig und Python wird im Sprachassemblierungssystem verwendet.





Der Systemmanager wird zum Laden verwendet, der mit appmgr zusammenarbeitet, um die anfängliche Softwareumgebung zu erstellen. Sysmgr und basemgr werden verwendet, um die Boot-Umgebung bzw. Benutzerumgebung zu bilden.



Zum Schutz des Systems wird eine "Sandbox" verwendet, die neuen Prozessen keinen Zugriff auf Kernelobjekte gewährt. Außerdem wird ihnen kein Speicher zugewiesen und kein Code ausgeführt. Der Zugriff auf Ressourcen wird von einem Namespace-System verwaltet, das die verfügbaren Berechtigungen definiert. Die Sandbox verwendet ein Framework, mit dem spezielle Komponenten erstellt werden können, die über IPC mit anderen Komponenten interagieren können.






All Articles