La première version significative du projet Blink a été publiée, développant un émulateur de processeurs x86-64, permettant d’exécuter des applications Linux compilées statiquement et dynamiquement dans une machine virtuelle avec un processeur émulé. Grâce à Blink, les programmes Linux compilés pour l'architecture x86-64 peuvent être exécutés sur d'autres systèmes d'exploitation compatibles POSIX (macOS, FreeBSD, NetBSD, OpenBSD, Cygwin) et sur des matériels avec une autre architecture matérielle (x86, ARM, RISC-V, MIPS, PowerPC, s390x). Le code du projet est écrit en C (ANSI C11) et distribué sous la licence ISC. La seule dépendance requise est libc (POSIX.1-2017).
En termes de fonctionnalités, Blink ressemble à la commande qemu-x86_64, mais diffère de QEMU par une exécution plus compacte et un gain de performance significatif. Par exemple, le fichier exécutable Blink ne fait que 221 Ko (115 Ko pour la version allégée) contre 4 Mo pour qemu-x86_64, et en termes de performance, dans certains tests, comme l'exécution dans l'émulateur GCC et l'exécution d'opérations mathématiques, il dépasse QEMU d'environ deux fois.
Pour garantir une haute performance, un compilateur JIT est utilisé, transformant à la volée les instructions source en code machine pour la plateforme cible. Le lancement direct dans l'émulateur des fichiers exécutables au format ELF, PE (Portable Executables) et bin (exécutable plat), compilés avec les bibliothèques C standard Cosmopolitan, Glibc et Musl, est pris en charge. Un support intégré pour 180 appels système Linux et l’émulation d'environ 600 instructions processeur x86, couvrant les ensembles d'instructions i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED et RDTSCP, a été implémenté.
De plus, un utilitaire appelé blinkenlights est en cours de développement sur la base de Blink, fournissant une interface pour visualiser l'exécution du programme et analyser le contenu de la mémoire. Cet utilitaire peut être utilisé comme débogueur, prenant en charge le mode de débogage inversé (Reverse-Debugging) et permettant de remonter dans l'historique d'exécution et de revenir à un point exécuté précédemment. Le projet est développé par l'auteur de travaux tels que la bibliothèque C Cosmopolitan, le port du mécanisme d'isolation pledge pour Linux et le système de fichiers exécutables universels Redbean.

Source : opennet.ru
