Ya fueron liberadas las nuevas versiones de Box86 y Box64
Hace poco se dio a conocer la liberación de las nuevas versiones de los emuladores Box86 0.2.6 y Box64 0.1.8. Los proyectos son desarrollados en sincronía por el mismo equipo de desarrollo.
Box86 se limita a ejecutar aplicaciones x86 de 32 bits (como juegos) en sistemas Linux que no sean x86, como ARM (el sistema host debe ser little-endian de 32 bits). Por lo cual se necesita un subsistema de 32 bits para ejecutar y compilar Box86. Box86 es inútil en sistemas de solo 64 bits. Además, necesita una cadena de herramientas de 32 bits para compilar Box86.
Debido a que Box86 usa las versiones nativas de algunas bibliotecas del «sistema», como libc, libm, SDL y OpenGL, es fácil de integrar y usar con la mayoría de las aplicaciones, y el rendimiento puede ser sorprendentemente alto en muchos casos.
Lo mismo pasa para Box64, solo que tal y permite ejecutar ejecutables de 64 bits. El proyecto presta gran atención a la organización del lanzamiento de aplicaciones de juegos, incluida la capacidad de lanzar compilaciones de Windows a través de Wine y Proton.
Una característica del proyecto es el uso de un modelo de ejecución híbrido, en el que la emulación se aplica solo al código máquina de la propia aplicación y bibliotecas específicas. Las bibliotecas genéricas del sistema, incluidas libc, libm, GTK, SDL, Vulkan y OpenGL, se reemplazan con variantes nativas de las plataformas de destino. Por lo tanto, las llamadas a la biblioteca se ejecutan sin emulación, lo que permite un aumento significativo del rendimiento.
La emulación de código que no tiene reemplazos nativos para la plataforma de destino se realiza mediante la técnica de recompilación dinámica (DynaRec) de un conjunto de instrucciones de máquina a otro. En comparación con la interpretación de las instrucciones de la máquina, la recompilación dinámica muestra un rendimiento de 5 a 10 veces mayor.
En las pruebas de rendimiento, cuando se ejecutan en las plataformas Armhf y Aarch64, los emuladores Box86 y Box64 superaron significativamente a los proyectos QEMU y FEX-emu y en algunas pruebas (glmark2, openarena) lograron un rendimiento idéntico al de ejecutar un ensamblado nativo de la plataforma de destino.
En términos de compatibilidad de aplicaciones, de los 165 juegos probados, aproximadamente el 70 % se obtuvo con éxito. Alrededor de un 10% más de trabajo, pero con ciertas reservas y restricciones.
De los juegos con los que se notan problemas, se mencionan los juegos basados en el motor Unity3D, que está ligado al paquete Mono, cuya emulación aún no siempre funciona debido a la compilación JIT que se usa en Mono, y además tiene gráficos bastante altos, requisitos que no siempre se pueden lograr en las placas ARM. La sustitución de las bibliotecas de aplicaciones GTK actualmente se limita a GTK2 (la sustitución de GTK3/4 no está completamente implementada).
En cuanto a los principales cambios en los nuevos lanzamientos, se destaca lo siguiente:
- Enlace agregado para la biblioteca Vulkan. Se agregó compatibilidad con la API de gráficos Vulkan y DXVK (implementación de DXGI, Direct3D 9, 10 y 11 sobre Vulkan).
- Enlaces mejorados para bibliotecas GTK. Se agregaron enlaces para gstreamer y bibliotecas comúnmente utilizadas en aplicaciones GTK.
- Se agregó soporte inicial (hasta ahora solo modo de interpretación) para arquitecturas RISC-V y PPC64LE.
- Se han realizado correcciones de errores para mejorar la compatibilidad con SteamPlay y la capa Proton. Es posible ejecutar muchos juegos de Linux y Windows desde Steam en placas AArch64 como Raspberry Pi 3 y 4.
- Gestión de memoria mejorada, comportamiento mmap y monitoreo de violaciones de protección de memoria.
- Compatibilidad mejorada para la llamada del sistema de clonación en libc. Se agregó soporte para nuevas llamadas al sistema.
- En el motor de recompilación dinámica se ha mejorado el trabajo con registros SSE/x87, se ha añadido soporte para nuevos códigos de máquina, se han optimizado las conversiones de números flotantes y dobles, se ha mejorado el procesamiento de saltos internos, se ha añadido soporte para nuevas arquitecturas simplificado.
- Cargador de archivos ELF mejorado.
Finalmente, si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.