Apple acaba de crear WSL para Mac (Container Machines)
BBetter Stack
Computing/SoftwareInternet Technology
Transcript
00:00:00Escondido detrás de todo el contenido sobre Apple Intelligence en la WWDC de este año,
00:00:03Apple lanzó discretamente su propia versión del Subsistema de Windows para Linux llamada Container
00:00:06Machines. Estas te brindan un entorno Linux ligero y persistente en tu Mac de una manera realmente fácil
00:00:10de usar, y están construidas sobre el proyecto de contenedores de Apple que
00:00:14lanzaron el año pasado, el cual es una alternativa a Docker, todo lo cual, por supuesto, está optimizado para Apple
00:00:18Silicon. Así que echemos un vistazo a qué son las Container Machines, cómo funcionan,
00:00:21y también hagamos un repaso rápido de los contenedores de Apple para quienes se los perdieron.
00:00:29Así que voy a comenzar configurando una Container Machine, y luego explicaré cómo todo
00:00:32esto está funcionando un poco. Pero la que quiero será un entorno Linux Ubuntu. Así que simplemente
00:00:37tengo un Dockerfile aquí con la imagen de Ubuntu, y luego algunas cosas para instalar herramientas
00:00:41comunes. Esto funcionará con cualquier imagen compatible con OCI, así que prácticamente todas las que
00:00:46tienes trabajando con Docker. Lo único que necesita incluir para ser una VM es el programa de inicialización
00:00:50del sistema. Una vez que tenemos la imagen del Dockerfile que queremos usar para nuestra VM, todo lo que necesitamos hacer es
00:00:54construirla usando la herramienta de contenedores de Apple. Así que pueden ver que este es el comando que estoy usando para la mía,
00:00:58ya que tengo el Dockerfile en esta carpeta, y simplemente voy a etiquetarla como local
00:01:01Ubuntu machine, y podemos seguir adelante y presionar enter para construir. La herramienta de contenedores,
00:01:05por cierto, funciona en macOS 26 y superior, y puedes instalarla desde GitHub simplemente yendo al
00:01:09repositorio, yendo a versiones (releases) y descargando el último paquete. Parece que la construcción de mi imagen
00:01:13está lista aquí, y pueden ver que es muy similar a Docker. Es solo construir una imagen OCI.
00:01:17Eso es todo lo que necesitamos para una máquina de contenedores, así que ahora podemos simplemente ejecutar container machine create,
00:01:21di la imagen que queremos para nuestra Container Machine, dale un nombre amigable,
00:01:24y también voy a establecer esto como predeterminado, para que cualquier comando que ejecute asuma
00:01:27que estoy en esta Container Machine, y no tenga que especificarla por nombre. Con esto podemos presionar
00:01:31enter, y en literalmente segundos está todo configurado. Podemos ver un poco de información sobre la
00:01:35Container Machine que acabo de crear haciendo “container machine list”. Aquí pueden ver que tiene
00:01:38la de Ubuntu que acabo de crear, la dirección IP, 7 CPUs y 18 gigabytes de memoria. La CPU y la memoria
00:01:44son configurables por cierto, pero por defecto usará la mitad de la memoria de tu Mac. Para realmente empezar
00:01:48y puedes dejar esto en blanco si quieres entrar en la terminal interactiva, o puedes simplemente
00:01:51y puedes dejar esto en blanco si quieres entrar en la terminal interactiva, o puedes simplemente
00:01:54añadir un comando después de eso si quieres ejecutar eso en tu máquina Linux. En este caso pueden ver que
00:01:58acabo de presionar enter, y ahora estoy en una terminal interactiva en mi entorno Linux. Podemos confirmar
00:02:02esto haciendo algo como “uname -a”, y verán que esto imprime que es Linux Ubuntu,
00:02:06a diferencia de cuando ejecuto esto en mi Mac y obtenemos Darwin. Ahora, una de las cosas geniales de
00:02:10las Container Machines es que tienen uso compartido de usuario automático, así que mi usuario ya ha sido copiado de mi Mac
00:02:14a mi entorno Linux, y lo mismo aplica para tu directorio personal (home). Esto montará tu
00:02:18directorio personal completo como lectura-escritura, así que tengo acceso en este entorno Linux a todos los archivos que
00:02:23tengo en mi Mac. Pueden ver donde ejecuté “container run”, me ha puesto directamente en ese archivo
00:02:27en el entorno Linux, y ya tenemos esos archivos ahí. También tiene su propio volumen
00:02:31sin embargo, así que si navegamos al directorio personal de esta máquina Ubuntu, pueden ver que actualmente no hay
00:02:35nada ahí, aunque lo hay en mi Mac, y eso es porque esta es la
00:02:39entorno Linux, y aquí es donde pones tus archivos .dot que son específicos de Linux. El uso compartido de carpetas
00:02:43hace que sea súper fácil desarrollar algo en tu Mac usando todas tus herramientas normales, y tal vez incluso algunas
00:02:48que solo son compatibles con macOS, y luego simplemente cambiar a Linux cuando necesites probar algo.
00:02:52Por ejemplo, tengo una aplicación BUN muy simple aquí, y quiero compilar esto en un solo
00:02:56ejecutable que funcione en Linux, pero no puedo probar Linux en mi macOS, así que al ejecutar esto,
00:03:01no sé si ha funcionado o no. Si cambiamos a la Container Machine sin embargo,
00:03:04pueden ver que simplemente puedo ejecutar el comando de inmediato. No tengo que transferir archivos ni nada,
00:03:08gracias al hecho de que comparte el mismo sistema de archivos. Si presiono enter aquí, funciona bien.
00:03:12Esta aplicación era solo un servidor web muy simple con esta página web aquí, que imprime lo que está
00:03:16ejecutando, así que actualmente se está ejecutando en Ubuntu 24. También pueden ver que hay una suscripción
00:03:20dando vueltas, algo que definitivamente deberían hacer. Ahora, estaba probando ejecutar el
00:03:23servidor de desarrollo BUN en el entorno Linux, y todo funciona, lo cual podemos ver aquí,
00:03:27se está ejecutando en “bun dev”, y no está compilado. Pero si modifico uno de los archivos fuente desde mi Mac
00:03:31aquí, tal vez decir hola en lugar de suscribirse, noto que la recarga en caliente no parece estar
00:03:35detectando ese comportamiento, y tengo que reiniciar el servidor de desarrollo BUN para que los cambios se
00:03:39apliquen. Ahí vamos, ahora dice hola. Creo que la recarga en caliente funcionará de la misma manera que los puntos de interrupción
00:03:43lo hacen, donde no funcionan realmente si estás en la versión de código de macOS, pero lo que puedes hacer es conseguir
00:03:47que tu editor se conecte a la Container Machine a través de SSH, y luego editar los archivos de esa manera, y de esa
00:03:52forma los puntos de interrupción y la recarga en caliente probablemente funcionarán. De hecho tienen un tutorial sobre cómo hacer esto
00:03:55en su documentación. Eso es básicamente todo lo que hay que mostrarles cuando se trata de usar realmente una
00:03:59Container Machine. Quiero decir, es solo un entorno Ubuntu ahora, y honestamente toda la experiencia
00:04:03es bastante fluida. También vale la pena señalar que no estás limitado a una sola máquina. Podrías
00:04:08tener una máquina Alpine, una Ubuntu y una Debian sentadas una al lado de la otra, para que tengas una distribución
00:04:12por objetivo, y honestamente es muy agradable si estás haciendo trabajo multi-objetivo. Además, porque estas máquinas
00:04:17pueden ejecutar un SystemD real, puedes probar una pila de servicios adecuada allí, como tener Postgres
00:04:22ejecutándose como un servicio real con tu aplicación al lado, y todo el conjunto se comportará como el
00:04:26servidor Linux en el que vas a desplegar. La simplicidad es uno de los principios de diseño básicos que
00:04:30Apple estaba impulsando al desarrollar Container Machines. Querían VMs rápidas y ligeras que
00:04:34se integren en tu flujo de trabajo existente y sean súper fáciles de activar según sea necesario, además de ser persistentes
00:04:39con el tiempo para que puedas configurar una VM de entorno de desarrollo completa que tenga todas las herramientas que
00:04:42normalmente necesitas listas para cuando las necesites. Una vez más, es bastante similar a lo que el Subsistema de Windows
00:04:47para Linux intentaba lograr. En cuanto a cómo se construye todo esto y cómo se compara con Docker y
00:04:51OrbStack, primero necesitamos entender la herramienta de contenedores que se lanzó el año pasado. Esto está escrito
00:04:55en Swift y está destinado a ser una alternativa a Docker que puede ejecutar contenedores, y ejecuta cualquier estándar
00:04:59imagen OCI, así que cualquier cosa que puedas extraer de Docker Hub seguirá funcionando. Lo único único sobre
00:05:04el enfoque de Apple sin embargo es que cada contenedor tiene su propia máquina virtual ligera a través de su
00:05:08marco de virtualización, en lugar de un montón de contenedores compartiendo una gran VM Linux, que es lo que
00:05:13hace Docker Desktop. Algunos beneficios de ese enfoque pueden ser la seguridad, ya que cada contenedor tiene las
00:05:17propiedades de aislamiento de una VM completa. Luego también está la privacidad, ya que solo montas los necesarios
00:05:22datos en cada VM, mientras que cuando tienes una VM compartida, realmente montas todos los datos en esa
00:05:27VM compartida, por lo que se puede montar selectivamente en los contenedores individuales. Finalmente, también puede haber
00:05:31un beneficio de rendimiento, ya que los contenedores creados usando Apple Container en realidad requieren menos memoria que una
00:05:36VM completa, y los tiempos de arranque son bastante similares a los de Docker y otras herramientas. Si realmente miramos algunos
00:05:41puntos de referencia (benchmarks) que RepoFlow hizo aquí, comparando Apple Containers con OrbStack y Docker Desktop, podemos ver que
00:05:46los resultados en realidad no son tan malos. Es difícil de decir aquí, pero Apple Containers en realidad logra
00:05:50la mayor cantidad de eventos de CPU de un solo hilo, pero OrbStack estaba bastante cerca, hay fracciones de diferencia, y esa
00:05:55misma historia continúa cuando pasamos a multi-hilo también, todos funcionan muy bien. Donde Apple sí
00:06:00parece llevar un poco de ventaja sin embargo es en el rendimiento de memoria, con OrbStack quedando en segundo lugar y Docker
00:06:04Desktop último, pero cuando se trata de tiempos de inicio para un pequeño contenedor, parece que Apple sí tiene algo de
00:06:09trabajo por hacer aquí, pero todavía es sub-segundo, es solo que Docker Desktop y OrbStack lo hacen en menos
00:06:14de un cuarto de segundo. Hay muchos más benchmarks aquí, así que dejaré un enlace a esto,
00:06:17pero básicamente el resto de ellos muestran que OrbStack tiene un rendimiento excepcional del sistema de archivos y archivos pequeños,
00:06:22pero también muestran que Apple Containers está bastante nivelado, si no mejor, que Docker Desktop.
00:06:27Hay algunas capturas sin embargo que querrán tener en cuenta antes de usar Container Machines,
00:06:30y la primera es la memoria. Como mencioné anteriormente, la máquina utiliza por defecto la mitad de la RAM de tu sistema,
00:06:35así que vale la pena saber que en realidad nunca devuelve esto. Así que si tienes una carga de trabajo
00:06:39intensiva en memoria en el contenedor, tal vez durante una gran construcción, esa memoria en realidad se mantiene hasta que reinicies
00:06:43la máquina. Este es en realidad uno de los beneficios únicos de OrbStack, donde tiene memoria dinámica,
00:06:47que reduce el uso de memoria al liberar esa memoria no utilizada de vuelta a macOS. Hasta donde sé,
00:06:53nada más hace esto. En segundo lugar, tampoco hay paso a través (pass-through) de GPU y USB. He visto problemas abiertos
00:06:57para ambos en ese GitHub sin embargo, así que tal vez sea compatible en el futuro. Tercero, también
00:07:02parece un poco complejo conseguir que funcionen aplicaciones GUI, como tal vez si quisieras ejecutar la versión Linux de
00:07:06VS Code u otras aplicaciones solo para Linux. Definitivamente no es una experiencia fluida, probablemente usaría otra cosa para
00:07:11esto. Finalmente, también hay una compensación de seguridad porque, como mencioné anteriormente, ese montaje del directorio personal
00:07:15que hace que todo sea tan conveniente es lectura-escritura por defecto, lo que significa que cualquier cosa que ejecutes
00:07:20dentro de esa máquina Linux puede tocar tus claves SSH, tus credenciales en la nube y todo en
00:07:25tu Mac. Parece que en realidad solo puedes configurar el montaje como solo lectura o desactivarlo por completo. No
00:07:29parece haber una capacidad para montar solo una carpeta específica. En general, habiendo probado las Apple
00:07:33Container Machines, probablemente voy a seguir con OrbStack ya que se siente como la opción más pulida
00:07:37hoy en día con una mejor gestión de recursos y más características, pero sé que a algunas personas no les gusta que
00:07:40OrbStack sea de pago si quieres uso comercial y de negocios, así que sin OrbStack, probablemente
00:07:45elegiría Apple Containers sobre Docker Desktop, y también está Lima, que es otra gran
00:07:49alternativa. ¿Qué usas tú? ¿Es OrbStack, Docker Desktop o Lima? Déjamelo saber en los comentarios
00:07:53abajo, mientras estás allí suscríbete, y como siempre, nos vemos en la próxima.