Оскільки операційна система Apple OS-X є похідною UNIX (BSD), а основна архітектура (Intel) Mac однакова, чому не дуже просто отримати спеціальні програми Apple, які працюють під Linux?
Оскільки операційна система Apple OS-X є похідною UNIX (BSD), а основна архітектура (Intel) Mac однакова, чому не дуже просто отримати спеціальні програми Apple, які працюють під Linux?
Відповіді:
OS X є фактично (в основному) фірмовою графічною оболонкою на вершині BSD. Щоб створити додаток для графічного інтерфейсу OS X, слід дотримуватися api, який викрив Apple, і, отже, це не є кросплатформою і не легко переноситься.
Ось чому більшість бібліотек є легко перенести ( на насправді більшість з них розроблені на Linux) для Linux , але НЕ їх графічних оболонок.
Зі сторони: Там є рамки, за допомогою яких можна створювати міжплатформенні програми GUI. Qt приходить на думку. Але той факт, що ці рамки є кросплатформою, також робить додатки, створені з ними, менш зручними для користувачів на певній платформі, ніж "рідний" додаток GUI. Ці рамки мають тенденцію до того, що все виглядає загально на всіх платформах, що у випадку Apple погано, оскільки Apple створила дуже специфічний досвід для користувачів, який не так легко «вписується» в інші платформи.
Редагувати (щоб включити коментарі у відповідь - дякую @Nick, @kbisset та @John):
Рішенням було б перенести всю графічну оболонку OS X (бібліотеки Cocoa / Core із закритим кодом - закрите джерело X X справді унікальною ) до Linux. А технічно Apple може зробити це досить легко, але у них немає підстав, оскільки вся їхня бізнес-модель - це унікальність всієї їх платформи - апаратного та програмного забезпечення.
МОЖЛИВО, що хтось може спробувати клонувати бібліотеки, але це займе людину десятиліттями, і, ймовірно, ніколи не буде правильним через усі незадокументовані дзвінки, які повинні бути повторені.
Графічний шар зовсім не однаковий. OS X використовує власну графічну рамку, linux використовує X (X11 / X.org)
Практично всі вбудовані програми X X використовують рамки, такі як Cocoa, CoreAnimation тощо, які доступні лише в OS X.
Наприклад, скажімо, у вас є додаток, який зберігає пароль для користувача - в OS X це використовує його систему Keychain та відповідні API. Якщо ви повинні перенести це на Linux, прямого еквівалента немає, тому вам доведеться повторно застосовувати всю цю функцію. Це крихітна особливість, і вона потребує великого переписування.
Якщо ви пишете заявку, використовуючи міжплатформенну бібліотеку графічного інтерфейсу, наприклад GTK, Qt або wxWidgets, і перенос буде набагато простіше (або, "можливо") - але операційні системи все ще сильно відрізняються з точки зору користувальницького інтерфейсу (наприклад, ОС X використовує відокремлений рядок меню, тоді як у Linux зазвичай є рядок меню для кожного вікна)
Один з найкращих кросплатформенних портів, які я бачив, - Transmission , який реалізує свою основну функціональність як бібліотеку (яка містить якомога менше коду, що залежить від платформи), а потім створює власні графічні інтерфейси для кожної платформи окремо. Це означає, що кожен порт має багато коду, але у всіх є хороші вбудовані інтерфейси (а не єдиний інтерфейс, який чудово вписується в Linux, але він не на місці в OS X, або навпаки)
Існує проект під назвою Cocotron, який «має на меті впровадити міжплатформенний API Objective-C, аналогічний описаному в документації Apple Inc. (остання публікація в блозі була в грудні 2008 року)
Оскільки більшість програм залежать від набагато більше, ніж процесор та основна архітектура машини, на якій вони працюють. Вони також залежать від наборів інструментів користувальницького інтерфейсу та інших певних платформ.