Muitos aplicativos do Windows foram escritos para x86 e ainda podem funcionar em CPUs Arm. Veja como isso é possível.
O Windows sempre foi feito para CPUs x86 da Intel e AMD, mas desde que o Windows RT foi lançado há uma década para smartphones, o sistema operacional tem se tornado lentamente mais amigável Armar CPUs. Hoje, tanto o Windows 10 quanto o Windows 11 oferecem suporte completo para CPUs Arm, mas há um problema. Embora o sistema operacional em si funcione bem nessas CPUs, a maioria dos aplicativos não lançou uma versão compatível com Arm. Embora o Windows possa rodar em chips Arm, ter poucos programas para usar seria um problema.
No entanto, a Microsoft tem um truque na manga: um emulador para executar aplicativos x86 em máquinas baseadas em Arm. É a principal coisa que deu impulso ao Windows on Arm desde que o tradutor foi lançado em 2017. Veja como o emulador funciona e por que os Arm PCs precisam usá-lo se quiserem executar software feito para chips x86.
Emulando código x86 para CPUs Arm em tempo real
A ideia de emular código feito para um tipo de processador para que possa ser executado em outro não é novidade. É assim que funciona a emulação de jogos, que é popularmente usada para fazer videogames antigos rodarem em novos dispositivos com hardware muito diferente. Quando você executa um aplicativo x86 em um Arm PC, o Windows pega blocos do código do aplicativo e o compila em algo que pode ser executado em um chip Arm. Tudo isso é feito em tempo real, e o Windows precisa armazenar em cache todo o código traduzido, o que significa que não é necessário retraduzir continuamente.
Infelizmente, o desempenho será pior em aplicativos emulados em comparação com o código projetado para o hardware. É difícil dizer quanto desempenho você está perdendo ao executar código emulado no Windows, pois os dados de teste são muito escassos, mas para comparação, Tradutor Rosetta 2 da Apple (que também traduz aplicativos x86 em Arm) perde cerca de 20%. É possível reduzir esse número, mas geralmente a emulação e a tradução resultam em uma penalidade de desempenho, não importa o que aconteça.
Por que os aplicativos x86 não podem ser executados no Arm sem emulação
Você deve estar se perguntando por que o software precisa ser escrito especificamente para x86, Arm e outros tipos de CPUs. Tudo se resume ao diferença na arquitetura, e neste caso, estamos falando sobre a arquitetura do conjunto de instruções (ISA). Eles são o design mais fundamental de um processador e determinam se algo simples como multiplicação ou algo complexo como AVX pode ser feito nativamente. Alterar o ISA afeta a maneira mais fundamental como o software interage com o hardware, até os zeros e zeros básicos que a CPU lê.
x86 é o ISA das CPUs Intel e AMD, que historicamente têm sido as únicas CPUs nas quais o Windows pode rodar. Enquanto isso, o Arm tem sido usado principalmente para smartphones, e a sobreposição entre software de PC e software de telefone é muito pequena. Naturalmente, a maioria dos programas são feitos para x86 ou Arm, e para Windows on Arm, isso foi um grande problema porque a tradução não foi lançada em 2020, enquanto o Windows RT (a primeira versão do Windows com suporte para Arm) foi lançado em 2012.
Já se passou cerca de uma década desde que o Windows começou a oferecer suporte ao Arm, então onde estão todos os aplicativos nativos? O principal problema é que é preciso tempo e experiência para reescrever software para um ISA diferente, especialmente se os desenvolvedores quiserem fazer isso bem. Os desenvolvedores que não tomam o devido cuidado ao portar um aplicativo de um ISA para outro podem resultar em falhas e bugs. Um ótimo exemplo disso é o Photoshop para Windows on Arm. Ele roda nativamente no Windows on Arm, ainda em nossa análise do Lenovo Thinkpad X13s, encontramos vários erros e muitos avisos de que OpenCL e OpenGL não eram suportados. Juntamente com uma base de usuários muito menor usando Arm no Windows, há menos incentivo para os desenvolvedores se preocuparem.
Portanto, quando os desenvolvedores não podem ou não querem dedicar recursos à criação de software nativo, a alternativa é a emulação. Embora a tradução de aplicativos x86 para Windows on Arm não seja perfeita, é impressionante que funcione e, às vezes, vale a pena perder desempenho sabendo que o aplicativo será executado conforme o esperado. Pelo menos até que o Windows on Arm chegue ao ponto em que os desenvolvedores não possam mais ignorá-lo, a tradução e a emulação proporcionam um impulso muito necessário ao seu ecossistema de hardware-software.