GNU/Linux >> Linux の 問題 >  >> Linux

Linux – LinuxでOsxプログラムを実行できない理由は何ですか?

OSXとLinuxには多くの違いがあることは知っていますが、それらがまったく異なる理由で、根本的に互換性がないのはなぜですか?

承認された回答:

sepp2kが述べたように、バイナリ形式(Mach-OとELF)だけでなく、ABI全体が異なります。

たとえば、LinuxとDarwin / XNU(OS Xのカーネル)はどちらもscを使用します PowerPCおよびint 0x80 / sysenter / syscall x86のsyscallエントリでは、それ以降の共通点はそれほど多くありません。

Darwinは、Machマイクロカーネルで負のシステムコール番号を、BSDモノリシックカーネルで正のシステムコール番号を指示します— xnu / osfmk / mach/syscall_sw.hおよびxnu/bsd / kern/syscalls.masterを参照してください。 Linuxのシステムコール番号はアーキテクチャによって異なります— linux / arch / powerpc / include / asm / unistd.h、linux / arch / x86 / include / asm / unistd_32.h、およびlinux / arch / x86 / include / asm/unistd_64.hを参照してください。 —しかし、すべて非負です。したがって、明らかにシステムコール番号、システムコール引数、さらには 存在するsyscallは異なります。

標準のCランタイムライブラリも異なります。ダーウィンは主にFreeBSDのlibcを継承しますが、Linuxは通常glibcを使用します(ただし、eglibcとdietlibc、uclibcとBionicなどの代替手段があります)。

グラフィックスタック全体が異なることは言うまでもありません。 Cocoa Objective-Cライブラリ全体を無視すると、OS XのGUIプログラムはMachポートを介してWindowServerと通信しますが、Linuxでは、GUIプログラムは通常X11プロトコルを使用してUNIXドメインソケットを介してXサーバーと通信します。もちろん例外もあります。ダーウィンではXを実行でき、LinuxではXをバイパスできますが、OSXアプリケーションは間違いなくXと通信しません。

ワインのように、誰かが作品を入れたら

  • Mach-O用のバイナリローダーの実装
  • すべてのXNUシステムコールをトラップして適切なLinuxシステムコールに変換する
  • 必要に応じてCoreFoundationなどのOSXライブラリの代替を作成する
  • 必要に応じてWindowServerなどのOSXサービスの代替品を作成する

そうすれば、Linux上でOSXプログラムを「ネイティブに」実行できる可能性があります。数年前、Kyle Moffetは最初のアイテムでいくつかの作業を行い、Linux用のプロトタイプbinfmt_mach-oを作成しましたが、完成することはなく、他に同様のプロジェクトはありません。

(理論的にはこれは非常に可能であり、同様の取り組みが何度も行われています。Linux自体がHP-UXやTru64などの他のUNIXからのバイナリの実行をサポートしており、GlendixプロジェクトはPlan9の互換性を実現することを目的としています。 Linux。)

誰かが持っている Linux用のMach-OバイナリローダーとAPIトランスレーターを実装するために努力してください!

shinh / maloader – GitHubは、バイナリをロードし、ユーザースペース内のすべてのライブラリ呼び出しをトラップ/変換するというWineのようなアプローチを採用しています。 syscallとすべてのグラフィック関連ライブラリを完全に無視しますが、多くのコンソールプログラムを機能させるには十分です。

関連:Linux –UNIXでウェルカムメッセージを表示する方法は??

ダーリンはmaloaderに基づいて構築され、ライブラリやその他のサポートするランタイムビットを追加します。


Linux
  1. カーネル Linux サーバーの基礎となるものは?

  2. Red Hat Linux とは?

  3. JingOS Linux とは何ですか?

  1. Linuxを持続可能なOSにする理由

  2. Linuxコミュニティが特別な理由は何ですか?

  3. なぜ wine は Linux では 64 ビット プログラムを実行できるのに、Mac では実行できないのですか?

  1. Linuxユーザーとは何ですか?

  2. LinuxのUmaskとは

  3. SSDを装着しないでください?