Juegos Linux: Box86 - Un Nuevo Emulador x86 para ODROID

Este mes, he incluido algo diferente para variar. Algunos de vosotros ya lo habréis leído en los foros en https://forum.odroid.com/viewtopic.php?f=91&t=34070, quisiera hablar de ello: Box86, un nuevo tipo de emulador x86 para ARM que se puede ejecutar en los ODROIDs.

¿Qué es Box86?

Box86 es un emulador x86 que te permite ejecutar aplicaciones Linux x86 en tu ODROID. Te permite ejecutar programas (o probablemente más que nada juegos) que no fueron escritos para placas ARM y no son de código abierto, como es el caso de la mayoría de los programas comerciales. Como la mayoría de las veces estos juegos no lanzaban para ARM, normalmente nos quedábamos sin jugar en SBCs como el ODROID, aunque el dispositivo es capaz de ejecutarlos sin problema si existiesen para ARM.

¿Existen otras soluciones para ejecutar software x86 en ARM?

Sí: qemu, por ejemplo, es capaz de emular un PC x86 al completo, dándote la posibilidad de ejecutar básicamente todo lo quieras. Emula GPU, CPU y otros dispositivos como LAN y USB. El problema de esta solución es que es muy lenta ya que emula un PC entero y, aunque funciona, es tan lento que prácticamente no se puede usar. Ya he tenido éxito con Windows 2000 y XP ejecutándolos en qemu (demostrando que realmente se puede ejecutar casi todo), pero tarda muchísimo y es muy lento.

Otro ejemplo sería DOSBox, que también emula un PC x86, aunque con un estilo muy antiguo 286 - 486 que cuenta con un conjunto muy reducido de instrucciones. Esta solución funciona bastante bien y te permite ejecutar juegos y programas antiguos basados en DOS, o incluso puede usarse para ejecutar Windows 3.11. Aunque es mucho más rápido, está muy limitado por la arquitectura antigua que se supone que ejecuta y, por lo tanto, estará limitado a los juegos antiguos de DOS, y quizás a las aplicaciones de Windows 3.11.

Una solución que ya analicé en el pasado era ExaGear, que permite ejecutar aplicaciones x86 en ARM emulando las instrucciones de la CPU, pero no el PC al completo. Es mucho más rápido que qemu y puede ejecutar aplicaciones Linux x86, incluido "wine", que te permite ejecutar aplicaciones de Windows en Linux.

Exploré en profundidad las posibilidades de ExaGear y escribí un par de artículos al respecto, además de crear una lista de compatibilidad en https://oph.mdrjr.net/meveric/other/ExaGear/, que muestra muy bien el rendimiento de ExaGear. De hecho, probablemente sea el software más maduro que existe actualmente que te permita ejecutar aplicaciones x86 en ARM. Lamentablemente, Eltechs decidió cancelar ExaGear para dispositivos ARM de escritorio, lo cual significa que ya no puedes conseguirlo.

¿Cuál es la diferencia con Box86?

Qemu es demasiado lento para ser útil y DOSBox está demasiado limitado para ejecutar aplicaciones modernas de Windows/Linux. Pero si ExaGear es tan bueno, ¿cuál es la razón por la que conseguir un nuevo tipo de emulador, aparte del hecho de que ExaGear fue cancelado?

Pues bien, ExaGear, aunque bastante bueno, tenía un defecto muy grande: lo ejecutaba todo en un entorno i386 (x86) que, además, en el caso de los drivers GPU, limitaba el uso de software solo a aplicaciones que no requerían aceleración 3D. Básicamente, cualquier juego que usara gráficos "modernos" no funcionaba, ya que requería OpenGL y nuestros ODROID carecen de los drivers necesarios, en especial para i386.

Aquí es donde Box86 puede destacar. Muchas de las librerías requeridas para ejecutar una aplicación son redirigidas a las librerías de tu placa ARM, lo que significa que, en lugar de usar SDL2 desde i386, Box86 puede usar SDL2 desde tu sistema host ARM. Esto incluye también los drivers de la GPU. Si una aplicación requiere OpenGL para ejecutarse, ya no pedirá los drivers OpenGL i386, sino los drivers OpenGL ARM, y aunque los ODROID no tienen OpenGL nativo, gracias a @ptitSeb, disponernos de un empaquetador OpenGL a OpenGL ES llamado gl4es que nos permite ejecutar muchas aplicaciones OpenGL. Pero no solo se utiliza OpenGL desde el sistema ARM en lugar del sistema i386. Hay muchas otras librerías, como SDL, OpenAL, X11, etc., que también se pueden utilizar desde el entorno ARM nativo en lugar de usarlo todo desde i386.

