Ein Schlüsselelement für die Containerisierung ist die Isolierung von Netzwerken und anderen Diensten, aber nicht nur die Isolierung, sondern auch die Virtualisierung . FreeBSD-Jails, Linux- "Container" (oder genauer gesagt "Namespaces") und Solaris / Illumos-Zonen bieten alle einen gewissen Grad an "Virtualisierung" dieser Betriebssystemdienste.
Durch die Virtualisierung bedeutet dies, dass diese Server für Dinge innerhalb des "Containers" verfügbar (oder potenziell verfügbar ) sind, aber auf eine Weise, die die anderen Dinge auf demselben Host außerhalb des Containers schützt. (Beispielsweise kann ein Container einen eigenen TCP / IP-Stack mit eigener IP-Adresse, ARP-Cache usw. haben.)
Unter Betriebssystemvirtualisierung versteht man im Allgemeinen diese Art der "leichten" Virtualisierung, bei der Prozesse den Eindruck haben, dass sie einen virtuellen Kernel sehen, sich aber alle denselben realen Kernel unter der Haube teilen. Dieser Kernel fungiert als eine Art Hypervisor, der sicherstellt, dass die Container- / Virtualisierungsgrenzen nicht überschritten werden. (Anders ausgedrückt, die Betriebssystemdienste werden virtualisiert.) Vergleichen Sie dies mit der Hardwarevirtualisierung, bei der die Hardware virtualisiert wird - z. B. werden Geräte in Software emuliert und einem im Container ausgeführten Betriebssystem präsentiert. Dies ist sehr leistungsfähig, aber sehr ressourcenintensiv. Jede virtuelle Maschine muss über eine eigene Kopie des Betriebssystems verfügen.
Neuere Versionen von macOS bieten native Hypervisor-Unterstützung über Hypervisor.framework, mit der Software wie "XHyve" (ein Port von FreeBSDs BHyve) (Docker unter macOS verwendet dies) unterstützt wird. Es fehlen jedoch die erforderlichen Dienste, um die Betriebssystemdienste vollständig zu virtualisieren.
In der Tat ist wahrscheinlich bereits viel von dem vorhanden, was benötigt wird, da die Arbeit zur Bereitstellung von Sandkästen bedeutet, dass es bereits logische Punkte gibt, an denen Systemaufrufe für verschiedene Anwendungen unterschiedlich abgefangen und behandelt werden. Das ist jedoch noch lange nicht alles - die Implementierung eines echten separaten Netzwerks, IPCs und anderer Namespaces ist ziemlich aufwändig.
Der beste Grund, warum Apple dies nicht getan hat, ist wahrscheinlich derselbe Grund, warum Apple seit vielen Jahren keine geeignete Plattform für den Betrieb von macOS im Rechenzentrum herausgebracht hat - mangelnde Marktnachfrage oder vermeintlich mangelnde Marktnachfrage durch die Apple-Führung. Der Desktop- und Mobile-Fokus, auf den sie ihre Aufmerksamkeit gerichtet haben, erfordert einfach nicht so viele virtuelle macOS-Instanzen. (Das ist traurig, weil ich gerne virtuelle macOS-Unterstützung hätte - zum Beispiel ist das Ausführen von macOS auf VMs bei Travis CI im Vergleich zu Linux-Containern sehr zeitaufwendig.)