Совместимость двоичного кода (совместимость с двоичным кодом или совместимость с объектным кодом ) — свойство компьютерной системы , означающее, что она может запускать тот же исполняемый код , обычно машинный код для центрального процессора (ЦП) компьютера общего назначения , который может запускать другая компьютерная система. Совместимость исходного кода , с другой стороны, означает, что необходима перекомпиляция или интерпретация , прежде чем программа может быть запущена на совместимой системе.
Для скомпилированной программы в обычной операционной системе двоичная совместимость часто подразумевает, что не только процессоры ( наборы инструкций ) двух компьютеров являются двоично-совместимыми, но также и то, что интерфейсы и поведение операционной системы (ОС) и интерфейсов прикладного программирования (API), а также двоичные интерфейсы приложений (ABI), соответствующие этим API, являются в достаточной степени равными, т. е. «совместимыми».
Такой термин, как обратная совместимость, обычно подразумевает совместимость объектного кода. Это означает, что новое компьютерное оборудование и/или программное обеспечение имеет (практически) все функции старого, а также дополнительные возможности или производительность. Таким образом, старый исполняемый код будет работать без изменений на новом продукте. Для скомпилированной программы, работающей непосредственно на ЦП под ОС, «бинарно совместимая операционная система» в первую очередь означает совместимость двоичного интерфейса приложения (ABI) с другой системой. Однако это также часто подразумевает, что API, от которых приложение зависит, напрямую или косвенно (например , API Windows ), достаточно похожи. Аппаратное обеспечение (помимо ЦП, например, для графики) и периферийные устройства, к которым приложение получает доступ, также могут быть фактором полной совместимости, хотя многие аппаратные различия скрыты современными API (часто частично предоставляемыми самой ОС, а частично — конкретными драйверами устройств ).
В других случаях для обеспечения работы несовместимых с двоичным кодом программ необходимо использовать общее портирование программного обеспечения.
Двоичная совместимость является важным преимуществом при разработке компьютерных программ, которые должны работать на нескольких ОС. Несколько ОС на основе Unix , такие как FreeBSD или NetBSD , предлагают двоичную совместимость с более популярными ОС, такими как ОС на основе Linux , поскольку большинство исполняемых двоичных файлов обычно не распространяются для таких ОС.
Большинство ОС обеспечивают двоичную совместимость в каждой версии ОС для большинства двоичных файлов, созданных для запуска в более ранних версиях ОС. Например, многие исполняемые файлы, скомпилированные для Windows 3.1 , Windows 95 или Windows 2000, также могут быть запущены в Windows XP или Windows 7 , а многие приложения для DOS работали в гораздо более новых версиях Windows вплоть до Windows 10 до тех пор, пока поддерживался NTVDM .
Для цифрового процессора, реализованного в аппаратном обеспечении, двоичная совместимость означает, что (большое подмножество) машинного кода , созданного для другого процессора, может быть правильно выполнено и иметь (практически) тот же эффект, что и на другом процессоре. Это довольно распространено среди многих семейств процессоров, хотя это довольно необычно среди вездесущих небольших встраиваемых систем, построенных вокруг таких процессоров. Полная совместимость машинного кода здесь подразумевает точно такую же компоновку процедур обслуживания прерываний , портов ввода-вывода, аппаратных регистров , счетчиков/таймеров, внешних интерфейсов и так далее. Для более сложной встраиваемой системы, использующей больше уровней абстракции (иногда на границе с обычным компьютером, таким как мобильный телефон), это может быть иначе.
Двоично-совместимые операционные системы — это ОС, которые нацелены на реализацию двоичной совместимости с другой ОС или другим вариантом той же марки. Это означает, что они совместимы с ABI (для двоичного интерфейса приложений ). Поскольку работа ОС заключается в запуске программ, архитектуры набора инструкций, на которых работают ОС, должны быть одинаковыми или совместимыми. В противном случае программы могут использоваться в эмуляторе ЦП или более быстром механизме динамической трансляции, чтобы сделать их совместимыми.
Например, ядро Linux несовместимо с Windows. Это не означает, что Linux не может быть двоично совместим с приложениями Windows. Доступно дополнительное программное обеспечение Wine , которое в некоторой степени делает это. Усилия по разработке ReactOS направлены на создание ОС с открытым исходным кодом , свободно распространяемой , двоично совместимой с семейством ОС Windows NT от Microsoft, использующей Wine для совместимости приложений и переписывающей ядро Windows для дополнительной совместимости, например, для драйверов, тогда как Linux будет использовать драйверы Linux, а не драйверы Windows. FreeBSD и другие члены семейства BSD имеют двоичную совместимость с ядром Linux в пользовательском режиме , транслируя системные вызовы Linux в вызовы BSD. Это позволяет коду приложений и библиотек, работающему в ОС на базе Linux, также работать в BSD.
Обратите внимание, что двоично-совместимая ОС отличается от запуска альтернативной ОС посредством виртуализации или эмуляции , которая выполняется для запуска программного обеспечения в альтернативной ОС в случае, когда хостовая ОС несовместима. Иногда виртуализация предоставляется вместе с хостовой ОС (или такое программное обеспечение можно получить), что фактически делает хостовую ОС совместимой с программами. Например, режим Windows XP для Windows 7 позволяет пользователям запускать 64-разрядную версию Windows 7 и позволяет старому программному обеспечению по-прежнему работать на 32-разрядной виртуальной машине под управлением Windows XP ; VMware Workstation / VMware Fusion , Parallels Workstation и Windows Virtual PC позволяют запускать другие ОС на Windows, Linux и macOS.
Другой пример: Mac OS X на PowerPC могла запускать Mac OS 9 и более ранние прикладные программы через Classic , но это не делало Mac OS X двоично совместимой ОС с Mac OS 9. Вместо этого в среде Classic фактически работала Mac OS 9.1 на виртуальной машине , работающей как обычный процесс внутри Mac OS X. [1] [2]
Classic Startup — это приложение Mach-O, которое запускает Mac OS 9 в своем адресном пространстве. Оно обеспечивает уровень абстракции оборудования между Mac OS 9 и Mac OS X, виртуализируя ловушки, системные вызовы и прерывания. Оно работает в защищенной среде памяти, с несколькими процессами Mac OS 9 внутри него, наложенными поверх одного процесса Mac OS X BSD.