# Linux HowTo (як зробити)
# Книги та керівництва
# Матеріали англійською мовою
Якщо зазвичай досягнення мобільності прикладних програм є метою прикладних програмістів, то іноді досягнення бінарної сумісності при виконанні прикладних програм є завданням розробників операційних систем. Під бінарної сумісністю операційної системи О2 з операційною системою О1 розуміється можливість виконання в середовищі О2 без перекомпіляції (а, можливо, і без перекомпонування) додатків, написаних для виконання в середовищі О1. Природно, що бінарна сумісність двох операційних середовищ теоретично досяжна тільки в тому випадку, коли обидві операційні системи О1 і О2 базуються на деякій загальній апаратній платформі (реально, найчастіше доводиться чути про бінарної сумісності різних варіантів ОС UNIX, що працюють на платформах Intel).
Двійкова сумісність нової операційної системи з деякою існуючої ОС потрібно в тому випадку, коли, по-перше, необхідно довести користувачам, що нова система не тільки володіє новими якостями, але і настільки технологічна, що може виконувати існуючі програми навіть без потреби їх перекомпіляції. По-друге, двійкова сумісність дозволяє негайно зробити доступним в новій операційній середовищі весь накопичений в старому середовищі багаж додатків (вихідні тексти яких будуть, швидше за все, недоступні), що може виявитися дуже істотним для потенційних кінцевих користувачів (споживачів додатків) нової системи.
Звичайно, перш за все потрібна повна апаратна сумісність використовуваних платформ (по крайней мере, на рівні користувача). Далі можливі два варіанти. У першому, більш простому варіанті забезпечується двоичная сумісність в сенсі використання в новій операційній середовищі об'єктних файлів, відкомпільованих в розрахунку на колишню операційне середовище. Для отримання виконуваної програми в новому середовищі потрібно перекомпонування програми (звичайно, для цього компоновщик виконуваних програм нової ОС повинен розуміти структуру об'єктних модулів старої системи). Цей варіант близький до підходу переносимості програм на рівні вихідних текстів, оскільки старі об'єктні модулі містять тільки користувальницький код і виклики бібліотечних функцій і, очевидно, будуть виконуватися в новому середовищі без проблем. Все, що залишається зробити (але це дуже непросте завдання) - це домогтися повної сумісності зі старою середовищем на рівні системних бібліотек усіх рівнів. Потрібно зауважити, що цей вид бінарної сумісності не надто ефектний і не дуже практичний, оскільки набори об'єктних файлів додатків отримати не набагато простіше, ніж їх вихідні тексти. Зазвичай доступні виконуються програми.
У другому варіанті в новій операційній системі можливе виконання побудованих в старій операційному середовищі виконуваних файлів. Це вже повністю скомпоновані програми, що містять, крім звичайних користувальницьких команд, тільки спеціальні команди виклику функцій ядра операційної системи (зазвичай, різновиди команди trap). З одного боку, для забезпечення цього виду бінарної сумісності не потрібно відтворювати весь набір бібліотек старої операційного середовища, але, з іншого боку, потрібно повністю відтворити інтерфейс з ядром старої операційної системи на найнижчому рівні. Зрозуміло, що це здійсненне, але важка технічна задача (оскільки деталі цього інтерфейсу зазвичай публічно недоступні).
Про переваги підходу бінарної сумісності ми вже сказали на початку цього розділу: залучення прикладних програмістів можливістю використовувати свої старі програми без будь-яких переробок і залучення кінцевих користувачів можливістю використовувати всі накопичені додатки.