Sobre el entorno de traducción Rosetta de Apple
(developer.apple.com)-
Rosetta es un proceso de traducción que permite ejecutar apps hechas con instrucciones x86_64 en Apple Silicon.
-
Para el usuario, Rosetta no es visible. Cuando un ejecutable solo contiene instrucciones de Intel, macOS ejecuta Rosetta automáticamente y comienza la traducción.
-
Cuando termina la traducción, el sistema ejecuta el binario traducido en lugar del original. Como este tiempo de traducción ocurre durante el arranque, la ejecución o el funcionamiento de la app puede ser más lento.
-
El sistema prefiere ejecutar instrucciones arm64 de la app. Cuando un binario incluye tanto arm64 como x86_64, el usuario puede forzar que se ejecute con Rosetta. Por ejemplo, cuando cierto plugin no es compatible con arm64.
-
El sistema evita mezclar código arm64 y x86_64 dentro del mismo proceso. Rosetta se aplica de forma integral, incluidos los módulos de código cargados dinámicamente.
Cosas que no se pueden traducir
- Traduce apps que incluyen compiladores JIT, pero no traduce lo siguiente:
→ extensiones del kernel
→ máquinas virtuales que virtualizan la plataforma de hardware x86_64
- Rosetta traduce todas las instrucciones x86_64, pero no es compatible con funciones modernas o características del procesador como AVX, AVX2 y AVX512.
→ Si ese tipo de funciones existe en el código, deben invocarse solo después de verificar si realmente están disponibles con la función sysctlbyname, entre otras.
- Para comprobar si se está ejecutando con un binario traducido por Rosetta, se puede verificar pasando el flag
sysctl.proc_translateda la funciónsysctlbyname.
1 comentarios
Es documentación oficial y está bien organizada, así que la traduzco brevemente y la dejo aquí.
Lo importante es que Rosetta no es una emulación, sino una "traducción".