Введение

Универсальный бинарный формат — это формат для исполняемых файлов, работающих на компьютерах 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.

Мотивация

Есть два основных альтернативных решения. Первое – просто предоставить два отдельных исполняемых файла, один скомпилированный для архитектуры 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.