
Quem usa Linux no desktop e quer máquinas virtuais costuma escolher entre duas opções: o VirtualBox, confortável mas com módulo de kernel próprio e desempenho abaixo do KVM, ou o KVM puro, rápido mas cheio de linha de comando, XML do libvirt e, no caso do macOS, um repositório de scripts e um config.plist do OpenCore editado à mão. O kvm-gui é o meu projeto para juntar os dois mundos: um app com a cara e o fluxo do VirtualBox, rodando direto no QEMU/KVM, que cria VMs macOS, Linux e Windows em velocidade nativa — tudo num único binário Go que também é linha de comando e servidor MCP para agentes de IA.
O que o kvm-gui entrega
- macOS em poucos cliques — você escolhe a versão e o app baixa a recovery direto da Apple, conferindo a assinatura. OpenCore e OVMF vêm embutidos: nada de clonar OSX-KVM ou editar
config.plist - Metal no macOS com o Reims vGPU, uma GPU paravirtual que usa o driver Vulkan do host — sem precisar de uma segunda placa de vídeo
- Linux, Windows e outros a partir de ISO — perfis de SO, UEFI com Secure Boot, TPM 2.0 para o Windows 11 e telas de HD a 4K
- 3D e Vulkan em convidados Linux na GPU do host que você escolher, sem passthrough: OpenGL via virgl e Vulkan via Venus
- O fluxo do VirtualBox — gerenciador com abas Detalhes, Tela, Snapshots e Logs, assistente de nova VM, Configurações, snapshots, clones completos e importação e exportação de
.ovacompatível com o VirtualBox - Velocidade nativa do KVM, e as VMs continuam rodando depois que você fecha o app
- Automatizável — tudo que a GUI faz é um comando, e agentes de IA (Claude, Codex, Cursor) controlam as VMs pelo servidor MCP

Como funciona por dentro
O kvm-gui não é um frontend do libvirt. O mesmo binário tem três portas de entrada — a GUI de desktop (Go + Wails), a CLI (kvm-gui vm …) e o servidor MCP (kvm-gui mcp, via stdio) — e as três passam pelo mesmo núcleo em Go, que valida a configuração, trava a pasta da VM contra uso concorrente, guarda a lista de VMs num SQLite e monta os argumentos do QEMU. Para cada VM ele inicia um processo QEMU com KVM, controlado por um socket QMP privado; a tela chega ao app por um socket VNC também privado, sem porta de rede aberta. Discos qcow2, NVRAM UEFI, estado do TPM e snapshots ficam numa pasta por VM.

Instalação
Você precisa de uma CPU x86_64 com virtualização (VT-x / AMD-V) ligada no firmware e de QEMU 10.0 ou mais novo — os pacotes instalam o QEMU para você. Baixe o pacote da sua distro na última release e confira o download:
sha256sum -c --ignore-missing SHA256SUMS
sudo apt install ./kvm-gui_*_amd64.deb # Ubuntu 26.04, Debian 13
No Rocky Linux 10, o WebKitGTK vem do EPEL:
sudo dnf install epel-release && sudo dnf install ./kvm-gui-*-1.x86_64.rpm
Também há AppImage e binário puro, que dependem de GTK 4, WebKitGTK 6 e do QEMU da distribuição. No Ubuntu 24.04, fique na v0.15.0, a última release para ele.
Sua primeira VM
Uma vez só, prepare o host: o setup instala o que faltar do QEMU, carrega o módulo KVM, coloca você no grupo kvm e ajusta os parâmetros de kernel necessários, pedindo a senha uma única vez via pkexec. Depois é abrir o app:
kvm-gui setup
kvm-gui
Clique em New, escolha macOS e a versão, ou Linux / Windows / Other com uma ISO. O kvm-gui detecta o sistema e sugere CPU, memória e disco de acordo com o seu host. Clique em Start e a tela aparece dentro do app; uma VM macOS sobe sozinha na Recovery, de onde você instala o sistema.

