Бінарна сумісність (сумісність на рівні двійкового коду або сумісність об'єктного коду) — це властивість комп'ютерної системи, яка означає, що вона може виконувати той самий виконуваний код, зазвичай машинний код для комп'ютера з центральним процесором (CPU), який може виконувати інша комп'ютерна система. Натомість сумісність початкового коду означає, що перед запуском програми в сумісній системі необхідні повторна компіляція або інтерпретація.

Для скомпільованої програми в операційній системі бінарна сумісність часто означає, що не лише CPU (набори інструкцій) двох комп'ютерів є бінарно сумісними, але й інтерфейси та поведінка операційних систем (ОС) і інтерфейсів прикладного програмування (API), а також бінарних інтерфейсів застосунків (ABI), що відповідають цим API, є достатньо однаковими, тобто «сумісними».

Термін на кшталт зворотно сумісний зазвичай передбачає сумісність об'єктного коду. Це означає, що новіше комп'ютерне апаратне та/або програмне забезпечення має (практично) всі можливості старого, а також додаткові можливості або вищу продуктивність. Таким чином, старіший виконуваний код працюватиме без змін на новішому продукті. Для скомпільованої програми, яка безпосередньо виконується на CPU під керуванням ОС, «бінарно сумісна операційна система» насамперед означає сумісність бінарного інтерфейсу застосунків (ABI) з іншою системою. Однак це також часто означає, що API, від яких прямо або опосередковано залежить застосунок (наприклад, Windows API), є достатньо подібними. Апаратне забезпечення (крім CPU, наприклад для графіки) та периферійні пристрої, до яких звертається застосунок, також можуть бути чинником повної сумісності, хоча багато апаратних відмінностей приховуються сучасними API (які часто частково надаються самою ОС, а частково — специфічними драйверами пристроїв).

В інших випадках для забезпечення роботи програм, несумісних на бінарному рівні, необхідно застосовувати загальне портування програмного забезпечення.

Бінарна сумісність є значною перевагою під час розроблення комп'ютерних програм, призначених для роботи в кількох ОС. Деякі ОС на основі Unix, такі як FreeBSD або NetBSD, забезпечують бінарну сумісність із популярнішими ОС, такими як похідні від Linux, оскільки для таких ОС зазвичай поширюється небагато бінарних виконуваних файлів.

Більшість ОС забезпечують бінарну сумісність у кожній версії ОС для більшості бінарних файлів, створених для роботи в попередніх версіях ОС. Наприклад, багато виконуваних файлів, скомпільованих для Windows 3.1, Windows 95 або Windows 2000, також можуть виконуватися в Windows XP або Windows 7, а багато застосунків для DOS працювали на значно новіших версіях Windows аж до Windows 10, доки підтримувалася NTVDM.

Апаратне забезпечення з бінарною сумісністю

Для цифрового процесора, реалізованого апаратно, бінарна сумісність означає, що (велика підмножина) машинного коду, створеного для іншого процесора, може бути коректно виконана та має (майже) такий самий ефект, як і на іншому процесорі. Це досить поширено серед багатьох сімейств процесорів, хоча досить рідко зустрічається серед повсюдно поширених малих вбудованих систем, побудованих на таких процесорах. Повна сумісність машинного коду в цьому випадку передбачала б точно таке саме розташування опрацьовувачів переривань, портів вводу-виводу, апаратних регістрів, лічильників/таймерів, зовнішніх інтерфейсів тощо. Для складнішої вбудованої системи, що використовує більше рівнів абстракції (іноді на межі із загальним комп'ютером, як-от мобільний телефон), це може бути інакше.

Операційні системи з бінарною сумісністю

Операційні системи з бінарною сумісністю — це ОС, які мають на меті реалізувати бінарну сумісність з іншою ОС або іншим варіантом тієї самої марки. Це означає, що вони сумісні на рівні ABI (для бінарного інтерфейсу застосунків). Оскільки завданням ОС є виконання програм, архітектури наборів інструкцій, на яких працюють ОС, мають бути однаковими або сумісними. В іншому випадку для забезпечення їхньої сумісності програми можуть виконуватися в емуляторі CPU або за допомогою швидшого механізму динамічної трансляції.

Наприклад, ядро Linux несумісне з Windows. Це не означає, що Linux не може бути бінарно сумісним із застосунками Windows. Існує додаткове програмне забезпечення, Wine, яке певною мірою забезпечує таку сумісність. Метою проєкту ReactOS є створення відкритої, вільної ОС, бінарно сумісної із сімейством ОС Microsoft Windows NT, з використанням Wine для сумісності застосунків та повторною реалізацією ядра Windows для забезпечення додаткової сумісності, зокрема для драйверів, тоді як Linux використовував би драйвери Linux, а не драйвери Windows. FreeBSD та інші члени сімейства BSD мають бінарну сумісність із ядром Linux у користувацькому режимі шляхом трансляції системних викликів Linux у системні виклики BSD. Це дає змогу виконувати код застосунків і бібліотек, що працюють на ОС на основі Linux, також і в BSD.

Зазначимо, що бінарно сумісна ОС відрізняється від запуску альтернативної ОС за допомогою віртуалізації або емуляції, що робиться для запуску програмного забезпечення всередині альтернативної ОС у випадку, коли основна ОС є несумісною. Іноді віртуалізація надається основною ОС (або таке програмне забезпечення можна отримати), що фактично робить основну ОС сумісною з програмами. Наприклад, Windows XP Mode для 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.

Див. також Зворотна сумісність Двійковий програмний інтерфейс (ABI) Сумісність (інформатика) Сумісність за помилками Сумісність роз'ємів Ремейк відеогри Бінарний файл для кількох архітектур

Примітки

Посилання KDE Techbase Policies – a compendium of C++ development rules of thumb (with some examples) for not breaking binary compatibility between releases of a library. ABI Analysis Tools a set of open-source tools for analysis of ABI and backward binary compatibility implementing KDE Techbase Policies