Esto, además, significa que necesitas muchas menos librerías de i386 que de ExaGear, el cual requiere un entorno i386 completo. Esto, combinado con la emulación x86, abre un campo completamente nuevo de aplicaciones que no funcionaban antes.

¿Es Box86 el santo grial para x86 en ARM?

Posiblemente sea el santo grial para x86 en ARM y el hecho de que sea de código abierto permitirá que muchas personas desarrollen y contribuyan al proyecto, lo cual a la larga puede tener como resultado la creación de un excelente paquete de software, de hecho. Actualmente Box86 está muy verde. Es un proyecto muy reciente y todavía tiene un largo camino que recorrer. Aún no admite un montón de cosas y tiene errores, pero lo bueno es que podemos ver los cambios casi a diario y el software sigue mejorando día tras día. Además, al ser de código abierto, este software podría volverse famoso bastante rápido y, con ello, más desarrolladores podrían corregir errores y mejorar el software.

Ya contamos con algunos juegos muy buenos que puedes ejecutar; algunos de los cuales hacen buen uso del potencial OpenGL de la configuración (el más famoso, probablemente sea Neverwinter Nights) y estoy bastante seguro de que pronto aparecerán más juegos.

Figure 1 - Neverwinter Nights opening screen
Figura 1 - Pantalla de inicio de Neverwinter Nights

Figura 2 – Jugabilidad de Neverwinter Nights.

Entonces, ¿Qué es lo que funciona en este momento?

