kvm-gui: VM de macOS, Linux y Windows en KVM con aspecto de VirtualBox

Mascote do LinuxPro numa estação de trabalho iniciando VMs Linux, Windows, macOS e Debian num gerenciador no estilo VirtualBox, com o gopher do Go segurando um cubo e o cão caramelo deitado ao lado

Quien usa Linux en el escritorio y quiere máquinas virtuales suele elegir entre dos opciones: VirtualBox, cómodo pero con módulo de kernel propio y rendimiento inferior al KVM, o el KVM puro, rápido pero lleno de línea de comandos, XML de libvirt y, en el caso de macOS, un repositorio de scripts y un config.plist OpenCore editado a mano. El kvm-gui es mi proyecto para unir ambos mundos: una app con el aspecto y el flujo de VirtualBox, ejecutándose directamente sobre QEMU/KVM, que crea VM macOS, Linux y Windows a velocidad nativa — todo en un único binario Go que también es línea de comandos y servidor MCP para agentes de IA.

Para el laboratorio casero. macOS es software de Apple y su licencia solo permite ejecutarlo en hardware de la marca Apple. Comprueba que tu uso complies con los términos de la licencia. El proyecto no tiene ninguna relación con Apple.

Lo que ofrece kvm-gui

  • macOS en pocos clics — tú eliges la versión y la aplicación descarga la recovery directamente de Apple, comprobando la firma. OpenCore y OVMF vienen integrados: nada de clonar OSX-KVM ni editar config.plist
  • Metal en macOS con el Reims vGPU, una GPU paravirtual que utiliza el controlador Vulkan del host, sin necesidad de una segunda tarjeta gráfica
  • Linux, Windows y otros desde una ISO — perfiles de SO, UEFI con Secure Boot, TPM 2.0 para Windows 11 y pantallas desde HD hasta 4K
  • 3D y Vulkan en invitados Linux en la GPU del host que elijas, sin passthrough: OpenGL mediante virgl y Vulkan mediante Venus
  • El flujo de trabajo de VirtualBox — gestor con pestañas Detalles, Pantalla, Instantáneas y Registros, asistente de nueva VM, Configuración, instantáneas, clones completos e importación y exportación de .ova compatible con VirtualBox
  • Velocidad nativa de KVM, y las VMs siguen funcionando después de cerrar la aplicación
  • Automatizable — todo lo que hace la GUI es un comando, y los agentes de IA (Claude, Codex, Cursor) controlan las VMs mediante el servidor MCP

Gerenciador do kvm-gui no estilo VirtualBox, com VMs macOS, Ubuntu e Windows 11 e os detalhes de uma VM macOS Sequoia em Reims vGPU

Cómo funciona por dentro

El kvm-gui no es un frontend de libvirt. El mismo binario tiene tres entradas — la GUI de escritorio (Go + Wails), la CLI (kvm-gui vm …) y el servidor MCP (kvm-gui mcp, a través de stdio) — y las tres pasan por el mismo núcleo en Go, que valida la configuración, bloquea la carpeta de la VM contra el uso concurrente, guarda la lista de VMs en un SQLite y construye los argumentos de QEMU. Para cada VM inicia un proceso de QEMU con KVM, controlado mediante un socket QMP privado; la pantalla llega a la aplicación mediante un socket VNC también privado, sin ningún puerto de red abierto. Los discos qcow2, la NVRAM UEFI, el estado del TPM y las instantáneas se guardan en una carpeta por VM.

Diagrama da arquitetura do kvm-gui: GUI, CLI e servidor MCP sobre o mesmo núcleo, um processo QEMU/KVM por VM e convidados macOS, Linux e Windows

Instalación

Necesitas una CPU x86_64 con virtualización (VT-x / AMD-V) activada en el firmware y QEMU 10.0 o más reciente: los paquetes instalan QEMU por ti. Descarga el paquete de tu distro en última versión y comprueba la descarga:

sha256sum -c --ignore-missing SHA256SUMS
sudo apt install ./kvm-gui_*_amd64.deb          # Ubuntu 26.04, Debian 13

En Rocky Linux 10, WebKitGTK viene de EPEL:

sudo dnf install epel-release && sudo dnf install ./kvm-gui-*-1.x86_64.rpm

También hay AppImage y binario puro, que dependen de GTK 4, WebKitGTK 6 y del QEMU de la distribución. En Ubuntu 24.04, quédate en la v0.15.0, la última versión para él.

Tu primera VM

Una sola vez, prepara el host: el setup instala lo que falte de QEMU, carga el módulo KVM, te añade al grupo kvm y ajusta los parámetros de kernel necesarios, pidiendo la contraseña una sola vez mediante pkexec. Después, solo hay que abrir la aplicación:

kvm-gui setup
kvm-gui

