Resumen

  • Rosetta 2 es un traductor binario dinámico que cierra la brecha entre las CPU Intel y Apple Silicon.
  • Rosetta 2 traduce el código en tiempo de ejecución.
  • Los usuarios no necesitan realizar ningún paso especial para utilizar Rosetta.
  • La compatibilidad limitada puede afectar a ciertas aplicaciones.

Con la transición de los Macs Intel a los que utilizan los procesadores Arm de Apple, surgió la duda de cómo se ejecutaría el software escrito para un tipo de procesador en este nuevo hardware. Rosetta 2 rápidamente despejó cualquier inquietud que pudieran tener los primeros usuarios de Apple Silicon, pero ¿qué es exactamente Rosetta 2 y cómo funciona?

Relacionado
5 razones por las que Windows en ARM no puede seguir los pasos de Apple Silicon

Microsoft tendrá que seguir su propio camino

20

¿Por qué necesitamos Rosetta 2?

Rosetta 2 es lo que se conoce como untraductor binario dinámico, y lo explicaremos un poco para que tenga más sentido.

En primer lugar, es"dinámico"porque Rosetta 2 hace su trabajo en tiempo de ejecución. Es decir, comienza a funcionar cuando se ejecuta el programa, a diferencia de un traductor estático, que intenta hacer su magia en todo el código de un programa por adelantado en lugar de hacerlo de forma dinámica según sea necesario. Traducir todo el código de forma preventiva utilizando un enfoque estático no siempre es la mejor opción, ya que no solo requiere mucho tiempo, sino que un traductor estático puede simplemente considerarlo imposible debido a una serie de factores.

Por ejemplo, muchas aplicaciones modernas utilizan la compilación JIT (Just-in-Time), donde el código se genera en tiempo de ejecución. Como este código no existe hasta que se ejecuta la aplicación, debe traducirse dinámicamente.

Además, las aplicaciones suelen llamar a bibliotecas o módulos externos según sea necesario durante la ejecución. Dado que estos componentes solo se cargan en condiciones específicas, también requieren una traducción dinámica. Rosetta 2 está diseñado para manejar estas situaciones, traduciendo el código sobre la marcha para garantizar su compatibilidad con Apple Silicon.

Un"binario"es un programa terminado que se puede ejecutar, es decir, que puede ser ejecutado por un procesador. Se llama binario porque en su interior hay un código binario de máquina puro (todos unos y ceros). Esto es notable porque el software no está escrito por personas en código binario puro, sino en un lenguaje de programación de alto nivel que se parece un poco a un lenguaje humano como el inglés. Lenguajes como C oPythonson ejemplos de estos, pero hay innumerables lenguajes de programación por ahí.

Este código legible para humanos se convierte luego en un binario ejecutable mediante un programa llamado compilador. A continuación, un compiladorcompilael código binario para un tipo específico de procesador. Los procesadores Intel que se encuentran en la generación anterior de Mac utilizan el conjunto de instrucciones x86_64, mientras que Apple Silicon utiliza el conjunto de instrucciones Arm.

El conjunto de instrucciones de un procesador es la lista de instrucciones, en código binario o de máquina, que le indican que debe realizar determinadas tareas. Una instrucción podría ser algo como "multiplicar x por y" o "mover información de esta parte de la memoria a esa parte de la memoria". Tanto las CPU Intel como las Arm pueden realizar el mismo tipo de trabajo, pero sus instrucciones son diferentes. Por lo tanto, si una CPU Arm intentara ejecutar un código destinado a una CPU Intel, no entendería la instrucción o podría realizar una operación diferente porque el mismo código binario representa instrucciones diferentes en cada CPU.

No se trata solo de que las instrucciones específicas difieran, sino que la forma en que estos procesadores ejecutan las instrucciones es muy diferente. La "R" en Arm es la abreviatura de "RISC" (Reduced Instruction Set Computer), a diferencia de la arquitectura "CISC" (Complejo de Instrucciones) que utilizan las CPU de Intel. Las CPU RISC completan instrucciones cortas con cada ciclo de reloj, mientras que las CPU CISC pueden necesitar varios ciclos de reloj para completar una instrucción compleja.