Os mesmos passos pelo terminal:
kvm-gui vm create Ubuntu --guest linux --profile ubuntu --iso ubuntu-26.04.iso
kvm-gui vm start
Linux e Windows com 3D, Vulkan e TPM
Convidados Windows usam UEFI com Secure Boot e um TPM 2.0 emulado pelo swtpm, o que atende aos requisitos do Windows 11. Em convidados Linux, a opção de aceleração 3D liga o virtio-gpu com virgl (OpenGL), e o Vulkan (Venus) leva o Vulkan do convidado até a GPU do host que você escolher: o vulkaninfo dentro da VM mostra a sua placa AMD ou NVIDIA, sem passthrough. O Vulkan foi validado no host de referência, Ubuntu 26.04; no Debian 13 há 3D sem Vulkan.

Vindo do VirtualBox
Se você tem VMs no VirtualBox, use File › Import Appliance… com um .ova, ou:
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
O appliance é tratado como não confiável: manifesto, cabeçalhos e discos são conferidos antes da conversão para qcow2, e uma importação que falha não deixa resto. O caminho de volta também existe — kvm-gui vm export-ova gera um .ova que o VirtualBox 7 importa. VMs macOS ficam de fora do OVA e migram entre hosts com kvm-gui vm export --full.
macOS com Metal: Reims vGPU
O macOS não tem driver para as placas de vídeo emuladas do QEMU, então sem aceleração a interface fica pesada. O kvm-gui integra o Reims vGPU, uma GPU paravirtual que entrega Metal ao convidado usando o driver Vulkan da GPU que já desenha o seu desktop. O app instala o QEMU do Reims a partir de um pacote pronto, com SHA-256 conferido:
kvm-gui reims install
kvm-gui reims status
No host de referência, um macOS Sequoia 15.8.1 sobe no Reims vGPU com Metal ativo. O Sonoma é a versão validada de ponta a ponta; as demais, do High Sierra ao Tahoe, são experimentais.
Suas VMs nas mãos de um agente de IA
O mesmo binário é um servidor MCP. Para usar no Claude Code:
claude mcp add kvm-gui -- kvm-gui mcp
Aí é pedir, por exemplo, “crie uma VM Ubuntu a partir de ~/Downloads/ubuntu.iso e inicie”. O agente cria, inicia e desliga VMs, vê a tela e digita nela, roda comandos por SSH, tira snapshots e importa e exporta appliances. Ações destrutivas, como forçar o desligamento ou rodar comandos no convidado, exigem confirmação explícita. Se você curte o assunto, o mcp-wp-go segue a mesma ideia para o WordPress.
Hosts suportados
| Host | Pacote | Status |
|---|---|---|
| Ubuntu 26.04 | .deb |
testado a cada CI; host de referência (3D e Vulkan validados) |
| Debian 13 | .deb |
testado a cada CI; 3D sem Vulkan |
| Rocky Linux 10 | .rpm |
testado a cada CI; VMs macOS precisam do Reims vGPU, e o QEMU da distro não tem 3D |
| Ubuntu 24.04 | — | sem suporte; use a v0.15.0 |
Por baixo do capô
Backend em Go com Cobra para a CLI, o SDK oficial de MCP em Go e SQLite em Go puro (modernc.org/sqlite); a GUI é Wails com Vue. OpenCore, Lilu, VirtualSMC, WhateverGreen e OVMF vêm embutidos a partir das releases oficiais. Tudo compila numa imagem Docker (make image test dist) e cada release é instalada e executada em contêineres limpos de Ubuntu 26.04, Debian 13 e Rocky Linux 10. Licença BSD-3-Clause, com créditos ao OSX-KVM, acidanthera, TianoCore, Dortania e Reims vGPU.
Experimente
Se você vive entre o conforto do VirtualBox e o desempenho do KVM, o kvm-gui é para o seu home lab: um binário, as VMs que você já conhece e um agente de IA de bônus. Instale, crie a primeira VM e me conte o que achou — estrelas e issues no GitHub são muito bem-vindas. Para o contexto histórico, veja também a história do Proxmox, outro projeto que fez do KVM algo amigável, e o ova2xva, para levar VMs do VirtualBox ao XCP-ng.