¿Cómo funciona la traducción x86 en Windows en Arm?

Muchas aplicaciones de Windows se escribieron para x86 y, aún así, pueden funcionar en CPU Arm. Así es como es posible.

Windows siempre ha sido hecho para CPU x86 de Intel y AMD, pero desde que Windows RT salió hace una década para teléfonos inteligentes, el sistema operativo se ha vuelto poco a poco más amigable para Armar CPU. Hoy en día, tanto Windows 10 como Windows 11 ofrecen soporte completo para las CPU Arm, pero hay un problema. Si bien el sistema operativo funciona bien en estas CPU, la mayoría de las aplicaciones no han lanzado una versión compatible con Arm. Aunque Windows puede ejecutarse en chips Arm, tener pocos programas para usar sería un problema.

Sin embargo, Microsoft tiene un truco bajo la manga: un emulador para ejecutar aplicaciones x86 en máquinas basadas en Arm. Es la clave que le ha dado impulso a Windows on Arm desde que salió el traductor en 2017. Así es como funciona el emulador y por qué las Arm PC necesitan usarlo si quieren ejecutar software creado para chips x86.

Emulando código x86 para CPU Arm en tiempo real

La idea de emular código creado para un tipo de procesador para que pueda ejecutarse en otro no es nada nuevo. Así es como funciona la emulación de juegos, que se utiliza popularmente para ejecutar videojuegos antiguos en dispositivos nuevos con hardware muy diferente. Cuando ejecuta una aplicación x86 en una PC Arm, Windows toma bloques del código de la aplicación y los compila en algo que puede ejecutarse en un chip Arm. Todo esto se hace en tiempo real y Windows tiene que almacenar en caché todo el código que traduce, lo que significa que no tiene que volver a traducirlo una y otra vez.

Desafortunadamente, el rendimiento será peor en las aplicaciones emuladas en comparación con el código diseñado para el hardware. Es difícil decir cuánto rendimiento se pierde al ejecutar código emulado en Windows ya que los datos de prueba son muy escasos, pero a modo de comparación, El traductor Rosetta 2 de Apple (que también traduce aplicaciones x86 a Arm) pierde alrededor del 20%. Es posible reducir ese número, pero por lo general, la emulación y la traducción resultan en una penalización en el rendimiento, pase lo que pase.

Por qué las aplicaciones x86 no se pueden ejecutar en Arm sin emulación

Quizás se pregunte por qué es necesario escribir software específicamente para x86, Arm y otros tipos de CPU. Todo se reduce a diferencia en arquitectura, y en este caso, estamos hablando de la arquitectura de conjunto de instrucciones (ISA). Son el diseño más fundamental de un procesador y determinan si algo simple como la multiplicación o algo complejo como AVX se puede hacer de forma nativa. Cambiar el ISA afecta la forma más fundamental en que el software interactúa con el hardware, hasta los ceros y unos básicos que lee la CPU.

x86 es el ISA de las CPU Intel y AMD, que históricamente han sido las únicas CPU en las que Windows puede ejecutarse. Mientras tanto, Arm se ha utilizado principalmente para teléfonos inteligentes y la superposición entre el software de PC y el software de teléfono es muy pequeña. Naturalmente, la mayoría de los programas están hechos para x86 o Arm, y para Windows en Arm, esto fue un problema enorme porque La traducción no salió en 2020, mientras que Windows RT (la primera versión de Windows compatible con Arm) salió en 2012.

Ha pasado aproximadamente una década desde que Windows comenzó a admitir Arm, entonces, ¿dónde están todas las aplicaciones nativas? El problema principal es que se necesita tiempo y experiencia para reescribir software para una ISA diferente, especialmente si los desarrolladores quieren hacerlo bien. Los desarrolladores que no toman el cuidado adecuado al migrar una aplicación de una ISA a otra pueden provocar fallos y errores. Un gran ejemplo de esto es Photoshop para Windows en Arm. Se ejecuta de forma nativa en Windows en Arm, todavía en nuestra revisión del Lenovo Thinkpad X13s, encontramos varios errores y muchas advertencias de que OpenCL y OpenGL no eran compatibles. Junto con una base de usuarios mucho más pequeña que usa Arm en Windows, hay menos incentivos para que los desarrolladores se preocupen.

Entonces, cuando los desarrolladores no pueden o no quieren dedicar recursos a la creación de software nativo, la alternativa es la emulación. Aunque traducir aplicaciones x86 para Windows en Arm no es perfecto, es impresionante que funcione y, a veces, vale la pena saber que la aplicación se ejecutará como se esperaba si pierde rendimiento. Al menos hasta que Windows on Arm llegue al punto en el que los desarrolladores ya no puedan ignorarlo, la traducción y la emulación le dan un impulso muy necesario a su ecosistema de hardware y software.