jart/blink:最小的 x86-64-linux 模拟器


blink是一个虚拟机,用于在不同的操作系统和硬件架构上运行静态编译的x86-64-linux程序。

它被设计成与qemu-x86_64命令做同样的事情,除了:

  • (a) Blink不是一个4mb的二进制文件,而是只有大约166kb的占用空间;以及
  • (b) Blink在一些基准上比Qemu快2倍,比如模拟GCC。Blink没有Qemu那么多的功能。

当你想要一个非常小的虚拟机,并且运行短暂的程序快得多时,Blink是一个非常合适的选择。

定期测试 Blink 是否能够在以下平台上运行 x86-64-linux 二进制文件:

  • Linux(x86、ARM、MIPS、PowerPC、s390x)
  • MacOS(x86,ARM)
  • FreeBSD
  • OpenBSD
  • NetBSD

Blink 依赖于以下库:
  • libc (POSIX.1-2017)

Blink 可以在具有以下条件的 UNIX 系统上编译:
  • C11 编译器(例如 GCC 4.9.4+)
  • 现代 GNU Make(即不是 XCode 附带的那个)


blink 是一个用于 POSIX 平台的 x86-64 解释器,它是用与 C++ 编译器兼容的 ANSI C11 编写的。指令解码是使用我们精简版的英特尔反汇编程序 Xed 完成的。

该项目的主要目标是充当由 Cosmopolitan Libc 编译的用户空间二进制文件的虚拟机。然而,我们也成功地虚拟化了使用 Glibc 和 Musl Libc 编译的程序,例如 GCC 和 Qemu。Blink 支持一百多个 Linux 系统调用 ABI,包括 fork() 和 clone()。支持 SSE2、SSE3、SSSE3、POPCNT、CLMUL、RDTSCP 和 RDRND 硬件 ISA。Blink 的遗留 x87 FPU 目前仅支持双精度(64 位),就像 Windows 一样。
Blink 使用即时编译,在 x86_64 和 aarch64 上都支持。Blink 在 Apple 和 OpenBSD 等平台上采取适当的步骤来解决与 JIT 相关的限制。

Blink 使用即时编译,在 x86_64 和 aarch64 上都支持。

Blink 使用与硬件本身相同的 PML4T 方法来虚拟化内存,其中内存查找是通过四级基数树间接进行的。

Blink 支持 16 位 BIOS 程序,例如 SectorLISP。

Blink 支持对操作系统引导加载程序进行故障排除。Blink 是为 Cosmopolitan Libc 设计的,它在它编译的每个二进制文件中嵌入了一个操作系统。