すべてのMacアプリケーションがLinuxに簡単に移植できないのはなぜですか?


15

Apple OS-XオペレーティングシステムはUNIX派生(BSD)であり、基礎となる(Intel)Macアーキテクチャは同じであるため、LinuxでApple固有のアプリケーションを実行するのが非常に簡単ではないのはなぜですか?

回答:


23

OS Xは、実際には(主に)BSD上の独自のグラフィカルシェルです。OS X GUIアプリケーションを作成するには、Appleが公開したAPIに従う必要があります。したがって、これはクロスプラットフォームではなく、簡単に移植できません。
そのため、ほとんどのライブラリ Linuxに簡単に移植できます(実際にはほとんどがLinuxで開発されています)が、グラフィカルシェルではありません

補足説明:クロスプラットフォームGUIアプリケーションを作成できるフレームワークがあります。Qtが思い浮かびます。しかし、これらのフレームワークがクロスプラットフォームであるという事実は、それらで作成されたアプリケーションを、「ネイティブ」GUIアプリケーションよりも特定のプラットフォームでユーザーフレンドリーにしません。これらのフレームワークは、すべてのプラットフォームですべてが汎用的に見える傾向があります。Appleの場合、Appleは他のプラットフォームに簡単に「適合しない」非常に特殊なユーザーエクスペリエンスを作成したため、悪いです。

編集(回答にコメントを組み込む-@ Nick、@ kbisset、@ Johnに感謝):
解決策は、OS Xグラフィカルシェル全体(クローズドソースのCocoa / Coreライブラリ-OS Xを本当にユニークにするもの)を移植することです)Linuxへ。技術的には、Appleはそれを非常に簡単に行うことができましたが、ビジネスモデル全体がプラットフォーム全体(ハードウェアとソフトウェア)の一意性であるため、理由はありません。
誰かがライブラリのクローンを作成しようとすることは考えられますが、それは数十年を要し、おそらく複製されなければならないすべての文書化されていない呼び出しのために正しくないでしょう。


BSD上で実行されている場合、なぜ独自のグラフィカルシェルをLinuxに比較的簡単に移植できないのですか?基礎となるアーキテクチャが異なる場合の問題は理解しましたが、基礎となるアーキテクチャはインテルだけで、グラフィカルシェルは単なるライブラリではないのはなぜですか?
ニックピアポイント09

8
2つの理由。まず、それは単なるグラフィカルなシェルではありません。Appleが長年取り組んでいるのは、Unixの上の完全な層です。第二に、コードは利用できません。したがって、最初から書き直す必要があります。Appleはおそらく短期間でそれを行うことができますが、そうする理由はありません。
KeithB 09

1
だから... Appleにとっては、少なくとも技術的な問題は少なくともありません。すでにUNIXで実行しているので、OS-XをLinuxで比較的簡単に移行できます。コードがクローズドソースであり、完全に公開されたAPIがないため、明らかに他のすべての人にとって大きな問題です。それは公正な要約ですか?
ニックピアポイント09

3
ニック:基本的にははい。AppleはOSXをLinuxプラットフォームに移行することに興味がありません。オープンソースのダーウィンプラットフォーム(BSDレイヤー)とクローズドソースのCocoa / Core *ライブラリ(OSXが本当にユニークなもの)に多くの投資をしたのに、なぜ彼らがすべきなのでしょうか。彼らのビジネスモデル全体は、プラットフォーム全体(ハードウェアとソフトウェア)の一意性です。誰かがライブラリのクローンを作成しようとすることは考えられますが、それは数十年を要し、おそらく複製されなければならないすべての文書化されていない呼び出しのために正しくないでしょう。そして、何のために?
ジョンルディ

4
GNUStepは現在OS Xにある多くのコアライブラリのオープンソース実装ですが、それ以来Appleは多くを追加したので、移植はまだそれほど簡単ではありません:wiki.gnustep.org/index.php/Cocoa
TRS-80

2

Apple固有のアプリケーションとは、GUIアプリのことですか?コマンドラインの上に移動すると、Linuxでサポートされていないすべて(グラフィック、サウンドなど)のApple固有のAPIが存在するため、アプリケーションを簡単に移植できません。


1

グラフィカルレイヤーはまったく同じではありません。OS Xは独自のグラフィカルフレームワークを使用し、LinuxはX(X11 / X.org)を使用します

ほとんどすべてのネイティブOS Xアプリケーションは、Cocoa、CoreAnimationなどのフレームワークを使用しますが、これらはOS Xでのみ利用可能です。

たとえば、ユーザーのパスワードを保存するアプリケーションがあるとします-OS Xでは、これはキーチェーンシステムと関連するAPIを使用します。これをLinuxに移植する場合、直接対応するものはないため、この機能全体を再実装する必要があります。これは小さな機能であり、大規模な書き換えが必要になります。

GTK、Qt、wxWidgetsなどのクロスプラットフォームGUIライブラリを使用してアプリケーションを記述し、移植がはるかに簡単(または「可能」)になりますが、オペレーティングシステムはUI(OSなど)の点で非常に異なりますXは分離されたメニューバーを使用しますが、Linuxはウィンドウごとにメニューバーを持つ傾向があります)

私が見た中で最高のクロスプラットフォームポートの1つはTransmissionです。これは 、ライブラリとして主な機能を実装し(プラットフォーム固有のコードをできる限り少なくします)、各プラットフォーム用にネイティブGUIを個別に作成します。これは、各ポートが多くのコードを共有することを意味しますが、すべてが適切なネイティブインターフェイスを備えています(Linuxにうまく適合するが、OS Xでは場違いである、またはその逆の単一のインターフェイスではありません)

Cocotronと呼ばれるプロジェクトがあります。これは、移植をはるかに容易にする可能性のある「Apple Inc.のCocoaドキュメントで説明されているものに類似したクロスプラットフォームObjective-C APIを実装しようとしています」 (最後のブログ投稿は2008年12月でした)


1

ほとんどのアプリケーションは、実行中のマシンのプロセッサおよび基盤となるアーキテクチャよりもはるかに依存しているためです。また、ユーザーインターフェイスツールキットおよびその他のプラットフォーム固有のライブラリにも依存しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.