El número de aplicaciones soportadas sigue siendo muy bajo, y básicamente se recurre al método de prueba y error para averiguar si una aplicación es compatible o no. Sin embargo, ya hay algunos juegos que parecen funcionar bastante bien en Box86. Airline Tycoon Deluxe, por ejemplo, debería funcionar a máxima velocidad (https://www.gog.com/game/airline_tycoon_deluxe), se trata un juego de administración muy interesante dentro de la enorme serie de juegos Tycoon, que tiene mucho encanto y diversión.

Figure 3 - Airline Tycoon Deluxe opening screen
Figura 3 - Pantalla de inicio de Airline Tycoon Deluxe

Figure 4 - Airline Tycoon Deluxe gameplay
Figura 4 – Jugabilidad de Airline Tycoon Deluxe

Neverwinter Nights Diamond Edition es un juego de rol muy intenso dentro del universo de Dungeon & Dragons. Actualmente, solo el Enhanced Edition Pack se puede comprar en GoG https://www.gog.com/game/neverwinter_nights_enhanced_edition_pack. Este es sin duda el juego más impresionante a nivel gráfico para el sistema, ya que utiliza el gl4es de @ptitSeb para convertir los gráficos OpenGL a OpenGL ES. Sin embargo, es bastante exigente, pero debería funcionar bien a resoluciones bajas, entre 800x600 y 720p.

Cook Serve Delicious (https://www.gog.com/game/cook_serve_delicious) es un buen juego de gestión/reacción del tiempo en el que preparas las comidas para tus clientes. Al igual que Airline Tycoon Deluxe, debería funcionar a máxima velocidad incluso en 1080p, aunque utiliza algo de OpenGL para los efectos, gracias a gl4es de @ptitSeb, funciona perfectamente.

(https://www.gog.com/game/undertale) también funciona a 1080p, aunque no hay mucho que hacer con respecto a los gráficos. Gods Will Be Watching (https://www.gog.com/game/gods_will_be_watching) también parece funcionar bien. No siempre a máxima velocidad, pero nada de lo que tengas que preocuparte.

Figure 5 - Freedom Planet opening screen
Figura 5 - Pantalla de inicio de Freedom Planet

Figure 6 - Freedom Planet gameplay
Figura 6 – Jugabilidad de Freedom Planet

Otro juego impresionante es Freedom Planet (https://www.gog.com/game/freedom_planet) que se siente y se juega un poco como el Sonic, pero con mucha más acción. El juego tarda bastante tiempo en cargarse, lo que actualmente pasa con muchas aplicaciones, pero una vez completada la carga inicial, el juego se carga mucho más rápido. Sufre de algunos problemas leves de velocidad: la introducción y las secuencias de video están a máxima velocidad, pero en el juego es un poco lento, aun así es jugable e impresiona bastante

Otro juego muy conocido es Faster than Light (https://www.gog.com/game/faster_than_light)  que también funciona, pero tiene un tiempo de carga excesivo al principio junto con algunos problemas de sonido. La velocidad no es del 100%, pero con este tipo de juego, no es necesario tener máxima velocidad. El juego es muy bueno, y paso bastante tiempo jugando en el ODROID. También hay otros juegos que funcionan en mayor o menor medida, como la mayoría de los juegos AGS (Adventure Game Studio) games (https://www.gog.com/games?devpub=wadjet_eye_games&page=1&sort=popularity) pero varían mucho en cuanto a velocidad y rendimiento, como la serie “Eschalon Books (https://www.gog.com/game/eschalon_book_i) que usa OpenGL en muchos lugares. Y ni siquiera lo intentaría con ExaGear por este motivo, aunque también es bastante lento en Box86, por ahoara. World of Goo (https://www.gog.com/game/world_of_goo) también parece iniciarse, pero se vuelve demasiado lento a la hora de jugar. DEFCON (https://www.gog.com/game/defcon) parece funcionar tras un largo período de carga, aunque es bastante lento.

Figure 7 - World of Goo opening screen
Figura 7 - Pantalla de inicio de World of Goo

Figure 8 - World of Goo gameplay
Figura 8 - Jugabilidad de World of Goo

Inherit the Earth (https://www.gog.com/game/inherit_the_earth) parece funcionar bien, pero también puede ejecutarse en ScummVM, así que no es un gran problema (https://www.gog.com/game/pixeljunk_shooter) se inicia, pero es demasiado lento para jugar. De modo que sí, ya hay unos cuantos juegos que puedes ejecutar con Box86 y estoy seguro de que pronto aparecerán más.

¿Qué pasa con los juegos de Windows y Wine?

ExaGear tiene la gran ventaja de que es capaz de ejecutar Wine bajo un entorno i386, lo que te permite ejecutar juegos de Windows en tu ODROID. Funciona bastante bien, siempre y cuando los juegos no requieran aceleración 3D para ejecutarse. Entonces, ¿Box86 ofrece lo mismo? Lamentablemente no. Actualmente, está limitado sólo a aplicaciones de Linux, aunque esto puede cambiar en el futuro, después de todo, wine también es "simplemente" una aplicación Linux.

¿Cómo se puede utilizar Box86?

Así es como normalmente utilizarías Box86:

  1. Visita https://github.com/ptitSeb/box86
  2. Descarga el código
  3. Compílalo tú mismo
  4. Añade un repositorio con las librerías i386 necesarias para jugar a tus juegos Configura tus variables de entorno tal y como se describe en https://github.com/ptitSeb/box86/blob/master/USAGE.md
  5. Si aún no tienes gl4es, repite los pasos 1-5 para gl4es también
  6. Intenta hacer que las cosas funcionen.

Los pasos 1 a 3 pueden llegar a ser un engorro, y el paso 4 puede ser complicado si no sabes cómo obtener las librerías, incluso el paso 5 puede ser un tanto horrendo, ya que a menudo incluirá los mismos comandos. Para facilitar las cosas, me he tomado la libertad de preparar un archivo .deb, que espero que gestione los Pasos 1 a 5, aunque no te garantizo que funcione. Tiene el binario en su interior, así como las librerías i386 más utilizadas que pude encontrar, que es una simple copia de las librerías de Debian. También he escrito un pequeño script delante de Box86 que incluye las librerías que contiene el paquete, así como las rutas de acceso para las aplicaciones más utilizadas que tienen sus propias librerías. Muchos juegos vienen con una carpeta lib, lib32, x86 o algo similar que almacenará las librerías que utilizan en sus programas, y el script incluirá automáticamente estas rutas en la ruta de búsqueda de librerías.

Esto significa que deberías poder simplemente ir a una carpeta del juego al que te gustaría jugar (por ejemplo: /home/odroid/GOG Games/Airline Tycoon Deluxe/game/) y ejecutar tu juego desde una terminal escribiendo "Box86" (por ejemplo: "box86 ATDeluxe").

Sin embargo, esto no funcionará con todas las aplicaciones y es posible que tengas que usar los comandos del Paso 5 para añadir tus propias librerías o carpetas. Si descubres que faltan algunas librerías, tienes total libertad para informarme de ello y las añadiré a mi paquete por comodidad.

El paquete se puede instalar en mis sistemas operativos basados en Debian desde mi repositorio con el siguiente comando:

$ apt-get install box86-odroid
Ten en cuenta que esto solo está disponible para los sistemas operativos armhf (32 bits) por ahora, así que probablemente no podrás usarlo en el ODROID-C2 o en el ODROID-N2.

Be the first to comment

Leave a Reply