1. La emulación, en un contexto de software, es el uso de un programa o dispositivo de aplicación para imitar el comportamiento de otro programa o dispositivo.
Los usos comunes de la emulación incluyen:
- Ejecutar un sistema operativo en una plataforma de hardware para la que no fue diseñado originalmente.
- Ejecutar juegos de arcade o de consola en computadoras de escritorio.
- Ejecutar aplicaciones heredadas en dispositivos distintos a aquellos para los que fueron desarrolladas.
- Ejecutar programas de aplicación en diferentes sistemas operativos distintos de aquellos para los que fueron escritos originalmente.
Un ejemplo común de ese último tipo de emulación es ejecutar aplicaciones de Windows en computadoras Linux. Virtual PC es otro ejemplo de un emulador que permite a las Mac ejecutar Windows XP, aunque la incorporación de Boot Camp a las Mac de próxima generación basadas en Intel ha eliminado la necesidad de esa aplicación en el entorno Macintosh en el futuro.
2. En la virtualización de servidores, la emulación es sinónimo de entorno virtual. Un entorno virtual también puede denominarse partición, invitado, instancia o contenedor.
3. En hardware, la emulación es el uso de hardware para imitar la función de otro dispositivo de hardware con el fin de conectar dispositivos entre sí o conectarse a una computadora central.
La emulación de hardware puede resultar útil cuando un dispositivo de hardware o periférico, como una impresora, un escáner o una cámara digital, se vuelve obsoleto. Un emulador de impresora, por ejemplo, se encuentra dentro de la ROM de la impresora. En muchas organizaciones, persisten aplicaciones heredadas que aún deben comunicarse con el dispositivo. Para este propósito, la emulación de terminal permite que un terminal de computadora aparezca y funcione como otro tipo de terminal, generalmente más antiguo, para que un usuario pueda acceder a programas heredados.
Si bien, en teoría, cualquier aplicación puede reescribirse para que funcione en otro dispositivo o arquitectura, en la práctica dicha ingeniería inversa es bastante difícil de lograr con éxito, lo que resulta en importantes penalizaciones de rendimiento o fallas debido a errores de programación.