Escriu per cercar…

Rosetta

Rosetta traduce el código compilado para Intel para que se ejecute en un Mac con chip Apple, y presta la misma traducción a los contenedores amd64.

Introducción

En 2020 Apple cambió el procesador de sus ordenadores.

Hasta entonces un Mac llevaba un chip Intel y entendía instrucciones x86_64.

Desde el chip M1 el Mac es arm64, la misma familia de instrucciones que un móvil.

El problema es que un programa ya compilado no cambia cuando tú cambias de ordenador.

Un ejecutable es una lista de instrucciones para un procesador concreto, y las de Intel no significan nada para un chip Apple.

Rosetta es el traductor que hay en medio.

La primera vez que abres un programa Intel, Rosetta lo traduce entero a instrucciones arm64 y guarda el resultado en el disco.

La segunda vez ya no traduce nada: ejecuta la traducción que tenía guardada.

Por eso va tan bien. No es un emulador que va interpretando instrucción por instrucción mientras el programa corre.

Entorno de trabajo

Necesitas un Mac con chip Apple, es decir un M1 o posterior.

Para la parte de contenedores necesitas también un motor de contenedores instalado en el Mac: Docker Desktop, OrbStack o Podman.

Qué arquitectura tienes

La orden uname -m te dice la arquitectura de la máquina:

shell
uname -m
arm64

Los programas que trae macOS están compilados para ambas arquitecturas:

shell
file /bin/ls
/bin/ls: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]

Un universal binary es literalmente esto: dos ejecutables dentro de un solo fichero.

Con lipo lo ves más resumido:

shell
lipo -archs /bin/ls
x86_64 arm64e

Estàs llegint una vista prèvia.

Inicia la sessió amb Google per llegir la pàgina sencera.

Inicia la sessió amb Google

Només et demanarem que acceptis les condicions del servei.