Я знаю, що існує багато відмінностей між OSX та Linux, але що робить їх настільки різними, що робить їх принципово несумісними?
Я знаю, що існує багато відмінностей між OSX та Linux, але що робить їх настільки різними, що робить їх принципово несумісними?
Відповіді:
Весь ABI відрізняється, не тільки двійковий формат (Mach-O проти ELF), як згадується sepp2k.
Наприклад, хоча і Linux, і Darwin / XNU (ядро OS X) використовують sc
PowerPC та 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, безумовно, не говорять.
Як і Вино, якщо хтось вкладе твір
тоді можливо запустити програму OS X "споконвічно" на Linux. Роки тому Кайл Моффет провів деяку роботу над першим пунктом, створивши прототип binfmt_mach-o для Linux, але він так і не був завершений, і я не знаю жодних інших подібних проектів.
(Теоретично це цілком можливо, і подібні зусилля докладалися багато разів; крім Wine, сам Linux має підтримку запуску бінарних файлів інших UNIX, таких як HP-UX і Tru64, і проект Glendix має на меті привести сумісність плану 9 Linux.)
Хто - то вже поставив в спробі реалізувати Mach-O двійковий завантажувач і API перекладач для Linux!
shinh / maloader - GitHub застосовує винний підхід до завантаження бінарних даних та захоплення / перекладу всіх бібліотечних викликів у просторі користувачів. Він повністю ігнорує системні виклики та всі бібліотеки, пов’язані з графікою, але цього достатньо для роботи багатьох консольних програм.
Дарлінг базується на maloader, додаючи бібліотеки та інші підтримуючі біти виконання.
Чому додатки OSX не працюватимуть на Linux:
Перш за все, OSX використовує інший бінарний формат, ніж Linux, тому Linux не може виконувати бінарні файли, складені для OSX (так само, як він не може виконувати бінарні файли, складені для Windows або BSD).
По-друге, якщо ви говорите про додатки GUI, інструментарій графічного інтерфейсу Apple Cocoa a) доступний лише для OSX, а b) не працює над X11.
Чому немає еквівалентного вина для програм OSX:
Потрібно було зробити багато роботи, перш ніж вино було наполовину придатним. Оскільки попит на еквівалент OSX не такий великий, ще ніхто не вкладав стільки ж зусиль у такий проект.
Найважливіша причина, чому додатки 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.
8 грудня 2012 року стартував новий проект - Дарлінг.