Es por esto que necesitamos Rosetta 2 como"traductor"para cerrar la brecha entre estos dos lenguajes de procesador diferentes.

Relacionado
¿Es Arm realmente más eficiente que x86?

Intel quiere "acabar con el mito" de que Arm es más eficiente que x86, pero conseguirlo será una tarea ardua.

13

Cómo funciona Rosetta 2

Cuando intentas ejecutar una aplicación macOS que se escribió para Mac con procesador Intel, Rosetta 2 interviene y traduce dinámicamente el código binario del programa. En términos simples, interpreta las instrucciones x86_64 y las convierte en instrucciones que el procesador Apple Silicon puede entender. Este proceso es más sofisticado que una simple traducción uno a uno, ya que implica una optimización compleja en tiempo real para garantizar que la aplicación traducida se ejecute sin problemas en Apple Silicon.

Si bien Rosetta 2 es muy capaz, el código binario Arm que genera generalmente no es tan eficiente como el código de una aplicación Arm nativa escrita específicamente para Apple Silicon. Es posible que estas aplicaciones traducidas no utilicen por completo todas las funciones avanzadas de las CPU Apple Silicon. Por lo tanto, a largo plazo, es preferible que los desarrolladores creen versiones nativas de sus aplicaciones para aprovechar al máximo el rendimiento y las capacidades de la nueva plataforma de Apple.

Relacionado
¿Qué es RISC-V?

RISC-V es uno de los últimos contendientes en el campo de las CPU, pero ¿qué es y cómo se compara con sus rivales?

Cómo utilizar Rosetta 2

Para los usuarios de Mac con Apple Silicon, no es necesario que hagan ni sepan nada especial para poder utilizar Rosetta 2. La primera vez que ejecuten un programa que requiera Rosetta 2, se les solicitará que instalen el software. También tendrán que esperar un tiempo la primera vez que ejecuten una aplicación Intel para Mac, ya que el proceso de traducción inicial puede llevar algún tiempo. La próxima vez que ejecuten esa aplicación en particular, debería iniciarse tan rápido como una aplicación nativa de Apple Silicon.

Rosetta 2 tiene sus desventajas

Si bien Rosetta 2 es bastante sorprendente en mi experiencia, no es una solución mágica. No está pensado para ser una solución permanente a la compatibilidad de software, y se espera que los desarrolladores de software creen software nativo de Apple Silicon en algún momento. Por supuesto, algunas aplicaciones que ya no están en desarrollo y que actualmente funcionan con Rosetta seguirán dependiendo de Rosetta 2. Sin embargo, a largo plazo, la mayor parte del software que se ejecuta en su Mac será nativo sin necesidad de que Rosetta 2 traduzca nada.

En el caso de las aplicaciones que se ejecutan con Rosetta 2, el rendimiento nunca será tan bueno como el de una aplicación nativa. La magnitud de la diferencia depende del tipo específico de aplicación. Por ejemplo, es poco probable que notes alguna diferencia en una aplicación como un procesador de textos, pero en el caso de aplicaciones que realmente exigen tu hardware, como videojuegos o editores de vídeo, podría haber una diferencia de rendimiento notable.

Personalmente, nunca he experimentado esto, pero vale la pena señalar que, si bien Rosetta 2 es altamente compatible y eficaz, algunas aplicaciones simplemente no funcionarán correctamente después de la traducción. Según ladocumentación para desarrolladoresde Apple , hay algunos tipos de instrucciones que Rosetta 2 no toca, como AVX, AVX2 y AVX512. Tampoco funcionará con aplicaciones Mac basadas en Intel que usen extensiones de kernel, donde se permite que el software cargue código en el kernel del sistema operativo. Las "aplicaciones de máquina virtual que virtualizan plataformas informáticas x86_64" también son inaceptables para Rosetta 2.

Con suerte, los desarrolladores de software que tienen aplicaciones que tienen errores o que no funcionan en absoluto con Rosetta 2 ya las habrán portado a Apple Silicon, pero siempre habrá algunas aplicaciones antiguas que ya no están en desarrollo y es poco probable que funcionen con Rosetta 2 a menos que Apple actualice su traductor para solucionar estos problemas específicos. Si entendemos cómo funciona el proceso de traducción, al menos podemos entender por qué puede suceder eso.