web-dev-qa-db-ja.com

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

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

15
Nick Pierpoint

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はそれを非常に簡単に行うことができますが、ビジネスモデル全体がプラットフォーム全体(ハードウェアとソフトウェア)の独自性であるため、そうする理由はありません。
誰かがライブラリのクローンを作成しようとする可能性は考えられますが、それを行うには数十年かかり、文書化されていないすべての呼び出しを複製する必要があるため、おそらく正しくありません。

23
fretje

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

2
Mark

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

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

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

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

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

Cocotron というプロジェクトがあります。これは「Apple Inc.のCocoaドキュメントで説明されているものと同様のクロスプラットフォームのObjective-CAPIを実装することを目的としています」移植がはるかに簡単になる可能性がありますが、最近の活動はほとんどないようです(最後のブログ投稿は2008年12月でした)

1
dbr

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

1
Kent Boogaart