Un elemento clave necesario para la contenedorización es el aislamiento de la red y otros servicios, pero no sólo aislamiento sino también virtualización . Las jaulas de FreeBSD, los "contenedores" de Linux (o, más correctamente, los "espacios de nombres") y las zonas de Solaris/illumos ofrecen cierto grado de "virtualización" de estos servicios del sistema operativo.
Por virtualización se entiende que estos servidores son disponible (o potencialmente disponible ) a las cosas dentro del "contenedor", pero de una manera que proteja a las otras cosas en el mismo host fuera del contenedor. (Por ejemplo, un contenedor puede tener su propia pila TCP/IP, con su propia dirección IP, caché ARP, etc.).
La virtualización del SO (sistema operativo) es la forma en que generalmente nos referimos a este tipo de virtualización "ligera", en la que los procesos creen ver un núcleo virtual, pero todos comparten el mismo núcleo real bajo el capó; ese núcleo actúa como una especie de hipervisor para garantizar que no se crucen los límites del contenedor/virtualización. (Dicho de otro modo, los servicios del sistema operativo están virtualizados.) Compárese con la virtualización de hardware, en la que lo que se virtualiza es el hardware: por ejemplo, los dispositivos se emulan en software y se presentan a un sistema operativo que se ejecuta en el contenedor. Esto es muy potente, pero consume muchos recursos: cada máquina virtual debe tener su propia copia del sistema operativo.
El MacOS reciente tiene soporte nativo de hipervisor a través de Hypervisor.framework que permite software como "XHyve" [un port de BHyve de FreeBSD] (docker en MacOS lo utiliza), pero carece de los servicios necesarios bajo el capó para virtualizar completamente los servicios del sistema operativo.
En realidad, gran parte de lo que se necesita probablemente ya está presente, ya que el trabajo para proporcionar sandboxes significa que ya hay puntos lógicos donde las llamadas al sistema son interceptadas y manejadas de manera diferente para diferentes aplicaciones. Sin embargo, esto dista mucho de ser la historia completa: la implementación de espacios de nombres de red, IPC y otros realmente separados requiere mucho trabajo.
La mejor razón por la que Apple no ha hecho esto es probablemente la misma por la que Apple no ha lanzado una plataforma adecuada para ejecutar macOS en el centro de datos durante muchos años: la falta de demanda del mercado, o la percepción de falta de demanda del mercado por parte de los líderes de Apple. El escritorio y el enfoque móvil donde han centrado su atención simplemente no necesitan instancias virtuales de MacOS tanto. (Esto es triste, porque me encantaría tener soporte para MacOS virtual -- por ejemplo ejecutar MacOS en VMs en Travis CI consume mucho tiempo comparado con contenedores Linux).