Введение
Универсальный бинарный формат — это формат для исполняемых файлов, работающих на компьютерах Macintosh с процессорами PowerPC или Intel, основанных на архитектурах IA 32, Intel 64 или ARM64. Этот формат возник в NeXTStep под названием «Бинарные файлы с множественной архитектурой», а в целом известен как «жирный бинарный файл», как это было на Power Macintosh. С выходом Mac OS X Snow Leopard, а до этого, с переходом на 64-битные архитектуры в целом, некоторые разработчики программного обеспечения, такие как Mozilla, стали использовать термин «универсальный» для обозначения жирного бинарного файла, включающего сборки как для i386 (32-битных Intel), так и для x86-64 систем. Тот же механизм, который используется для выбора между сборками PowerPC или Intel приложения, применяется и для выбора между 32-битными или 64-битными сборками для архитектур PowerPC или Intel. Однако Apple продолжала требовать нативной совместимости с PowerPC и Intel для предоставления сторонним разработчикам программного обеспечения разрешения на использование товарных знаков Apple, связанных с универсальными бинарными файлами. Apple не определяет, обязаны ли такие сторонние разработчики собирать отдельные сборки для всех архитектур. Универсальные бинарные файлы были представлены в Mac OS на Всемирной конференции разработчиков Apple в 2005 году, чтобы облегчить переход от существующей архитектуры PowerPC к системам на основе процессоров Intel, поставки которых начались в 2006 году. Обычно универсальные бинарные файлы содержат версии приложения как для PowerPC, так и для x86. Операционная система определяет универсальный бинарный файл по его заголовку и выполняет соответствующий раздел для используемой архитектуры. Это позволяет приложению работать на любой поддерживаемой архитектуре без снижения производительности, за исключением увеличения объема занимаемого дискового пространства. Начиная с Mac OS X Snow Leopard, поддерживаются только компьютеры Mac на базе Intel, поэтому программное обеспечение, требующее функций, доступных только в Mac OS X 10.6 и более поздних версиях, будет работать только на компьютерах Mac на базе Intel и, следовательно, не требует жирных бинарных файлов Intel/PPC. Кроме того, начиная с OS X Lion, поддерживаются только 64-битные компьютеры Mac на базе Intel, поэтому программное обеспечение, использующее новые функции OS X 10.7 и более поздних версий, будет работать только на 64-битных процессорах и, следовательно, не требует жирных бинарных файлов 32/64-бит. Жирные бинарные файлы необходимы только для программного обеспечения, предназначенного для обратной совместимости со старыми версиями Mac OS X, работающими на устаревшем оборудовании. Новый формат Universal 2 был представлен на Всемирной конференции разработчиков в 2020 году. Universal 2 позволяет приложениям работать как на компьютерах Intel x86-64, так и на компьютерах Macintosh на базе ARM64, обеспечивая переход на процессоры Apple Silicon.
The universal binary format is a format for executable files that run natively on either PowerPC or Intel manufactured IA 32 or Intel 64 or ARM64 based Macintosh computers. The format originated on NeXTStep as "Multi Architecture Binaries", and the concept is more generally known as a fat binary, as seen on Power Macintosh. With the release of Mac OS X Snow Leopard, and before that, since the move to 64 bit architectures in general, some software publishers such as Mozilla have used the term "universal" to refer to a fat binary that includes builds for both i386 (32 bit Intel) and x86 64 systems. The same mechanism that is used to select between the PowerPC or Intel builds of an application is also used to select between the 32 bit or 64 bit builds of either PowerPC or Intel architectures. Apple, however, continued to require native compatibility with both PowerPC and Intel in order to grant third party software publishers permission to use Apple's trademarks related to universal binaries. Apple does not specify whether or not such third party software publishers must (or should) bundle separate builds for all architectures. Universal binaries were introduced into Mac OS at the 2005 Apple Worldwide Developers Conference as a means to ease the transition from the existing PowerPC architecture to systems based on Intel processors, which began shipping in 2006. Universal binaries typically include both PowerPC and x86 versions of a compiled application. The operating system detects a universal binary by its header, and executes the appropriate section for the architecture in use. This allows the application to run natively on any supported architecture, with no negative performance impact beyond an increase in the storage space taken up by the larger binary. Starting with Mac OS X Snow Leopard, only Intel based Macs are supported, so software that specifically depends upon capabilities present only in Mac OS X 10.6 or newer will only run on Intel based Macs and therefore does not require Intel/PPC fat binaries. Additionally, starting with OS X Lion, only 64 bit Intel Macs are supported, so software that specifically depends on new features in OS X 10.7 or newer will only run on 64 bit processors and therefore does not require 32 bit/64 bit fat binaries. Fat binaries would only be necessary for software that is designed to have backward compatibility with older versions of Mac OS X running on older hardware. The new Universal 2 binary format was introduced at the 2020 Worldwide Developers Conference. Universal 2 allows applications to run on both Intel x86 64 based and ARM64 based Macintosh computers, to enable the transition to Apple silicon.
Мотивация
Есть два основных альтернативных решения. Первое – просто предоставить два отдельных исполняемых файла, один скомпилированный для архитектуры x86, а другой – для архитектуры PowerPC. Однако это может сбить с толку пользователей, не знакомых с различиями между этими архитектурами, хотя эту путаницу можно устранить с помощью более подробной документации или использования гибридных CD. Другая альтернатива – полагаться на эмуляцию одной архитектуры системой, работающей на другой архитектуре. Этот подход приводит к снижению производительности и обычно считается временным решением, которое следует использовать только до появления универсальных исполняемых файлов или исполняемых файлов, скомпилированных специально для каждой архитектуры, как это реализовано в Rosetta. Универсальные исполняемые файлы больше, чем файлы, предназначенные для одной платформы, поскольку необходимо хранить несколько копий скомпилированного кода. Однако, поскольку некоторые неисполняемые ресурсы используются обеими архитектурами, размер итогового универсального исполняемого файла зачастую оказывается меньше, чем суммарный размер двух отдельных исполняемых файлов. Кроме того, они не требуют дополнительной оперативной памяти, так как для выполнения загружается только одна из этих копий.
История
Концепция универсального бинарного файла возникла с появлением "Multi Architecture Binaries" в NeXTSTEP, основной архитектурной основе Mac OS X. NeXTSTEP поддерживает универсальные бинарные файлы, позволяя одному исполняемому образу работать на нескольких архитектурах, включая Motorola m68k, Intel x86, Sun Microsystems SPARC и Hewlett Packard PA RISC. NeXTSTEP и macOS используют архив Mach O в качестве бинарного формата, лежащего в основе универсального бинарного файла. Ранее Apple использовала аналогичную технику при переходе от процессоров 68k к PowerPC в середине 1990-х годов. Эти исполняемые файлы для двух платформ называются "fat binaries" (жирными двоичными файлами) из-за их большего размера. Apple Xcode 2.1 поддерживает создание этих файлов, что является новой функцией в этой версии. Простое приложение, разработанное с учетом независимости от процессора, может потребовать незначительных изменений для компиляции в универсальный бинарный код, но сложное приложение, разработанное для использования специфических возможностей архитектуры, может потребовать существенной модификации. Приложения, первоначально созданные с использованием других инструментов разработки, могут потребовать дополнительных изменений. Эти причины объясняют задержку между выпуском компьютеров Macintosh на базе Intel и появлением сторонних приложений в универсальном бинарном формате. Более ранние сроки поставки Apple компьютеров на базе Intel, чем было объявлено, также способствовали этой задержке. Apple Xcode 2.4 развивает концепцию универсальных бинарных файлов, позволяя создавать бинарные файлы для четырех архитектур (32- и 64-битные для Intel и PowerPC), что позволяет одному исполняемому файлу в полной мере использовать возможности процессора любой машины Mac OS X.
Универсальные приложения
Многие разработчики программного обеспечения предоставляли универсальные двоичные обновления для своих продуктов с WWDC 2005 года. По состоянию на декабрь 2008 года на веб-сайте Apple было указано более 7500 универсальных приложений. 16 апреля 2007 года Adobe Systems объявила о выпуске Adobe Creative Suite 3, первой версии пакета приложений в формате Universal Binary. С 2006 по 2010 год многие приложения Mac OS X были портированы в универсальный двоичный формат, включая QuarkXPress, Final Cut Studio от Apple, Adobe Creative Suite, Microsoft Office 2008 и Shockwave Player версии 11. После этого большинство из них стали приложениями, предназначенными только для Intel. 32-битные программы PowerPC, не поддерживающие универсальный формат, будут работать на компьютерах Intel Mac под управлением Mac OS X 10.4, 10.5 и 10.6 (в большинстве случаев), но с неоптимальной производительностью, так как они должны переводиться "на лету" с помощью Rosetta; они не будут работать на Mac OS X 10.7 Lion и более поздних версиях, поскольку Rosetta больше не входит в состав операционной системы.
iOS
Apple неоднократно использовала тот же двоичный формат, что и Universal Binaries для приложений iOS по умолчанию, в периоды сосуществования различных архитектур: примерно в 2010 году во время перехода от armv6 к armv7 и armv7s, и примерно в 2016 году во время перехода от armv7 к arm64. App Store автоматически оптимизирует бинарные файлы под конкретную архитектуру устройства. Специальные названия для этой практики не использовались, так как она касается исключительно разработчиков.
Универсальный 2
22 июня 2020 года Apple объявила о двухлетнем полном переходе от процессоров Intel x86-64 к процессорам Apple Silicon на базе ARM64, начиная с macOS Big Sur в конце 2020 года. Для упрощения этого перехода был представлен новый универсальный бинарный формат Universal 2, позволяющий запускать приложения как на процессорах x86-64, так и на процессорах ARM64. Информация об этом отображается на вкладке «Приложения» в Системном профиле Snow Leopard.