Що робить програми OSX не доступними для роботи в Linux?


40

Я знаю, що існує багато відмінностей між OSX та Linux, але що робить їх настільки різними, що робить їх принципово несумісними?


5
Ну чому ви очікуєте запуску програм OSX в Linux? Що про ці дві конкретні ОС змушує вас згадати їх у питанні, але не будь-яка інша ОС, яка також не може запускати програми OSX?
wrosecrans

6
Це в основному моє питання. OSX працює на ядрі Unix. Мені було цікаво, що про це робить його особливим порівняно з іншими unix / linuxes
Falmarri

6
Всередині бінарних файлів є потаємні маленькі яблука, які бачать лише машини Mac bo
bobobobo

Зазвичай різні ОС не можуть запускати бінарні файли один одного; ось чому практика розповсюдження програмного забезпечення як вихідних тарболів виросла навколо Unix. Ні MacOS, ні Linux не є особливими в цьому відношенні: це було б щось особливе, якби будь-який міг запускати бінарні файли інших. Більш обґрунтований коментар, що відповідає на коментар wrosecrans, абсолютно не вистачає суті в цьому. : /
Пітер Кордес

Відповіді:


56

Весь ABI відрізняється, не тільки двійковий формат (Mach-O проти ELF), як згадується sepp2k.

Наприклад, хоча і Linux, і Darwin / XNU (ядро OS X) використовують scPowerPC та int 0x80/ sysenter/ syscallна x86 для входу в syscall, звідти не так багато спільного.

Дарвін направляє від'ємні числа сис-калів на мікроядра Mach і позитивні числа sscall на монолітному ядрі BSD - див. Xnu / osfmk / mach / syscall_sw.h та xnu / bsd / kern / syscalls.master . Номери системних викликів Linux залежать від архітектури - див. Linux / arch / powerpc / include / asm / unistd.h , linux / arch / x86 / include / asm / unistd_32.h та linux / arch / x86 / include / asm / unistd_64.h - але всі вони негативні. Тож очевидно, що числа системних викликів , аргументи системних викликів і навіть які систематичні виклики існують різні.

Стандартні бібліотеки виконання C теж відрізняються; Дарвін здебільшого успадковує libc FreeBSD, тоді як Linux зазвичай використовує glibc (але існують альтернативи, такі як eglibc та dietlibc та uclibc та Bionic).

Не кажучи вже про те, що весь графічний стек відрізняється; ігноруючи цілі бібліотеки Cocoa Objective-C, програми GUI на OS X спілкуються з WindowServer через порти Mach, тоді як у Linux програми GUI зазвичай спілкуються з сервером X через розетки домену UNIX за допомогою протоколу X11. Звичайно, є винятки; ви можете запустити X у Дарвіні, а ви можете обійти X в Linux, але програми X X, безумовно, не говорять.

Як і Вино, якщо хтось вкладе твір

  • реалізація двійкового завантажувача для Mach-O
  • захоплюючи кожну системну виклик XNU і перетворюючи її на відповідні системні дзвінки Linux
  • написання заміни для бібліотек OS X, як, наприклад, CoreFoundation
  • написання заміни для служб OS X, як, наприклад, WindowServer

тоді можливо запустити програму OS X "споконвічно" на Linux. Роки тому Кайл Моффет провів деяку роботу над першим пунктом, створивши прототип binfmt_mach-o для Linux, але він так і не був завершений, і я не знаю жодних інших подібних проектів.

(Теоретично це цілком можливо, і подібні зусилля докладалися багато разів; крім Wine, сам Linux має підтримку запуску бінарних файлів інших UNIX, таких як HP-UX і Tru64, і проект Glendix має на меті привести сумісність плану 9 Linux.)


Хто - то вже поставив в спробі реалізувати Mach-O двійковий завантажувач і API перекладач для Linux!

