Опубликованы выпуски эмуляторов Box86 0.2.6 и Box64 0.1.8, предназначенных для запуска Linux-программ, собранных для архитектур x86 и x86_64, на оборудовании с процессорами ARM, ARM64, PPC64LE и RISC-V. Проекты развиваются синхронно одной командой разработчиков — Box86 ограничивается возможностью запуска 32-разрядных приложений x86, а Box64 обеспечивает запуск 64-разрядных исполняемых файлов. Проект уделяет большое внимание организации запуска игровых приложений, в том числе предоставляя возможность запуска Windows-сборок через wine и Proton. Исходные тексты проекта написаны на языке Си и распространяются (Box86, Box64) под лицензией MIT.
Особенностью проекта, является применение гибридной модели выполнения, при которой эмуляция применяется только к машинному коду самого приложения и специфичных библиотек. Типовые системные библиотеки, включая libc, libm, GTK, SDL, Vulkan и OpenGL, подменяются на варианты, родные для целевых платформ. Таким образом, библиотечные вызовы выполняются без эмуляции, что позволяет добиться значительного увеличения производительности.
Emulimi i kodit, për të cilin nuk ka zëvendësime native për platformën e synuar, kryhet duke përdorur teknikën e rikompilimit dinamik (DynaRec) nga një grup instrukcionesh maqinar në një tjetër. Krahasuar me interpretimin e instrukcioneve maqinar, rikompilimi dinamik demonstron një performancë 5-10 herë më të lartë.
В тестах производительности эмуляторы Box86 и Box64 при выполнении на платформах Armhf и Aarch64 существенно опередили проекты QEMU и FEX-emu, а в отдельных тестах (glmark2, openarena) позволили добиться производительности идентичной запуску сборки, родной для целевой платформы. В тестах 7-zip и dav1d, выполняющих интенсивные вычисления, производительность Box64 составила от 27% до 53% от производительности родного приложения (для сравнения QEMU показал результат в 5-16%, а FEX-emu — 13-26%). Дополнительно было произведено сравнение с эмулятором Rosetta 2, применяемым компанией Apple для запуска x86-кода на системах с ARM-чипом M1. Rosetta 2 обеспечил выполнение теста на базе 7zip с производительностью 71% от родной сборки, а Box64 — 57%.

Что касается совместимости с приложениями, то из 165 протестированных игр, успешно заработали около 70%. Ещё примерно 10% работают, но с определённым оговорками и ограничениями. Среди поддерживаемых игр WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious и большинство игр компании GameMaker. Из игр, с которыми отмечаются проблемы, упоминаются игры на базе движка Unity3D, который завязан на пакет Mono, эмуляция которого пока не всегда работает из-за применяемой в Mono JIT-компиляции, а также имеет достаточно высокие требования к графике, не всегда достижимые на ARM-платах. Подмена библиотек GTK-приложений пока ограничивается GTK2 (подмена GTK3/4 реализована не полностью).
Основные изменения в новых выпусках:
- Добавлена обвязка для библиотеки Vulkan. Добавлена поддержка графического API Vulkan и DXVK (реализация DXGI, Direct3D 9, 10 и 11 поверх Vulkan).
- Улучшены обвязки для библиотек GTK. Добавлены обвязки для gstreamer и библиотек, обычно используемых в GTK-приложениях.
- Добавлена начальная поддержка (пока только режим интерпретации) архитектур RISC-V и PPC64LE.
- Внесены исправления, нацеленные на улучшение поддержки SteamPlay и прослойки Proton. Обеспечена возможность запуска многих Linux и Windows игр из Steam на платах AArch64, таких как Raspberry Pi 3 и 4.
- Улучшено управление памятью, работа mmap и отслеживание нарушений защиты памяти.
- Улучшена поддержка системного вызова clone в libc. Добавлена поддержка новых системных вызовов.
- В движке динамической перекомпиляции улучшена работа с регистрами SSE/x87, добавлена поддержка новых машинных кодов, оптимизированы преобразования чисел float и double, улучшена обработка внутренних переходов, упрощено добавление поддержки новых архитектур.
- Улучшен загрузчик файлов в формате ELF.
Burimi: opennet.ru
