Универсальный двоичный формат — это формат исполняемых файлов , которые изначально работают как на компьютерах Mac на базе PowerPC , так и на компьютерах Mac на базе x86 , или как на компьютерах Mac на базе Intel 64 , так и на компьютерах Mac на базе ARM64 . Формат возник на NeXTStep как « Multi-Architecture Binaries », а концепция более известна как fat binary , как на Power Macintosh .
С выпуском Mac OS X Snow Leopard и до этого, с момента перехода на 64-битные архитектуры в целом, некоторые издатели программного обеспечения, такие как Mozilla [1], использовали термин «универсальный» для обозначения толстого двоичного файла, который включает сборки для систем i386 (32-бит Intel) и x86_64. Тот же механизм, который используется для выбора между сборками PowerPC или Intel приложения, также используется для выбора между 32-битными или 64-битными сборками архитектур PowerPC или Intel.
Однако Apple продолжала требовать собственной совместимости как с PowerPC, так и с Intel, чтобы предоставить сторонним издателям программного обеспечения разрешение на использование товарных знаков Apple, связанных с универсальными двоичными файлами. [2] 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 fat. Кроме того, начиная с OS X Lion , поддерживаются только 64-разрядные компьютеры Mac на базе Intel, поэтому программное обеспечение, которое зависит от новых функций в OS X 10.7 или более поздней версии, будет работать только на 64-разрядных процессорах и, следовательно, не требует двоичных файлов 32-/64-разрядной fat. [3] [4] Двоичные файлы Fat будут необходимы только для программного обеспечения, которое разработано для обеспечения обратной совместимости со старыми версиями Mac OS X , работающими на старом оборудовании.
Новый двоичный формат Universal 2 был представлен на Всемирной конференции разработчиков 2020 года. [5] Universal 2 позволяет приложениям работать на компьютерах Macintosh как на базе Intel x86-64 , так и на базе ARM64 , что позволяет перейти на процессоры Apple Silicon .
Существует два общих альтернативных решения. Первое — просто предоставить два отдельных двоичных файла, один из которых скомпилирован для архитектуры x86, а другой — для архитектуры PowerPC. Однако это может сбивать с толку пользователей программного обеспечения, не знакомых с разницей между ними, хотя путаницу можно устранить с помощью улучшенной документации или использования гибридных компакт-дисков . Другая альтернатива — положиться на эмуляцию одной архитектуры системой, работающей на другой архитектуре. Такой подход приводит к снижению производительности и обычно считается временным решением, которое следует использовать только до тех пор, пока не появятся универсальные двоичные файлы или специально скомпилированные двоичные файлы, как в случае с Rosetta .
Универсальные двоичные файлы больше, чем одноплатформенные двоичные файлы, поскольку необходимо хранить несколько копий скомпилированного кода. Однако, поскольку некоторые неисполняемые ресурсы являются общими для двух архитектур, размер полученного универсального двоичного файла может быть и обычно является меньшим, чем объединенные размеры двух отдельных двоичных файлов. Они также не требуют дополнительной оперативной памяти , поскольку для выполнения загружается только одна из этих двух копий.
Концепция универсального двоичного файла возникла из « Мультиархитектурных двоичных файлов » в 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 , что указывает на их больший размер файла.
Xcode 2.1 от Apple поддерживает создание таких файлов, что является новой функцией в этом выпуске. Простое приложение, разработанное с учетом независимости от процессора, может потребовать совсем немного изменений для компиляции в виде универсального двоичного файла, но сложное приложение, разработанное для использования преимуществ архитектурно-специфичных функций, может потребовать существенной модификации. Приложения, изначально созданные с использованием других инструментов разработки, могут потребовать дополнительной модификации. Эти причины были указаны для задержки между выпуском компьютеров Macintosh на базе Intel и доступностью сторонних приложений в универсальном двоичном формате. Поставка Apple компьютеров на базе Intel на несколько месяцев раньше ранее объявленного графика является еще одним фактором этого разрыва.
Xcode 2.4 от Apple развивает концепцию универсальных двоичных файлов еще дальше, позволяя создавать двоичные файлы с четырьмя архитектурами (32- и 64-разрядные для Intel и PowerPC), тем самым позволяя одному исполняемому файлу в полной мере использовать возможности процессора любой машины Mac OS X.
Многие разработчики программного обеспечения предоставили универсальные бинарные обновления для своих продуктов с WWDC 2005 года. По состоянию на декабрь 2008 года на сайте Apple было перечислено более 7500 универсальных приложений. [6]
16 апреля 2007 года компания Adobe Systems объявила о выпуске Adobe Creative Suite 3 — первой версии пакета приложений в формате Universal Binary. [7]
С 2006 по 2010 год многие приложения Mac OS X были перенесены в формат Universal Binary, включая 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 больше не является частью ОС.
Apple использовала тот же двоичный формат, что и Universal Binaries для приложений iOS по умолчанию в нескольких случаях архитектурного сосуществования: около 2010 года во время перехода armv6-armv7-armv7s и около 2016 года во время перехода armv7-arm64. App Store автоматически прореживает двоичные файлы. Никаких торговых наименований для этой практики не было получено, поскольку это касается только разработчика. [8]
22 июня 2020 года Apple объявила о двухлетнем постоянном переходе с процессоров Intel x86-64 на процессоры Apple на базе ARM64 , который начнется с macOS Big Sur в конце 2020 года. [9] Чтобы облегчить этот переход, был представлен новый двоичный файл Universal 2, позволяющий запускать приложения как на процессорах x86-64 , так и на процессорах ARM64. [5]
Основным инструментом для обработки (создания или разделения) универсальных двоичных файлов является lipo
команда, найденная в Xcode . fileКоманда в macOS и нескольких других Unix-подобных системах может идентифицировать универсальные двоичные файлы Mach-O и сообщать о поддержке архитектуры. [10] Системный профилировщик Snow Leopard предоставляет эту информацию на вкладке Приложения .