web-dev-qa-db-ja.com

LinuxでのFreeBSDバイナリの実行

一般に、FreeBSDで構築されたバイナリはLinuxオペレーティングシステム、特にUbuntuで実行されますか?

4
Brian

Linux上でFreeBSD用に構築されたバイナリを実行することはできません( この質問 を参照)。これらは基本的に異なるオペレーティングシステムであり、APIの小さなサブセットのみを共有します(POSIX互換性)。

ただし、ソースコードがある場合は、バイナリをビルドできますLinuxの場合 FreeBSD;この用語は「クロスコンパイル」です。たとえば、Windows用のプログラムはLinuxシステムでコンパイルされることがよくあります。

9
user1686

理論的には、オペレーティングシステムに他のオペレーティングシステム用に作成されたバイナリを実行させることができます。実際にはそれは仕事を必要とします、そして人々がそれのために仕事をしたくないのでそれは多くは起こりません。

邪魔になる可能性のあることがいくつかあります。

  • 異なるチップ
  • さまざまなシステムコール
  • さまざまなライブラリ呼び出し
  • ファイル/パスが異なります。

したがって、IntelLinuxマシンでIntelFreeBSDバイナリを実行するとします。チップは同じで、エミュレーションは必要ありません。ただし、syscallインターフェイスは異なります。 FreeBSDバイナリを実行するときに、別のsyscallテーブルを使用することを理解するには、誰かがLinuxカーネルのコードを作成する必要があります。どちらもUNIXであるため、これにより少し簡単になりました。多くのコードは同じである可能性があります。

ただし、ライブラリが必要になります。これらは理論的にはFreeBSDディストリビューションからコピーすることができ、ダイナミックローダーはFreeBSDライブラリのこの特別な場所を知るでしょう。構成ファイルのパス、またはハードコードされた出力パスがある場合は、これも処理する必要があります。

だから、それは実行可能ですが、それは手間がかかります。多くの作業。そのため、作業は通常、人気のない(または新しすぎる)OSに対してのみ行われ、より人気のある、または確立されたOSのバイナリを実行できません。

当初、MicrosoftNTはOS/2コマンドラインアプリを実行することができ、POSIXアプリを実行するための理論的な(中途半端な)機能を備えていました。この機能は、OS/2が無関係になり、POSIXを実行できるものとしてではなく、NT forNTが好きになったために削除されました。私は、Windows95アプリを実行しているWindows7が別のOSから実行されていると見なされるのか、それともWin7に組み込まれた古いコードを実行するだけなのかを判断する資格がありません。

Mac OSXは、Carbon(互換性ライブラリのセット)と呼ばれるもの用にコーディングされている場合、MacOS7/8バイナリを実行できます。これは、MacOSXへの移行に役立ちました。 PowerPCチップのエミュレーションも必要でした。

LinuxはFreeBSDよりも一般的であるため、Linux上でFreeBSDをエミュレートする人はそれほど多くありません。 FreeBSD上のアプリがLinuxで利用できないことはめったにありません。したがって、誰もその作業を行っていません。しかし、 FreeBSDがLinuxバイナリを実行する の機能があります。 Linuxは動くターゲットであるため、Linuxカーネルが大幅に変更された場合、または新しいライブラリが必要になった場合は、エミュレーションを更新する必要があります。

9
Rich Homolka