Dlaczego nie wszystkie aplikacje dla komputerów Mac można łatwo przenosić na system Linux?

15

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?

Nick Pierpoint
źródło

Odpowiedzi:

23

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.

fretje
źródło
Dlaczego zastrzeżona powłoka graficzna nie może być stosunkowo łatwo przeniesiona do Linuksa, jeśli działa na BSD? Rozumiałem problem, gdy podstawowa architektura była inna, ale teraz podstawową architekturą jest po prostu Intel, więc dlaczego powłoka graficzna nie jest jeszcze jedną biblioteką?
Nick Pierpoint
8
Dwa powody. Po pierwsze, to coś więcej niż tylko powłoka graficzna. Jest to cała warstwa powyżej Uniksa, nad którą Apple pracuje od lat. Po drugie, kod nie jest dostępny. Musiałby więc zostać przepisany od nowa. Apple prawdopodobnie może to zrobić w krótkim czasie, ale nie ma powodu, aby to robić.
KeithB
1
Więc ... dla Apple przynajmniej nie ma tak naprawdę problemu technicznego - mogliby migrować OS-X, aby działał na Linuksie stosunkowo łatwo, ponieważ już działa w systemie UNIX. Oczywiście wielka sprawa dla wszystkich innych, ponieważ kod jest zamkniętym źródłem i nie ma w pełni opublikowanego API. Czy to uczciwe podsumowanie?
Nick Pierpoint
3
Nick: Zasadniczo tak. Apple nie jest zainteresowany przeniesieniem OSX na platformę Linux; dlaczego mieliby to robić, skoro tyle zainwestowali w platformę Darwin typu open source (warstwa BSD) i biblioteki Cocoa / Core * o zamkniętym źródle (co sprawia, że ​​OSX jest naprawdę wyjątkowy). 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. I w jakim celu?
John Rudy,
4
GNUStep jest implementacją typu open source wielu podstawowych bibliotek, które są teraz w OS X, jednak Apple dodało wiele od tego czasu, więc przenoszenie nadal nie jest takie proste: wiki.gnustep.org/index.php/Cocoa
TRS-80
2

Przez aplikacje specyficzne dla Apple masz na myśli aplikacje GUI? Po przejściu powyżej linii poleceń istnieją interfejsy API specyficzne dla Apple do wszystkiego (grafika, dźwięk itp.), Które nie są obsługiwane w systemie Linux, dlatego nie można łatwo przenosić aplikacji.

znak
źródło
1

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.)

dbr
źródło
1

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.

Kent Boogaart
źródło