# QEMU

QEMU es un emulador de procesadores basado en la traducción dinámica de binarios (conversión del código binario de la arquitectura fuente en código entendible por la arquitectura huésped). QEMU también tiene capacidades de virtualización dentro de un sistema operativo, ya sea GNU/Linux, Windows, o cualquiera de los sistemas operativos admitidos; de hecho es la forma más común de uso. Esta máquina virtual puede ejecutarse en cualquier tipo de Microprocesador o arquitectura (x86, x86-64, PowerPC, MIPS, SPARC, etc.). Está licenciado en parte con la LGPL y la GPL de GNU.
El objetivo principal es emular un hardware en el que corra un sistema operativo dentro de otro sin tener que reparticionar el disco duro, empleando para su ubicación cualquier directorio dentro de este.
El programa no dispone de GUI, pero existe otro programa llamado QEMU manager que puede hacer de interfaz gráfica si se utiliza QEMU desde Windows. También existe una versión para GNU/Linux llamada qemu-launcher. En Mac OS X puede utilizarse el programa Q que dispone de una interfaz gráfica para crear y administrar las máquinas virtuales.
Existe también una variante que permite emular la computadora japonesa NEC PC-9801 hecha por Takeda Yoshida.

## Detalles

QEMU posee dos modos de operación:

### Emulación del modo usuario

Puede ejecutar programas compilados para un tipo de CPU en otro tipo de CPU. Las llamadas al sistema son pensadas para endianness y desarreglos en 32/64 bits. Wine y Dosemu son los principales objetivos de QEMU.

### Modo de emulación completo de sistema de ordenador

QEMU emula un sistema informático completo, incluyendo procesador y varios periféricos. Este puede ser usado para proveer hosting virtual a varios ordenadores virtuales en un único ordenador. QEMU puede arrancar varios sistemas operativos, incluyendo entre otros Linux, Microsoft Windows, DOS, y BSD. Admite además la emulación de varias plataformas de hardware, incluyendo x86, AMD64, Alpha, Mips, y Sparc.
La mayoría del programa está bajo licencia LGPL, y el modo de emulación de usuario tiene licencia GPL. La versión para Windows utiliza la capa de sonido FMOD, que es un programa comercial.

## Acelerador

Fabrice Bellard también escribió un módulo para el kernel Linux (se han hecho adaptaciones preliminares para FreeBSD y Windows), denominado kqemu o acelerador QEMU. Esto acelera la emulación de i386 en plataformas i386 hasta un nivel ligeramente inferior a la ejecución en modo nativo.
Se alcanza lo dicho ejecutando el modo de usuario y virtual en modo de código 8086 directamente sobre la CPU del computador. Además, sólo se usa la emulación del procesador y de los periféricos en modo kernel y en modo de código real.
Esto es similar a lo que hacen Vmware Workstation y Virtual PC. Como resultado, si se usa sobre ella MS-DOS en modo real, no incrementará demasiado el rendimiento, mientras que Windows 2000 se ejecutará con una velocidad cercana a la nativa.

## Características

* Soporta emulación de IA-32 (x86) PC, AMD64 PC, MIPS R4000, Sun's SPARC sun4m, Sun's SPARC sun4u, ARM development boards (Integrator/CP y Versatile/PB), SH4 SHIX board, PowerPC (PReP y Power Macintosh), y arquitecturas ETRAX CRIS.
* Soporte para otras arquitecturas en host y sistemas emulados (ver página principal para una lista completa).
* Aumento de velocidad — algunas aplicaciones pueden correr a una velocidad cercana al tiempo real.
* Implementa el formato de imagen de disco Copy-On-Write. Se puede declarar una unidad virtual multi-gigabyte; la imagen de disco ocupará solamente el espacio actualmente utilizado.
* Implementa la superposición de imágenes. Se puede mantener el estado de una imagen del sistema huésped, y escribir cambios en un archivo de imagen separado. De esa forma, si por ejemplo el sistema huésped se colapsa, es sencillo volver a un estado anterior que haya sido guardado.
* Soporte para ejecutar binarios de Linux en otras arquitecturas.
* Es posible salvar y restaurar el estado de la máquina (por ejemplo programas en ejecución).
* Emulación de tarjetas de red virtuales.
* Soporte SMP.
* El sistema operativo huésped no necesita ser modificado o parcheado.
* Mejoras en el rendimiento cuando se usa el módulo del kernel KQEMU (no soportado desde la versión 0.12).
* Las utilidades de línea de comandos permiten un control total de QEMU sin tener que ejecutar X11.
* Control remoto de la máquina emulada a través del servidor VNC integrado.

## Inconvenientes

* Soporte incompleto para Microsoft Windows como huésped y otros sistemas operativos (la emulación de estos sistemas es simplemente buena): fue mejorado en versiones recientes.
* Soporte incompleto para las arquitecturas utilizadas menos frecuentemente.
* Soporte incompleto de controladores (tarjetas de vídeo, sonido, E/S) para los huéspedes, por lo tanto se tiene una sobrecarga importante en aplicaciones multimedia. Por ejemplo, las tarjetas de vídeo Cirrus Logic y varias tarjetas de sonido populares (ES1370, Sound Blaster 16, y AdLib) son emuladas, pero no proveen la aceleración por hardware en el sistema host. También soporta únicamente SDL o Cocoa como bibliotecas de salida de video, sin embargo existe un parche para soportar GGI.

## Licencia

Fabrice Bellard inició el desarrollo del acelarador kqemu como código cerrado. No obstante, el 6 de febrero de 2007 cambió su licencia a GPL por lo que a partir de la versión 1.3.0pre11 pasa a ser software libre y puede usarse de acuerdo a los términos de dicha licencia. En versiones anteriores se trataba de un programa gratuito pero no se permitía distribuirlo a otras personas sin autorización explícita.

## Otras alternativas

* VMware: Programa comercial pero con versiones gratuitas.
* KVM
* Virtual PC
* VirtualBox de licencia GNU.
* Xen
* BOCHS de licencia GPL.
* Virtuozzo: Programa comercial.
* Mac on Linux
* Basilisk II
* SheepShaver