¿Qué es JIT? Cómo las reglas de Apple están frenando a los emuladores de juegos de iPhone
Conclusiones clave
- La compilación JIT es crucial para el rendimiento del emulador, pero Apple la restringe por razones de seguridad.
- Los emuladores utilizan JIT para optimizar el rendimiento recompilando el código sobre la marcha.
- Las limitaciones de Apple pueden cambiar, pero por ahora, los usuarios del emulador deben esperar o considerar hacer jailbreak.
Si bien Apple parece haber abierto las compuertas en lo que respecta a aplicaciones de emulador en iPhone, iPad y Apple TV, es posible que hayas notado que ciertos sistemas faltan notoriamente en el menú. Es muy probable que esto se deba a que una característica específica conocida como compilación "JIT" esté restringida por las reglas de la App Store.
¿Qué es JIT?
La compilación JIT es la abreviatura de compilación "Just In Time". La compilación es el proceso de convertir el código de programación en código de máquina. Puede escribir algo, por ejemplo, en código C y luego compilarlo para cualquier sistema, ya sea una CPU x86 como la que se encuentra en la mayoría de las computadoras con Windows o una CPU ARM como la que se encuentra en teléfonos móviles y tabletas.
La compilación JIT, a diferencia de la compilación anticipada, tiene numerosas ventajas, entre ellas la adaptabilidad a lo que está sucediendo actualmente en la computadora y a lo que el usuario le pide al programa que haga.
¿Por qué los emuladores necesitan JIT?
Los desarrolladores de emuladores han descubierto que el enfoque JIT les permite alcanzar niveles de rendimiento y eficiencia que de otro modo serían imposibles. Utilizando la técnica JIT, el código de CPU emulado del sistema original se puede recompilar en código nativo para el sistema host de destino sobre la marcha. Una vez que ese código se ha vuelto a compilar, se puede almacenar en caché y utilizarlo la próxima vez que se realice la misma llamada sin volver a compilarlo.
Utilizando el método JIT, es posible crear código que se modifica automáticamente, lo que se ha convertido en un enfoque común en la emulación de videojuegos. Esto es necesario en algunos sistemas porque muchos sistemas más antiguos, particularmente los sistemas basados en cartuchos, cargaban el código del cartucho de forma dinámica y aparentemente arbitraria según el estado exacto del juego. JIT permite un manejo esencialmente en tiempo real de este enfoque. JIT también permite que el emulador optimice el código recompilado para aprovechar al máximo el sistema host.
No soy programador, pero incluso desde mi punto de vista, JIT parece una herramienta extremadamente poderosa cuando se aplica al difícil problema de la emulación, según lo que he leído.
¿Por qué Apple no permite JIT?
Desafortunadamente, otro tipo de software que puede hacer un gran uso de JIT y del código automodificable es el malware. Si una aplicación puede generar y ejecutar código durante su tiempo de ejecución, eso abre la puerta a todo tipo de travesuras. Por lo tanto, compilar todo el código con anticipación hace que sea mucho más fácil garantizar que el código sea seguro. Es probable que Apple tampoco quiera tener una situación en la que una aplicación cambie su comportamiento después de ser aprobada. Algo que no puede suceder si el código precompilado es estático.
El efecto en cadena es que el software que depende de un recompilador JIT para funcionar a velocidades utilizables no será aprobado para la App Store. Esta es la razón dada por la ausencia del popular emulador Dolphin.
Por supuesto, existe una alternativa al recompilador JIT, llamado "intérprete", pero es muchas veces más lento que el método JIT. Entonces, si bien funcionaría, no se podría reproducir. O tendremos que esperar hasta el iPhone 30 para que el intérprete funcione lo suficientemente rápido, o tenemos que esperar que Apple afloje un poco sus restricciones.
Las cosas aún podrían cambiar
Son los primeros días de la escena de la emulación en la App Store convencional. Apple aún puede decidir flexibilizar este requisito para los emuladores o adaptar sus políticas para garantizar un nivel adecuado de seguridad para estas aplicaciones. Es probable que esto sea algo que se resuelva entre quienes aprueban las aplicaciones y quienes las desarrollan.
Por supuesto, este problema no existe para aquellos que hacen jailbreak a sus dispositivos, lo que les permite descargar cualquier código que quieran. Sin embargo, no recomendaría a nadie que haga esto sin una muy buena razón, y para la mayoría de las personas, las desventajas del jailbreak simplemente no valen la pena para poder jugar juegos retro en sus i-dispositivos.

