Una máquina virtual en la nube puede configurarse desde el primer arranque con un archivo YAML de apenas once líneas: un nombre de equipo, una zona horaria, un usuario con su clave SSH y dos paquetes. En Debian 13, el servicio cloud-init necesita 46 paquetes adicionales y 61,2 MiB de espacio instalado sobre un sistema base mínimo con el servidor OpenSSH. FreeBSD, en cambio, incorpora su propia alternativa, nuageinit, en el sistema base y puede leer esa configuración sin añadir dependencias.
Las claves de cloud-init y FreeBSD en 20 segundos
- Debian 13 necesita 46 paquetes adicionales y 61,2 MiB para incorporar cloud-init 25.1.4 sobre la base utilizada en la medición.
- Más de la mitad del espacio añadido corresponde a Python y sus bibliotecas.
- FreeBSD incluye nuageinit desde la versión 14.1, escrito en Lua y apoyado en componentes del sistema base.
- En una prueba de arranque de los programas, cloud-init tardó 206 milisegundos y nuageinit, 5 milisegundos.
- La alternativa de FreeBSD cubre las tareas habituales de configuración inicial, aunque reconoce menos fuentes de metadatos.
Qué instala Debian para leer un archivo YAML
La comparación publicada por Vivian Voss parte de un escenario concreto: Debian 13 para arquitectura amd64, con todos los paquetes requeridos e importantes y el servidor OpenSSH. Al resolver las dependencias de cloud-init 25.1.4 sobre esa base, el resultado añade 46 paquetes y ocupa 61,2 MiB.
El conjunto incluye 26 bibliotecas de Python, entre ellas python3-requests, python3-jinja2, python3-cryptography y python3-jsonschema. A ellas se suman siete paquetes relacionados con Python 3.13 y su biblioteca estándar, además de otros componentes necesarios para completar la instalación. En total, Python y sus bibliotecas representan 33,4 MiB, más de la mitad del espacio añadido.
La diferencia no se limita al tamaño de los archivos. Cada paquete introduce sus propias necesidades de mantenimiento, actualizaciones y seguimiento de avisos de seguridad. En un servidor dedicado a una tarea muy concreta, esa carga adicional puede importar tanto como el espacio ocupado, aunque el coste real depende del sistema, de los servicios instalados y del uso que se haga de la máquina.
Cloud-init también tiene un alcance considerable. Según el análisis, la versión 25.1.4 contiene 69.102 líneas de código Python, 31 fuentes de datos (datasources) y 59 módulos. Las primeras permiten localizar la configuración que proporciona cada plataforma; los segundos ejecutan acciones como crear usuarios, instalar paquetes, preparar interfaces de red o escribir archivos.
Esa amplitud responde a su objetivo: ofrecer un mecanismo común para inicializar máquinas en distintos proveedores de nube. La misma configuración puede servir en diferentes entornos siempre que la imagen incluya cloud-init y que el programa conozca la forma de recuperar los metadatos de la plataforma correspondiente.
El artículo también señala una dependencia menos evidente: netcat-openbsd. Su presencia está relacionada con un cambio introducido en cloud-init 24.3, en 2024. Antes, el proceso de inicialización arrancaba cuatro procesos de Python por cada inicio del sistema, uno por etapa, que cargaban por separado el intérprete y sus bibliotecas. El proyecto los agrupó en un único proceso que espera en un socket Unix a que systemd le indique cuándo comenzar cada fase.
El cambio buscaba acelerar el arranque, pero añadió una dependencia de la implementación de netcat procedente de OpenBSD. Es un ejemplo de cómo una decisión orientada a reducir el coste de ejecución puede introducir otro componente en la lista de paquetes de un servidor Linux.
FreeBSD incorpora su alternativa en el sistema base
FreeBSD sigue un planteamiento distinto. Desde la versión 14.1, publicada en junio de 2024, el sistema base incluye nuageinit, una herramienta escrita en Lua que procesa configuraciones compatibles con el formato de cloud-init. Su nombre procede de nuage, la palabra francesa para nube.
En lugar de añadir un intérprete de Python y una colección de bibliotecas, nuageinit utiliza flua, el intérprete Lua que FreeBSD ya incluye para sus propias herramientas, y lyaml, una interfaz para la biblioteca libyaml. Ambos componentes forman parte del sistema base.
El análisis de los fuentes de FreeBSD 15.1 contabiliza 1.685 líneas de Lua para el conjunto de nuageinit, de las cuales 809 corresponden al programa principal. La herramienta permite configurar usuarios, claves SSH, grupos, reglas para sudo y doas, archivos, interfaces de red, paquetes y comandos que deben ejecutarse durante el primer arranque.
Su integración también cambia cuándo se ejecuta. Los scripts de inicio de FreeBSD utilizan la palabra clave firstboot y comprueban la existencia del archivo marcador /firstboot. La configuración se procesa en varias etapas: una antes de que se levante la red, otra después para las tareas que necesitan conectividad y una última para los scripts definidos por el usuario. Al finalizar el primer arranque se elimina el archivo marcador, por lo que esos scripts no vuelven a ejecutarse en los siguientes inicios.
Las imágenes oficiales de FreeBSD 15.0 identificadas como BASIC-CLOUDINIT activan nuageinit en rc.conf. Según el artículo, el proceso de construcción de esas imágenes añade un único paquete, firstboot-freebsd-update, para obtener las actualizaciones de seguridad durante el primer arranque. El lector de la configuración y sus componentes principales ya estaban presentes.
La ventaja, por tanto, no consiste en que FreeBSD pueda hacer cualquier cosa que haga cloud-init. Su propuesta es resolver las tareas habituales de inicialización con las herramientas que ya forman parte del sistema operativo, sin incorporar una pila adicional de dependencias.
La prueba de rendimiento y sus límites
Para comparar el tiempo de inicio de ambos programas, Voss realizó una medición en una cárcel (jail) de FreeBSD 15.0 sobre un equipo con procesador Intel Core i5-13500. Instaló cloud-init 25.2 desde los ports de FreeBSD, con Python 3.12, y ejecutó cada programa veinte veces.
La orden cloud-init --version, que carga el programa e imprime su versión sin procesar una configuración, tardó 4,13 segundos en veinte ejecuciones: una media de 206 milisegundos por inicio. Nuageinit, ejecutado sin argumentos, completó las veinte pruebas en 0,10 segundos, con una media de 5 milisegundos.
La diferencia equivale a unas 41 veces más tiempo para iniciar cloud-init en esa prueba. No significa que una máquina virtual con Debian tarde automáticamente cuarenta veces más en arrancar, ni que una configuración completa vaya a terminar cuarenta veces antes en FreeBSD. La medición compara el inicio de los programas, no el proceso de aprovisionamiento de principio a fin.
La descarga de paquetes, la espera por la red y el acceso a los repositorios pueden ocupar una parte importante del tiempo total de inicialización en ambos sistemas. Además, la comparación se hizo con versiones diferentes de cloud-init: 25.2 en FreeBSD para la prueba de arranque y 25.1.4 en el cálculo de dependencias de Debian 13. Los resultados describen el escenario ensayado, no una prueba exhaustiva de todas las configuraciones posibles.
La diferencia también está relacionada con el alcance de cada herramienta. Cloud-init conoce 31 fuentes de metadatos, incluidas las de Amazon y Microsoft Azure, y dispone de módulos para funciones adicionales como Chef, Puppet, LXD y el particionado de discos. Nuageinit admite un conjunto más limitado de fuentes: puede leer la configuración desde discos identificados como cidata o config-2, además de consultar el servicio de metadatos de OpenStack.
Cuando una instalación de FreeBSD necesita trabajar con otras plataformas o módulos, sigue siendo posible instalar cloud-init desde los ports. El artículo indica que su versión 25.2 está disponible para FreeBSD mediante el sistema de paquetes. Nuageinit cubre las necesidades más comunes, pero no sustituye todas las capacidades de la herramienta de Canonical.
La comparación refleja dos prioridades diferentes. Cloud-init busca una experiencia homogénea en muchas nubes y sistemas, incluso a costa de transportar un conjunto amplio de dependencias. FreeBSD integra una solución más pequeña en el sistema base y limita su ejecución a la primera inicialización. Para quien construye imágenes de nube, la primera opción reduce el trabajo específico por plataforma; para quien administra el sistema, la segunda evita mantener una pila adicional cuando sus funciones son suficientes.
Preguntas frecuentes
¿Qué es cloud-init?
Cloud-init es una herramienta que configura máquinas virtuales durante el arranque a partir de metadatos y archivos de configuración. Puede crear usuarios, instalar paquetes, establecer parámetros de red y ejecutar comandos, entre otras tareas.
¿Qué es nuageinit en FreeBSD?
Nuageinit es la herramienta de FreeBSD para procesar configuraciones compatibles con cloud-init. Está escrita en Lua y utiliza componentes incluidos en el sistema base, como flua y lyaml.
¿Cuánto ocupa cloud-init en Debian 13?
En la medición publicada, cloud-init 25.1.4 añade 46 paquetes y 61,2 MiB de tamaño instalado sobre una base con los paquetes requeridos e importantes y el servidor OpenSSH. La cifra depende de esa selección concreta de paquetes.
¿Nuageinit es cuarenta veces más rápido que cloud-init?
En la prueba descrita, nuageinit tardó 5 milisegundos en iniciarse, frente a 206 milisegundos de cloud-init --version. La comparación mide el arranque de los programas, no el tiempo total de configuración de una máquina virtual, y no permite afirmar que FreeBSD complete todo el proceso cuarenta veces más rápido.







