Чому не всі програми Mac легко переносяться на Linux?


15

Оскільки операційна система Apple OS-X є похідною UNIX (BSD), а основна архітектура (Intel) Mac однакова, чому не дуже просто отримати спеціальні програми Apple, які працюють під Linux?

Відповіді:


23

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 може зробити це досить легко, але у них немає підстав, оскільки вся їхня бізнес-модель - це унікальність всієї їх платформи - апаратного та програмного забезпечення.
МОЖЛИВО, що хтось може спробувати клонувати бібліотеки, але це займе людину десятиліттями, і, ймовірно, ніколи не буде правильним через усі незадокументовані дзвінки, які повинні бути повторені.


Чому власну графічну оболонку неможливо порівняно легко перенести в Linux, якщо вона працює на BSD? Я зрозумів проблему, коли основна архітектура була іншою, але тепер основна архітектура - це лише Intel, чому тоді графічна оболонка не є ще однією бібліотекою?
Нік Пірпойнт

8
Дві причини. По-перше, це більше, ніж просто графічна оболонка. Це цілий шар над Unix, над яким Apple працює над роками. По-друге, код недоступний. Тож його потрібно було б переписати з нуля. Apple, ймовірно, може зробити це за короткий проміжок часу, але в них немає підстав.
KeithB

1
Отже ... для Apple принаймні не існує технічної проблеми - вони можуть мігрувати OS-X для роботи на Linux порівняно легко, оскільки вони вже працюють на UNIX. Очевидно, що велика справа для всіх інших, оскільки код є закритим джерелом і немає повністю опублікованого API. Це справедливий підсумок?
Нік Пірпойнт

3
Нік: По суті, так. Apple не має інтересу до переміщення OSX на платформу Linux; навіщо їм це робити, коли вони вклали стільки коштів у свою платформу Дарвіну з відкритим кодом (шар BSD) та їхні бібліотеки Cocoa / Core * із закритим кодом (що робить OSX справді унікальним). Вся їх бізнес-модель - це унікальність всієї їх платформи - апаратного та програмного забезпечення. МОЖЛИВО, що хтось може спробувати клонувати бібліотеки, але це займе людину десятиліттями, і, ймовірно, ніколи не буде правильним через усі незадокументовані дзвінки, які повинні бути повторені. І з якою метою?
Джон Руді

4
GNUStep - це реалізація з відкритим кодом багатьох основних бібліотек, які зараз перебувають у OS X, однак Apple з тих пір додала багато, тому перенесення все ще не так просто: wiki.gnustep.org/index.php/Cocoa
TRS-80

2

Під специфічними програмами Apple ви маєте на увазі програми GUI? Після переміщення над командним рядком з'являються специфічні API для Apple (для графіки, звуку тощо), які не підтримуються в Linux, отже, ви не можете легко переносити програми.


1

Графічний шар зовсім не однаковий. 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 року)


1

Оскільки більшість програм залежать від набагато більше, ніж процесор та основна архітектура машини, на якій вони працюють. Вони також залежать від наборів інструментів користувальницького інтерфейсу та інших певних платформ.

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