Die erste bedeutende Veröffentlichung des Projekts Blink, das einen x86-64-Prozessor-Emulator entwickelt, der die Ausführung von statisch und dynamisch kompilierten Linux-Anwendungen in einer virtuellen Maschine mit emuliertem Prozessor ermöglicht, wurde veröffentlicht. Mit Blink können für die x86-64-Architektur kompilierte Linux-Programme in anderen POSIX-kompatiblen Betriebssystemen (macOS, FreeBSD, NetBSD, OpenBSD, Cygwin) und auf Hardware mit anderer Architektur (x86, ARM, RISC-V, MIPS, PowerPC, s390x) ausgeführt werden. Der Code des Projekts ist in der Programmiersprache C (ANSI C11) geschrieben und steht unter der ISC-Lizenz. Es wird nur libc (POSIX.1-2017) als Abhängigkeit benötigt.
In puncto Funktionalität ähnelt Blink dem Befehl qemu-x86_64, unterscheidet sich jedoch durch eine kompaktere Ausführung und einen erheblichen Leistungszuwachs. So benötigt die Blink-Ausführungsdatei lediglich 221 KB (bei einer schlanken Version 115 KB) anstelle von 4 MB für qemu-x86_64, während Blink in einigen Tests, wie der Ausführung im GCC-Emulator und der Durchführung mathematischer Operationen, QEMU in etwa doppelt so schnell übertrifft.
Um hohe Leistung sicherzustellen, wird ein JIT-Compiler verwendet, der die Ausgangsinstruktionen zur Laufzeit in Maschinencode für die Zielplattform umwandelt. Direkte Ausführungen von ausführbaren Dateien in den Formaten ELF, PE (Portable Executables) und bin (Flat executable), die mit den Standard-C-Bibliotheken Cosmopolitan, Glibc und Musl kompiliert wurden, werden unterstützt. Die integrierte Unterstützung für 180 Linux-Systemaufrufe und die Emulation von etwa 600 x86-Prozessoranweisungen, einschließlich der Befehlssätze i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED und RDTSCP, sind implementiert.
Zusätzlich wird auf Basis von Blink das Tool blinkenlights entwickelt, das eine Schnittstelle zur Visualisierung des Programmausführungsverlaufs und zur Analyse des Speicherinhalts bietet. Dieses Tool kann als Debugger verwendet werden, der den Rückwärts-Debugging-Modus unterstützt und es ermöglicht, in der Ausführungsgeschichte zurück zu navigieren und zu bereits zuvor ausgeführten Punkten zurückzukehren. Der Projektentwickler ist auch der Autor von Entwicklungen wie der C-Bibliothek Cosmopolitan, dem Portierungssystem für die Isolationsmechanismus pledge für Linux und dem System für universelle ausführbare Dateien Redbean.

Quelle: opennet.ru
