古き良きchroot以外に、Mac OS X にオペレーティングシステムレベルの仮想化(または必要に応じてコンテナー)の実装が存在しないのはなぜかと思います。
カーネルの制限またはライセンスの制限によるものでしょうか?または、単純に誰も同じようなプロジェクトを立ち上げていませんか?
古き良きchroot以外に、Mac OS X にオペレーティングシステムレベルの仮想化(または必要に応じてコンテナー)の実装が存在しないのはなぜかと思います。
カーネルの制限またはライセンスの制限によるものでしょうか?または、単純に誰も同じようなプロジェクトを立ち上げていませんか?
回答:
コンテナ化に必要な重要な要素は、ネットワーキングと他のサービスの分離ですが、分離だけでなく仮想化も含まれます。FreeBSD Jails、Linuxの「コンテナ」(より正確には「名前空間」)、およびSolaris / illumosゾーンはすべて、これらのオペレーティングシステムシステムサービスのある程度の「仮想化」を提供します。
仮想化により、これは、これらのサーバーが「コンテナー」内のものに対して利用可能(または潜在的に利用可能)であることを意味しますが、コンテナー外の同じホスト上の他のものを保護します。(たとえば、コンテナには独自のTCP / IPスタックがあり、独自のIPアドレス、ARPキャッシュなどがあります。)
OS(オペレーティングシステム)仮想化とは、一般的にこのタイプの「軽量」仮想化のことです。プロセスは仮想カーネルを認識しますが、内部ではすべて同じ実カーネルを共有します。そのカーネルは、コンテナー/仮想化の境界を越えないようにするための一種のハイパーバイザーとして機能します。(別の方法では、OSサービスが仮想化されます。)これをハードウェア仮想化と比較してください。仮想化されるのはハードウェアです。たとえば、デバイスはソフトウェアでエミュレートされ、コンテナで実行されるオペレーティングシステムに提示されます。これは非常に強力ですが、リソースを大量に消費します。各仮想マシンにはオペレーティングシステムの独自のコピーが必要です。
最近のmacOSには、Hypervisor.frameworkを介したネイティブハイパーバイザーサポートがあり、「XHyve」[FreeBSDのBHyveのポート]などのソフトウェアを許可します(macOSのdockerはこれを使用します)が、オペレーティングシステムサービスを完全に仮想化するために必要なサービスが不足しています。
実際、サンドボックスを提供するという作業は、システムコールがアプリケーションごとに異なる方法でインターセプトおよび処理される論理ポイントがすでにあることを意味するため、必要なものの多くはおそらくすでに存在します。しかし、それは完全な話からはほど遠いです-真の独立したネットワーク、IPC、および他の名前空間の実装は非常に多くの作業です。
Appleがこれを行わなかった最大の理由は、Appleが長年にわたってデータセンターでmacOSを実行するのに適したプラットフォームをリリースしていないのと同じ理由です-市場の需要の欠如、またはAppleのリーダーシップによる市場の需要の欠如の認識 彼らが注目したデスクトップとモバイルの焦点は、仮想macOSインスタンスをそれほど必要としません。(これは悲しいことです。なぜなら、仮想macOSをサポートしたいからです。たとえば、Travis CIでVM上でmacOSを実行するのは、Linuxコンテナに比べて時間がかかります)。
驚かれることでしょう-コンテナーは実際にサポートされています-OS X(およびiOS)サンドボックスはそれらを使用するように進化しました。これらは10.7で導入され、現在は10.10およびiOS 8で事実上の標準になっています。後者では、(主にアプリケーションのセキュリティ上の理由により)アプリが自分自身しか見ることができないという点まで、プロセスまたはリソースを列挙するメソッドは、コンテナベースの結果を返すようになりました-Linux ipc名前空間に似ていますが、より強力です。
誰も本当にそれを望んでいないという答えになると思います。それは実行可能であるようです。これらのことは主に1つの目的で行われ、VPSベンダーのパフォーマンスを維持します。そして、VPSインスタンスがOS Xベースであることを望む人は本当にいません。