Ponieważ system operacyjny Apple OS-X jest pochodną UNIX (BSD), a architektura Mac (Intel) leżąca u jego podstaw jest taka sama, dlaczego uruchomienie aplikacji specyficznych dla Apple w systemie Linux nie jest takie proste?
Ponieważ system operacyjny Apple OS-X jest pochodną UNIX (BSD), a architektura Mac (Intel) leżąca u jego podstaw jest taka sama, dlaczego uruchomienie aplikacji specyficznych dla Apple w systemie Linux nie jest takie proste?
Odpowiedzi:
OS X jest właściwie (głównie) zastrzeżoną powłoką graficzną na BSD. Aby utworzyć aplikację GUI OS X, należy postępować zgodnie z interfejsem API udostępnionym przez Apple, a zatem nie jest to platforma wieloplatformowa i nie jest łatwa do przenoszenia.
Dlatego większość bibliotek można łatwo przenosić (właściwie większość jest rozwijana w systemie Linux) na Linuksa, ale nie ich powłoki graficzne.
Na marginesie: istnieją frameworki, za pomocą których można tworzyć wieloplatformowe aplikacje GUI. Przychodzi mi na myśl Qt . Ale fakt, że te platformy są wieloplatformowe, powoduje również, że tworzone z nimi aplikacje są mniej przyjazne dla użytkownika na określonej platformie niż „natywna” aplikacja GUI. Ramy te sprawiają, że wszystko wygląda ogólnie na różnych platformach, co w przypadku Apple jest złe, ponieważ Apple stworzyło bardzo specyficzne środowisko użytkownika, które nie łatwo „pasuje” do innych platform.
Edycja (w celu uwzględnienia komentarzy w odpowiedzi - dzięki @Nick, @kbisset i @John):
Rozwiązaniem byłoby przeniesienie całej powłoki graficznej OS X (zamknięte biblioteki Cocoa / Core - co sprawia, że OS X jest naprawdę wyjątkowy ) do systemu Linux. I technicznie Apple może to zrobić dość łatwo, ale nie mają powodu, ponieważ cały ich model biznesowy to wyjątkowość całej platformy - sprzętu i oprogramowania.
Można sobie wyobrazić, że ktoś mógłby spróbować sklonować biblioteki, ale zajęłoby to dziesięciolecia i prawdopodobnie nigdy nie byłoby to właściwe ze względu na wszystkie nieudokumentowane wywołania, które musiałyby być replikowane.
Warstwa graficzna wcale nie jest taka sama. OS X używa zastrzeżonego frameworka graficznego, Linux używa X (X11 / X.org)
Prawie wszystkie natywne aplikacje OS X używają frameworków, takich jak Cocoa, CoreAnimation itd., Które są dostępne tylko w OS X.
Załóżmy na przykład, że masz aplikację, która przechowuje hasło użytkownika - w systemie OS X używałby to systemu pęku kluczy i odpowiednich interfejsów API. Jeśli miałbyś przenieść to na Linuksa, nie ma bezpośredniego odpowiednika, więc musiałbyś zaimplementować całą tę funkcję. Jest to niewielka funkcja i wymagałaby dużego przepisania.
Jeśli napiszesz aplikację przy użyciu wieloplatformowej biblioteki GUI, takiej jak GTK, Qt lub wxWidgets, a przenoszenie będzie znacznie łatwiejsze (lub „możliwe”) - ale systemy operacyjne są nadal bardzo różne pod względem interfejsu użytkownika (na przykład systemu operacyjnego X używa oddzielnego paska menu, podczas gdy Linux zwykle ma swój pasek menu dla każdego okna)
Jednym z najlepszych portów międzyplatformowych, jakie widziałem, jest Transmission , która implementuje swoją główną funkcjonalność jako bibliotekę (która zawiera możliwie najmniej kodu specyficznego dla platformy), a następnie tworzy osobne GUI dla każdej platformy osobno. Oznacza to, że każdy port ma dużo kodu, ale wszystkie mają dobre, natywne interfejsy (zamiast jednego interfejsu, który ładnie pasuje do Linuksa, ale nie ma go w systemie OS X lub odwrotnie)
Istnieje projekt o nazwie Cocotron, który „ma na celu wdrożenie wieloplatformowego interfejsu API Objective-C podobnego do opisanego w dokumentacji Cocoa firmy Apple Inc.”, który potencjalnie ułatwiłby przenoszenie, ale wydaje się, że późno niewiele się dzieje (ostatni post na blogu miał miejsce w grudniu 2008 r.)
Ponieważ większość aplikacji zależy znacznie bardziej od procesora i podstawowej architektury komputera, na którym działa. Zależą również od zestawów narzędzi interfejsu użytkownika i innych bibliotek specyficznych dla platformy.