Saltar al contenido

Un binario por arquitectura

Compilar para varias plataformas cuando llevas binarios ajenos dentro: los triples de destino, el paquete universal de macOS, y por qué la compilación cruzada casi nunca funciona.

Las combinaciones reales

Tres son obligatorias y tres opcionales. Empezar por las tres primeras y añadir según lo que pidan los usuarios es una decisión perfectamente razonable.

El paquete universal de macOS

El caso especial que simplifica una de las filas: macOS admite un paquete que contiene las dos arquitecturas dentro y el sistema elige la que corresponde al arrancar.

Ventajas: un solo instalador para todos los Mac, y el usuario no tiene que saber qué procesador tiene — que es una pregunta que mucha gente no sabe contestar.

Y el detalle que importa aquí: los binarios acompañantes también tienen que ser universales, o incluirse los dos. Un paquete universal con un acompañante solo de Intel funciona a medias: la aplicación arranca nativa y la herramienta va por la capa de traducción, más lenta — o directamente falla si esa capa no está instalada.

Hay una herramienta del sistema que combina dos binarios en uno universal, y aplicarla a los acompañantes es parte de la construcción.

Por qué la compilación cruzada casi nunca funciona

La idea razonable: compilar las seis combinaciones desde una sola máquina. Y falla por tres razones acumuladas:

La conclusión práctica: una máquina de construcción por sistema. En la práctica eso significa integración continua con tres entornos, que es lo que hacen todos los proyectos que publican en las tres plataformas. La fase X lo desarrolla.

La excepción parcial es entre arquitecturas del mismo sistema: compilar para el otro procesador dentro de macOS, o para ARM de Windows desde Windows, sí suele funcionar — y es lo que permite construir el paquete universal desde un solo Mac.

Organizar los binarios acompañantes

Con seis combinaciones posibles, conviene un orden:

  • Un directorio con todos, nombrados por su triple. El sistema de compilación coge el que toca.
  • Un fichero que apunte de dónde salió cada uno y su versión. Es lo que necesitarás para la responsabilidad 1 del nivel 46.1 —mantenerlos actualizados— y para responder de dónde viene cada cosa.
  • Y verificar el hash de cada uno al incorporarlo. Un binario ajeno descargado y metido en tu instalador sin verificar es exactamente el problema de cadena de suministro del nivel 26.2, con la agravante de que va dentro de lo que tú firmas.