Un elemento chiave richiesto per la containerizzazione è l'isolamento di reti e altri servizi, ma non solo isolamento , ma anche virtualizzazione . FreeBSD Jails, "contenitori" Linux (o più correttamente "namespace") e zone Solaris / illumos offrono tutti un certo grado di "virtualizzazione" di questi servizi di sistema del sistema operativo.
Con la virtualizzazione, ciò significa che questi server sono disponibili (o potenzialmente disponibili ) per le cose all'interno del "contenitore", ma in un modo che protegge le altre cose su lo stesso host all'esterno del contenitore. (Ad esempio, un contenitore può avere il proprio stack TCP / IP, con il proprio indirizzo IP, cache ARP, ecc.)
La virtualizzazione del SO (sistema operativo) è il modo in cui generalmente ci riferiamo a questo tipo di virtualizzazione "leggera", in cui i processi pensano di vedere un kernel virtuale, ma condividono tutti lo stesso vero kernel; quel kernel agisce come una sorta di hypervisor per garantire che i limiti del contenitore / virtualizzazione non siano superati. (In altre parole, i servizi del sistema operativo sono virtualizzati.) Confrontalo con la virtualizzazione dell'hardware, dove ciò che è virtualizzato è l'hardware - ad es. i dispositivi vengono emulati nel software e presentati a un sistema operativo in esecuzione nel contenitore. Questo è molto potente, ma richiede un uso intensivo delle risorse: ogni macchina virtuale deve avere una propria copia del sistema operativo.
Il macOS recente supporta l'hypervisor nativo tramite Hypervisor.framework che consente di software come "XHyve" [una porta di BHyve di FreeBSD] (la finestra mobile su macOS usa questo), ma non dispone dei servizi necessari per virtualizzare completamente i servizi del sistema operativo.
In realtà, molte delle necessità sono probabilmente già presenti, dal momento che il lavoro per fornire sandbox vuol dire che esistono già punti logici in cui le chiamate di sistema vengono intercettate e gestite in modo diverso per diverse applicazioni. Tuttavia, questo è lontano dalla storia completa: l'implementazione di una vera rete separata, IPC e altri spazi dei nomi è un bel po 'di lavoro.
Il motivo migliore per cui Apple non ha fatto questo è probabilmente la stessa ragione per cui Apple non ha rilasciato una piattaforma adatta per l'esecuzione di macOS nel data center per molti anni: mancanza di domanda di mercato o mancanza di domanda del mercato da parte di Leadership di Apple. Il focus desktop e mobile su cui hanno focalizzato la loro attenzione semplicemente non ha più bisogno di istanze macOS virtuali. (Questo è triste, perché mi piacerebbe avere il supporto macOS virtuale - ad esempio, l'esecuzione di macOS su VM su Travis CI richiede molto tempo rispetto ai contenitori Linux).