誰かがOSXでchrootを使用して別のOS(ubuntu、centos)を実行できるかどうか疑問に思いました。それらが非常に異なることは知っていますが、これを使用したいほとんどすべてがカーネルのレベルでは何も気にしないので、VMを使用せずにこれを行う方法があることを望んでいました。
私のグーグル検索に基づいて、私はこの質問が尋ねられるのを見ます、しかし「VMを試す」以外の本当の答えはありません。 VM)なしでこれを本当にやりたいのですが。
残念ながら、ほとんどのプログラムdoは、直接でもそうでなくても、カーネルを気にします。
オペレーティングシステムが異なれば、最も一般的な機能(epoll vs inotify vs kqueue、clone vs vfork vs rfork ...)でも大きな違いがあります。
プログラムがユーザースペースと同じように見える最小限の機能(stdio、基本的なファイルアクセスなど)に固執している場合でも、プログラム(またはlibc)は、カーネルでこれらの関数を呼び出す方法を知る必要があります。つまり、完全にLinux(単純な古いsyscall)とOS X(syscallとMach IPCの組み合わせ)では異なります。
そして、そもそもカーネルにプログラムの実行を開始させることができると仮定しています。OSXカーネルはELF形式を理解せず、Mach-O(およびあらゆる種類のレガシーMac OSのもの)のみを理解します。
さまざまなエミュレーターが存在します。たとえば、FreeBSDにはLinuxエミュレーションがあり、WineはUnixでWindowsプログラムを実行し、 Linux用のOS Xエミュレーター のようですが、Linuxを実行するエミュレーターは見つかりませんでした。 OSX上のプログラム。
FreeBSDで基本的なLinux関数がどのようにエミュレートされるか の説明は次のとおりです。
chrootはルートディレクトリを変更します。 OSXとLinuxで異なる実行可能ファイル形式やアプリケーションバイナリインターフェイスなどは変更されません。別のOSの実行は、chrootよりも多くの方法があります。 VMが必要です。