Lernen Sie die neue Version von Cosmopolitan 2.0 kennen, der plattformübergreifenden Standard-C-Bibliothek

Der Start von die neue Version des Projekts „Weltoffen 2.0“, das eine Standard-C-Bibliothek und ein universelles ausführbares Dateiformat entwickelt, mit dem Programme für verschiedene Betriebssysteme ohne den Einsatz von Interpretern und virtuellen Maschinen verteilt werden können.

Der Kontainer um universelle ausführbare Dateien zu erzeugen setzt auf die Kombination spezifischer Segmente und Header aus verschiedenen Systemen Betriebssysteme in einer Datei, die mehrere verschiedene Formate kombiniert, die in Unix, Windows und macOS verwendet werden.

Um sicherzustellen, dass eine einzelne ausführbare Datei laufen auf Systemen Windows und Unix, ein Trick wird verwendet, um Windows PE-Dateien als Shell-Skript zu codieren, Ausnutzen der Tatsache, dass die Thompson-Shell die Skriptmarkierung „#!“ nicht verwendet.

Um Programme zu erstellen, die mehrere Dateien enthalten (wobei alle Ressourcen in einer einzigen Datei kombiniert werden), wird das Generieren einer ausführbaren Datei in Form eines speziell gestalteten ZIP-Archivs unterstützt. Überblick über das vorgeschlagene Format (Beispiel hello.com-Anwendung):

Der qemu-x86_64-Aufruf wird für zusätzliche Portabilität bereitgestellt und ermöglicht die Ausführung von Code, der für die x86_64-Architektur kompiliert wurde, auf Nicht-x86-Plattformen wie Raspberry Pi-Boards und Apple-Geräten, die mit ARM-Prozessoren ausgestattet sind. Das Projekt kann auch verwendet werden, um eigenständige Anwendungen zu erstellen, die ohne Betriebssystem (Bare Metal) funktionieren. In solchen Anwendungen wird ein Bootloader an die ausführbare Datei angehängt und das Programm fungiert als bootfähiges Betriebssystem.

Hauptneuheiten von Cosmopolitan 2.0

In dieser neuen Version wird dies hervorgehoben das Schema für den Zugriff auf interne Ressourcen wurde geändert in aus einer Zip-Datei (Beim Öffnen von Dateien werden jetzt die üblichen /zip/… Pfade verwendet, anstatt das Präfix zip:.. zu verwenden). Ebenso ist es für den Zugriff auf Festplatten in Windows möglich, Pfade wie „/c/…“ anstelle von „C:/…“ zu verwenden.

Ein neuer APE-Loader wird vorgeschlagen (Actually Portable Executable), das das Format universeller ausführbarer Dateien definiert. Der neue Bootloader verwendet mmap, um das Programm dem Speicher zuzuweisen und ändert den Inhalt nicht mehr spontan. Bei Bedarf kann die universelle ausführbare Datei in reguläre ausführbare Dateien konvertiert werden, die an einzelne Plattformen gebunden sind.

Unter Linux ist es möglich, das Kernelmodul binfmt_misc zu verwenden um APE-Programme auszuführen. Es wird darauf hingewiesen, dass die Verwendung von binfmt_misc zusätzlich zu der schnellsten Startmethode ist Eine Implementierung von die Funktionalität der Systemaufrufe pledge() und unveil(), die vom OpenBSD-Projekt entwickelt wurden, sowie die Bereitstellung einer API zur Verwendung von Aufrufdaten in C-, C++-, Python- und Redbean-Programmen sowie ein Dienstprogramm von Promise.com willkürliche Prozesse zu isolieren.

Das können wir auch finden für Linux wurde die Leistung der Aufrufe clock_gettime und gettimeofday erhöht bis zu 10 Mal aufgrund der Verwendung des vDSO-Mechanismus (Virtual Dynamic Shared Object), der es ermöglicht, den Systemaufruf-Handler in den Benutzerbereich zu übertragen und den Switch-Kontext zu umgehen.

Der Build verwendet Landlock Make, eine Ausgabe von GNU Make mit strengerer Abhängigkeitsprüfung und der Verwendung des Landlock-Systemaufrufs, um das Programm vom Rest des Systems zu isolieren und die Caching-Effizienz zu verbessern. Optional bleiben Compiler-Fähigkeit und das übliche GNU-Make erhalten.

Auf der anderen Seite hebt es auch hervor implementierte Funktionen für Multithreading: _spawn() und _join(), Dies sind universelle Bindungen über spezifische APIs für verschiedene Betriebssysteme. Es wird auch daran gearbeitet, Unterstützung für POSIX-Threads zu implementieren.

Von den anderen Änderungen, die auffallen:

  • Unterstützung für die Optionen „–ftrace“ und „–strace“ für ausführbare Dateien hinzugefügt, um Informationen über alle Funktions- und Systemaufrufe an stderr zu senden.
  • Unterstützung für den Systemaufruf closefrom() hinzugefügt, der mit Linux 5.9+, FreeBSD 8+ und OpenBSD kompatibel ist.
  • Mathematische Funktionen für die Arbeit mit komplexen Zahlen wurden aus der Musl-Bibliothek entfernt.
  • Viele mathematische Funktionen wurden beschleunigt.
  • Es wird die Funktion nointernet() vorgeschlagen, die Netzwerkfunktionen deaktiviert.
  • Neue Funktionen zum effizienten Anhängen von Strings hinzugefügt: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf und vappendf.
  • Eine geschützte Version der kprintf()-Funktionsfamilie, die für die Arbeit mit erhöhten Rechten entwickelt wurde, wurde hinzugefügt.
  • Deutlich verbesserte Leistung von SSL-, SHA-, curve25519- und RSA-Implementierungen.

Wenn Sie mehr darüber erfahren möchten, sollten Sie wissen, dass der Projektcodeoder wird unter der ISC-Lizenz vertrieben (vereinfachte Version von MIT/BSD).


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.