Um elemento chave necessário para a conteinerização é o isolamento da rede e de outros serviços, mas não apenas o isolamento, mas também a virtualização . O FreeBSD Jails, os "contêineres" do Linux (ou, mais corretamente, os "namespaces") e as zonas Solaris / illumos oferecem algum grau de "virtualização" desses serviços do sistema operacional.
Por virtualização, isso significa que esses servidores estão disponíveis (ou potencialmente disponíveis ) para itens dentro do "contêiner", mas de uma maneira que proteja os outros itens no mesmo host fora do contêiner. (Por exemplo, um contêiner pode ter sua própria pilha TCP / IP, com seu próprio endereço IP, cache ARP, etc.)
A virtualização de SO (sistema operacional) é como geralmente nos referimos a esse tipo de virtualização "leve", em que os processos pensam que veem um kernel virtual, mas todos compartilham o mesmo kernel real; esse kernel atua como uma espécie de hypervisor para garantir que os limites de contêiner / virtualização não sejam ultrapassados. (Dito de outra forma, os serviços do SO são virtualizados.) Compare isso à virtualização de hardware, onde o virtualizado é o hardware - por exemplo, os dispositivos são emulados no software e apresentados a um sistema operacional em execução no contêiner. Isso é muito poderoso, mas consome muitos recursos - cada máquina virtual deve ter sua própria cópia do sistema operacional.
O macOS recente possui suporte nativo ao hipervisor via Hypervisor.framework, que permite software como "XHyve" [uma porta do BHyve do FreeBSD] (a docker do macOS usa isso), mas não possui os serviços necessários para virtualizar totalmente os serviços do sistema operacional.
Na verdade, muito do que é necessário provavelmente já está presente, pois o trabalho para fornecer caixas de proteção significa que já existem pontos lógicos em que as chamadas do sistema são interceptadas e manipuladas de maneira diferente para diferentes aplicativos. No entanto, isso está longe de ser a história completa - implementar uma verdadeira rede separada, IPC e outros namespaces é bastante trabalhoso.
O melhor motivo pelo qual a Apple não fez isso é provavelmente o mesmo motivo pelo qual a Apple não lança uma plataforma adequada para executar o macOS no data center há muitos anos - falta de demanda do mercado ou falta de demanda percebida pela liderança da Apple. O foco em computadores e dispositivos móveis, onde eles concentraram sua atenção, simplesmente não precisa tanto de instâncias virtuais do macOS. (Isso é triste, porque eu adoraria ter suporte virtual ao macOS - por exemplo, executar o macOS em VMs no Travis CI é realmente demorado em comparação aos contêineres do Linux).