Haz clic en New, elige macOS y la versión, o Linux / Windows / Other con una ISO. KVM-GUI detecta el sistema y sugiere CPU, memoria y disco de acuerdo con tu host. Haz clic en Start y la pantalla aparece dentro de la aplicación; una VM de macOS se inicia por sí sola en la Recovery, desde donde instalas el sistema.

Assistente Nova VM do kvm-gui, com nome, pasta, ISO, tipo de convidado e versão do macOS

Los mismos pasos desde la terminal:

kvm-gui vm create Ubuntu --guest linux --profile ubuntu --iso ubuntu-26.04.iso
kvm-gui vm start

Linux y Windows con 3D, Vulkan y TPM

Los invitados de Windows usan UEFI con Secure Boot y un TPM 2.0 emulado por swtpm, lo que cumple los requisitos de Windows 11. En invitados de Linux, la opción de aceleración 3D conecta virtio-gpu con virgl (OpenGL), y Vulkan (Venus) lleva Vulkan del invitado hasta la GPU del host que elijas: el vulkaninfo dentro de la VM muestra tu placa AMD o NVIDIA, sin passthrough. Vulkan se validó en el host de referencia, Ubuntu 26.04; en Debian 13 hay 3D sin Vulkan.

Configurações de tela do kvm-gui com aceleração 3D e Vulkan (Venus) e a escolha da GPU do host

Desde VirtualBox

Si tienes VMs en VirtualBox, use Archivo › Importar appliance… con un .ova, o:

kvm-gui vm import-ova box.ova --dry-run   # mostra o que será criado e o que não é mantido
kvm-gui vm import-ova box.ova

El appliance se trata como no confiable: se comprueban el manifiesto, las cabeceras y los discos antes de convertirlo a qcow2, y una importación fallida no deja restos. El camino de vuelta también existe: kvm-gui vm export-ova genera un .ova que VirtualBox 7 importa. Las VMs de macOS quedan fuera del OVA y migran entre hosts con kvm-gui vm export --full.

macOS con Metal: Reims vGPU

macOS no tiene controlador para las placas de vídeo emuladas de QEMU, así que sin aceleración la interfaz va pesada. kvm-gui integra el Reims vGPU, una GPU paravirtual que entrega Metal al invitado usando el controlador Vulkan de la GPU que ya dibuja tu escritorio. La app instala QEMU de Reims desde un paquete listo, con SHA-256 comprobado:

kvm-gui reims install
kvm-gui reims status

En el host de referencia, un macOS Sequoia 15.8.1 arranca en Reims vGPU con Metal activo. Sonoma es la versión validada de principio a fin; las demás, de High Sierra a Tahoe, son experimentales.

Tus VMs en manos de un agente de IA

El mismo binario es un servidor MCP. Para usarlo en Claude Code:

claude mcp add kvm-gui -- kvm-gui mcp

Ahí hay que pedir, por ejemplo, “crea una VM Ubuntu a partir de ~/Downloads/ubuntu.iso e arráncala”. El agente crea, arranca y apaga VMs, ve la pantalla y escribe en ella, ejecuta comandos por SSH, hace instantáneas e importa y exporta appliances. Las acciones destructivas, como forzar el apagado o ejecutar comandos en el invitado, requieren confirmación explícita. Si te gusta el tema, el mcp-wp-go sigue la misma idea para WordPress.

Hosts compatibles

Host Paquete Estado
Ubuntu 26.04 .deb probado en cada CI; host de referencia (3D y Vulkan validados)
Debian 13 .deb probado en cada CI; 3D sin Vulkan
Rocky Linux 10 .rpm probado en cada CI; las VMs de macOS necesitan Reims vGPU y el QEMU de la distro no tiene 3D
Ubuntu 24.04 — sin soporte; usa la v0.15.0

Bajo el capó

Backend en Go con Cobra para la CLI, el SDK oficial de MCP en Go y SQLite en Go puro (modernc.org/sqlite); la GUI es Wails con Vue. OpenCore, Lilu, VirtualSMC, WhateverGreen y OVMF vienen integrados desde las versiones oficiales. Todo se compila en una imagen Docker (make image test dist) y cada versión se instala y se ejecuta en contenedores limpios de Ubuntu 26.04, Debian 13 y Rocky Linux 10. Licencia BSD-3-Clause, con créditos a OSX-KVM, acidanthera, TianoCore, Dortania y Reims vGPU.

Pruebe

Si vives entre la comodidad de VirtualBox y el rendimiento de KVM, kvm-gui es para tu home lab: un binario, las VMs que ya conoces y un agente de IA de regalo. Instálalo, crea la primera VM y cuéntame qué te ha parecido: las estrellas y los issues en GitHub son muy bienvenidos. Para el contexto histórico, consulta también la historia de Proxmox, otro proyecto que hizo que KVM resultara amigable, y el ova2xva, para llevar VMs de VirtualBox a XCP-ng.