shinh / maloader - GitHub застосовує винний підхід до завантаження бінарних даних та захоплення / перекладу всіх бібліотечних викликів у просторі користувачів. Він повністю ігнорує системні виклики та всі бібліотеки, пов’язані з графікою, але цього достатньо для роботи багатьох консольних програм.

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


Нові зусилля будуть набагато частіше використовувати binfmt_misc, ніж будь-який власний код ядра, чи не так?
СамБ

@SamB: Ви коли-небудь намагалися налаштувати обробник binfmt_misc в chroot? Я думаю, що цілком розумно обробляти бінарні формати для інших UNIX-подібних систем у ядрі.
ефеміент

1
Моє запитання: якщо у вас є бінарні файли ОС X для запуску в Linux, навіщо вам потрібно переписувати бібліотеки та служби OS X? Хіба б вони не працювали без змін у Linux на той момент? Це лише юридичні питання?
Hubro

20

Чому додатки OSX не працюватимуть на Linux:

Перш за все, OSX використовує інший бінарний формат, ніж Linux, тому Linux не може виконувати бінарні файли, складені для OSX (так само, як він не може виконувати бінарні файли, складені для Windows або BSD).

По-друге, якщо ви говорите про додатки GUI, інструментарій графічного інтерфейсу Apple Cocoa a) доступний лише для OSX, а b) не працює над X11.

Чому немає еквівалентного вина для програм OSX:

Потрібно було зробити багато роботи, перш ніж вино було наполовину придатним. Оскільки попит на еквівалент OSX не такий великий, ще ніхто не вкладав стільки ж зусиль у такий проект.


Знаєте, я навіть не розумів, що OSX / unix не використовує той самий бінарний формат. Чи є у вас посилання на більшу інформацію щодо цього?
Falmarri

Falmarri: OSX використовує формат Mach-O , Linux використовує ELF .
sepp2k

1
@Falmarri Не всі UNIX використовують однаковий бінарний формат, і хоча майже всі сучасні використовують ELF, ти все одно не можеш запускати двійковий файл з одного UNIX на інший. Хек, я не думаю, що FreeBSD навіть гарантує, що ви можете запустити програму для 7.x на 8.x або навпаки, тоді як програма Linux для 1.0 повинна ще працювати на 2.6.x.
ефемія

5

Найважливіша причина, чому додатки OS X не працюватимуть на Linux, полягає в тому, що ці ОС використовували різні системні виклики.

Деякі попередні відповіді згадали про бібліотеки, але це, як правило, не так - Core Foundation значною мірою відкритий джерелом Apple під назвою CFLite і легко переноситься на будь-яку платформу (версія Windows iTunes насправді розташована на порту Windows в Core Foundation, а також з Деякі налаштування компілятора ви можете безпосередньо зробити CFLite, використовуючи кланг на дистрибутиві Linux), а також існують зусилля з відкритими джерелами, щоб перенести середовище Objective-C, в основному Foundation і AppKit до Linux, особливо GNUstep, GNU-реалізація OpenStep, яка датується раніше, ніж какао Apple (розпочалося, коли ще була компанія NeXT Computer.)

Якщо хтось визначений, він може спроектувати завантажувач, який буде захоплювати кожну системну виклику Mach-O і переводити її у відповідну системну виклик Linux, а також динамічно зв'язувати ці "аналоги" бібліотеки з відкритим кодом до двійкового файла з відповідним перекладом ABI.

І тільки для вашої інформації, якщо ви можете отримати вихідний код програми Mach-O, ви можете розглянути його порт, і це може виявитися дуже простим. Наприклад, додаток TextEdit, що постачається з ОС X 10.6, можна безпосередньо перекомпілювати, посилаючись на GNUstep, після вилучення декількох рядків (некритичного) коду CF і, таким чином, негайно доступний під Linux (не кажучи вже про TextEdit, що постачається з GNUstep, насправді був пряма перекомпіляція програми TextEdit від NeXTSTEP, попередника для OS X, навіть зберігаючи свою етикетку "© 1995 NeXT"). TextEdit знаходиться під ліцензією BSD.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.