Apple acaba de crear WSL para Mac (Container Machines)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

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.

Key Takeaway

Apple ha introducido Container Machines para ofrecer una alternativa nativa y optimizada para Apple Silicon que integra entornos Linux persistentes en el flujo de trabajo de macOS utilizando virtualización por contenedor.

Highlights

  • Apple lanzó Container Machines como un entorno Linux persistente y ligero para macOS, diseñado para competir con el Subsistema de Windows para Linux (WSL).

  • La herramienta es compatible con imágenes OCI estándar, lo que permite utilizar prácticamente cualquier imagen compatible con Docker.

  • Cada contenedor utiliza su propia máquina virtual ligera mediante el marco de virtualización de Apple, en lugar de compartir una VM única como hace Docker Desktop.

  • El sistema permite montar el directorio personal (home) de macOS como lectura-escritura en el entorno Linux, facilitando el acceso a los archivos locales.

  • La memoria RAM asignada a las máquinas virtuales se establece por defecto en la mitad de la memoria total del sistema y no se libera dinámicamente de vuelta a macOS.

  • Las pruebas de rendimiento muestran que Apple Containers supera a Docker Desktop en eficiencia de memoria y ofrece un rendimiento de CPU competitivo frente a alternativas como OrbStack.

Timeline

Introducción a las Container Machines

  • Apple lanzó una funcionalidad de entorno Linux persistente denominada Container Machines.
  • La herramienta utiliza el marco de trabajo de contenedores de Apple lanzado el año anterior, optimizado específicamente para Apple Silicon.
  • La configuración requiere una imagen OCI que incluya un programa de inicialización del sistema para funcionar como máquina virtual.

El sistema permite crear entornos Linux persistentes mediante comandos sencillos en macOS 26 o superior. Al ejecutar 'container machine create' con una imagen, el usuario obtiene un entorno Linux con su propia dirección IP, configuración de CPU y memoria, accesible a través de una terminal interactiva.

Integración y flujo de trabajo en macOS

  • El entorno Linux comparte automáticamente el directorio personal del usuario en modo lectura-escritura.
  • Los archivos en el entorno Linux son accesibles directamente desde el sistema de archivos de macOS, permitiendo probar ejecutables Linux sin transferencias previas.
  • El sistema admite la ejecución de servicios complejos mediante SystemD, permitiendo emular entornos de despliegue reales.

La sincronización de archivos facilita el desarrollo, permitiendo usar herramientas de macOS para editar código mientras se prueba en Linux. Si bien la recarga en caliente puede requerir ajustes mediante conexión SSH desde el editor de código, el sistema permite manejar múltiples distribuciones (Ubuntu, Alpine, Debian) simultáneamente.

Arquitectura y rendimiento comparado

  • La arquitectura de Apple asigna una VM ligera por cada contenedor, a diferencia del modelo de VM compartida de Docker Desktop.
  • Este aislamiento mejora la seguridad al limitar qué datos del host se montan en cada entorno individual.
  • Los puntos de referencia indican que Apple Containers iguala o supera a Docker Desktop en rendimiento, aunque OrbStack mantiene ventajas en gestión de memoria y velocidad de archivos.

El uso de una VM propia por contenedor proporciona un aislamiento más robusto que Docker Desktop. Los benchmarks muestran que, aunque Docker Desktop y OrbStack inician contenedores en menos de un cuarto de segundo, Apple Containers mantiene un rendimiento competitivo en tareas de CPU multi-hilo y consumo de memoria.

Limitaciones y consideraciones

  • La memoria RAM asignada a la máquina virtual no se libera automáticamente hacia macOS al dejar de usarse.
  • Actualmente no existe soporte para paso a través (pass-through) de GPU o dispositivos USB.
  • El montaje por defecto del directorio personal en modo lectura-escritura supone un riesgo de seguridad al exponer credenciales y claves SSH del host.

Aunque la herramienta es funcional, carece de la gestión dinámica de memoria de OrbStack. La complejidad para ejecutar aplicaciones GUI y los riesgos de seguridad derivados del montaje completo del directorio home sugieren que, actualmente, herramientas como OrbStack ofrecen una experiencia más pulida para entornos de producción y negocios.

Community Posts

View all posts