El formato binario universal es un formato para archivos ejecutables que se ejecutan de forma nativa tanto en Macs basados en PowerPC como en x86 o en Macs basados en Intel 64 y ARM64 . El formato se originó en NeXTStep como " Binarios multiarquitectura ", y el concepto se conoce más generalmente como binario fat , como se ve en Power Macintosh .
Con el lanzamiento de Mac OS X Snow Leopard , y antes de eso, desde el paso a las arquitecturas de 64 bits en general, algunos editores de software como Mozilla [1] han utilizado el término "universal" para referirse a un binario grueso que incluye compilaciones para sistemas i386 (Intel de 32 bits) y x86_64. El mismo mecanismo que se utiliza para seleccionar entre las compilaciones PowerPC o Intel de una aplicación también se utiliza para seleccionar entre las compilaciones de 32 bits o 64 bits de las arquitecturas PowerPC o Intel.
Sin embargo, Apple siguió exigiendo compatibilidad nativa tanto con PowerPC como con Intel para otorgar a los editores de software de terceros permiso para usar las marcas comerciales de Apple relacionadas con binarios universales. [2] Apple no especifica si dichos editores de software de terceros deben (o deberían) agrupar compilaciones separadas para todas las arquitecturas.
Los binarios universales se introdujeron en Mac OS en la Conferencia Mundial de Desarrolladores de Apple de 2005 como un medio para facilitar la transición de la arquitectura PowerPC existente a los sistemas basados en procesadores Intel, que comenzaron a distribuirse en 2006. Los binarios universales suelen incluir versiones PowerPC y x86 de una aplicación compilada. El sistema operativo detecta un binario universal por su encabezado y ejecuta la sección adecuada para la arquitectura en uso. Esto permite que la aplicación se ejecute de forma nativa en cualquier arquitectura compatible, sin ningún impacto negativo en el rendimiento más allá de un aumento en el espacio de almacenamiento ocupado por el binario más grande.
A partir de Mac OS X Snow Leopard, solo se admiten Macs basados en Intel, por lo que el software que depende específicamente de capacidades presentes solo en Mac OS X 10.6 o más reciente solo se ejecutará en Macs basados en Intel y, por lo tanto, no requiere binarios fat de Intel/PPC. Además, a partir de OS X Lion , solo se admiten Macs Intel de 64 bits, por lo que el software que depende específicamente de nuevas características en OS X 10.7 o más reciente solo se ejecutará en procesadores de 64 bits y, por lo tanto, no requiere binarios fat de 32 bits/64 bits. [3] [4] Los binarios fat solo serían necesarios para el software que está diseñado para tener compatibilidad con versiones anteriores de Mac OS X que se ejecutan en hardware más antiguo.
El nuevo formato binario Universal 2 se presentó en la Conferencia Mundial de Desarrolladores de 2020. [5] Universal 2 permite que las aplicaciones se ejecuten tanto en computadoras Macintosh basadas en Intel x86-64 como en ARM64 , para permitir la transición al silicio de Apple .
Existen dos soluciones alternativas generales. La primera consiste en proporcionar simplemente dos binarios separados, uno compilado para la arquitectura x86 y otro para la arquitectura PowerPC. Sin embargo, esto puede resultar confuso para los usuarios de software que no estén familiarizados con la diferencia entre ambos, aunque la confusión se puede solucionar mediante una mejor documentación o el uso de CD híbridos . La otra alternativa consiste en confiar en la emulación de una arquitectura por parte de un sistema que ejecute la otra arquitectura. Este enfoque produce un menor rendimiento y, en general, se considera una solución provisional que se utilizará solo hasta que estén disponibles binarios universales o binarios compilados específicamente, como en el caso de Rosetta .
Los binarios universales son más grandes que los binarios de una sola plataforma, porque se deben almacenar varias copias del código compilado. Sin embargo, debido a que las dos arquitecturas comparten algunos recursos no ejecutables, el tamaño del binario universal resultante puede ser (y normalmente lo es) menor que los tamaños combinados de dos binarios individuales. Tampoco requieren RAM adicional porque solo se carga una de esas dos copias para su ejecución.
El concepto de binario universal se originó con los " Binarios multiarquitectura " en NeXTSTEP , la base arquitectónica principal de Mac OS X. NeXTSTEP admite binarios universales para que una imagen ejecutable pueda ejecutarse en múltiples arquitecturas, incluidas m68k de Motorola , x86 de Intel , SPARC de Sun Microsystems y PA-RISC de Hewlett-Packard . NeXTSTEP y macOS utilizan el archivo Mach-O como formato binario subyacente al binario universal.
Apple utilizó anteriormente una técnica similar durante la transición de los procesadores 68k a PowerPC a mediados de la década de 1990. Estos ejecutables de doble plataforma se denominan binarios fat , en referencia a su mayor tamaño de archivo.
Xcode 2.1 de Apple permite la creación de estos archivos, una característica nueva en esa versión. Una aplicación sencilla desarrollada con independencia del procesador en mente puede requerir muy pocos cambios para compilarse como un binario universal, pero una aplicación compleja diseñada para aprovechar las características específicas de la arquitectura puede requerir una modificación sustancial. Las aplicaciones creadas originalmente con otras herramientas de desarrollo pueden requerir modificaciones adicionales. Estas son las razones que se han dado para explicar el retraso entre la introducción de los ordenadores Macintosh basados en Intel y la disponibilidad de aplicaciones de terceros en formato binario universal. El hecho de que Apple entregue ordenadores basados en Intel varios meses antes de lo previsto es otro factor que explica esta diferencia.
Xcode 2.4 de Apple lleva el concepto de binarios universales aún más lejos, al permitir la creación de binarios de cuatro arquitecturas (32 y 64 bits para Intel y PowerPC), permitiendo así que un único ejecutable aproveche al máximo las capacidades de la CPU de cualquier máquina Mac OS X.
Muchos desarrolladores de software han proporcionado actualizaciones binarias universales para sus productos desde la WWDC de 2005. En diciembre de 2008, el sitio web de Apple enumeraba más de 7500 aplicaciones universales. [6]
El 16 de abril de 2007, Adobe Systems anunció el lanzamiento de Adobe Creative Suite 3 , la primera versión de la suite de aplicaciones en formato binario universal. [7]
Desde 2006 a 2010, muchas aplicaciones de Mac OS X fueron trasladadas al formato binario universal, incluyendo QuarkXPress , Final Cut Studio de Apple , Adobe Creative Suite , Microsoft Office 2008 y Shockwave Player con la versión 11; después de ese momento, la mayoría se convirtieron en aplicaciones exclusivas de Intel. Los programas PowerPC de 32 bits no universales se ejecutarán en Mac Intel con Mac OS X 10.4, 10.5 y 10.6 (en la mayoría de los casos), pero con un rendimiento no óptimo, ya que deben ser traducidos sobre la marcha por Rosetta ; no se ejecutarán en Mac OS X 10.7 Lion y posteriores, ya que Rosetta ya no es parte del sistema operativo.
Apple ha utilizado el mismo formato binario como binarios universales para aplicaciones iOS de forma predeterminada en múltiples ocasiones de coexistencia arquitectónica: alrededor de 2010 durante la transición armv6-armv7-armv7s y alrededor de 2016 durante la transición armv7-arm64. La App Store reduce automáticamente los binarios. No se derivaron nombres comerciales para esta práctica, ya que es solo una preocupación del desarrollador. [8]
El 22 de junio de 2020, Apple anunció una transición permanente de dos años de los procesadores basados en x86-64 de Intel a los procesadores Apple basados en ARM64 , comenzando con macOS Big Sur a fines de 2020. [9] Para ayudar en esta transición, se introdujo un nuevo binario Universal 2 para permitir que las aplicaciones se ejecuten en procesadores basados en x86-64 o en procesadores basados en ARM64. [5]
La herramienta principal para manejar (crear o dividir) binarios universales es el lipo
comando que se encuentra en Xcode . El filecomando en macOS y varios otros sistemas similares a Unix puede identificar binarios universales Mach-O e informar la compatibilidad con la arquitectura. [10] El generador de perfiles del sistema de Snow Leopard proporciona esta información en la pestaña Aplicaciones .