La invención de las máquinas virtuales

A principios de la década de 1960, las computadoras solo podían ejecutar una tarea a la vez. Si hay más de una tarea para ejecutar, debe ensamblar los procesos en lotes y ejecutarlos como tales. Esta era la norma en ese entonces porque la mayoría de los usuarios de computadoras estaban en la Comunidad Científica y, por lo tanto, el sistema de procesamiento por lotes antes mencionado parecía adaptarse a sus necesidades.

IBM el monstruo de la virtualización

Casi al mismo tiempo, IBM comenzó el desarrollo del sistema de mainframe S/360. Originalmente fue diseñado como un reemplazo amplio para muchos de sus sistemas existentes con un enfoque en la compatibilidad con versiones anteriores. Estaba destinado a ser un sistema de usuario único para ejecutar trabajos por lotes; sin embargo, el 1 de julio de 1963, el enfoque de IBM cambió con el anuncio del Proyecto MAC del MIT (es decir, el Instituto de Tecnología de Massachusetts).

Anteriormente significaba Matemáticas y Computación, luego pasó a llamarse Computadora de acceso múltiple. Para seguir investigando en este proyecto, que incluía sistemas operativos, inteligencia artificial y teoría computacional, el MIT necesitaba un sistema capaz de más de un usuario simultáneo y, por lo tanto, buscó varios proveedores de computadoras capaces de construir dicho sistema.

En este momento, IBM no veía una gran demanda en el mercado de sistemas informáticos de tiempo compartido y no estaba dispuesta a comprometerse con el desarrollo de dichos sistemas. Como resultado, MIT eligió un proveedor diferente que estaba dispuesto a correr el riesgo de concentrar sus recursos en el desarrollo de la nueva tecnología. Esta pérdida de oportunidades sirvió como una llamada de atención muy necesaria de IBM, a medida que crecía la demanda de sistemas similares.

En respuesta a la creciente necesidad de sistemas de tiempo compartido, IBM diseñó el mainframe CP-40, que aunque nunca lo utilizó fuera del laboratorio, fue la base del sistema CP-67. Este fue el primer mainframe disponible comercialmente que admitió la virtualización. El sistema operativo que se ejecutó en esta computadora se denominó CP/CMS. CP significa Programa de control y se utilizó para crear máquinas virtuales que, a su vez, ejecutaban el CMS (es decir, el sistema de monitor de consola). Aunque hoy en día CMS significa algo completamente diferente, en los años 60 significaba un pequeño sistema operativo de un solo usuario diseñado para ser interactivo.

Esto ahora se considera un hito importante no solo para la tecnología de virtualización sino también para las computadoras en general, ya que ayudó a dar forma a los sistemas operativos que usamos hoy. Antes de CP-40 y CP-67, el enfoque de IBM estaba en sistemas que no tenían interacción del usuario. La computadora alimentaría el programa y, una vez que se realizaron los cálculos, la salida se imprimió en una pantalla o en papel. El sistema operativo interactivo introducido por las nuevas computadoras de IBM permitió al usuario interactuar realmente con los programas mientras se ejecutaban. A pesar de su lanzamiento oficial al público en 1968, el primer lanzamiento estable del CP/CMS no fue hasta 4 años después, en 1972.

Enfoque tradicional de la virtualización

El enfoque tradicional de la virtualización consistía en dividir los recursos del sistema entre varios usuarios. Un buen ejemplo de un sistema operativo de tiempo compartido de esos años sería el MultiCS, que se creó inicialmente como parte del proyecto MAC del MIT y luego fue desarrollado por Bell Labs en el sistema operativo Unix que todos conocemos y amamos hoy. Este enfoque de tiempo compartido proporcionó a cada usuario su propio sistema operativo completo. Esto le dio a cada usuario su propia computadora, pero a costa de la complejidad del sistema operativo.

Portabilidad del software

Como se mencionó anteriormente, MultiCS ha evolucionado a Unix, que es un buen ejemplo de aplicación desde otra perspectiva, a pesar de no ejecutar un sistema operativo virtualizado. Aunque Unix no es el primer sistema operativo multiusuario, es uno de los sistemas operativos más utilizados y, por lo tanto, es un buen ejemplo de ello.

Dado que tiene la capacidad de tener múltiples usuarios, Unix es un buen ejemplo de virtualización a nivel de usuario o espacio de trabajo. Varios usuarios comparten los mismos recursos (es decir, CPU, RAM, almacenamiento, etc.) mientras que cada uno tiene un perfil propio, separado de los demás usuarios del sistema. Cada usuario también puede instalar sus propios conjuntos de aplicaciones si el usuario mater de la PC lo permitió (el usuario tiene acceso de root). Asimismo, la seguridad se maneja por usuario. El desarrollo de Unix no solo fue el primer paso hacia los sistemas operativos multiusuario, sino también el primer paso hacia la virtualización de aplicaciones. No me malinterpretes, Unix no es un ejemplo de virtualización de aplicaciones, pero permitió a los usuarios una portabilidad mucho mayor de sus aplicaciones.

Antes del desarrollo y popularización de Unix, casi todos los sistemas operativos estaban escritos en lenguaje ensamblador y, por lo tanto, solo podían ejecutarse en cierto hardware para el que fueron diseñados. Alternativamente, Unix se escribió usando el lenguaje de programación C, por lo tanto, solo pequeñas partes del sistema operativo debían personalizarse para una plataforma de hardware específica. Esto permitió que el resto del sistema operativo se recompilara fácilmente para cada plataforma de hardware con pocos o ningún cambio realizado en el sistema operativo original.

Virtualización de aplicaciones

Con la ayuda de los compiladores de Unix y C, un usuario experimentado podría ejecutar casi cualquier programa en cualquier plataforma, pero aún se requería una compilación de todo el software en la plataforma que el usuario deseaba ejecutar. Para permitir la verdadera portabilidad del software, se necesitaba alguna forma de virtualización del software.

En 1990, Sun Microsystems inició un proyecto conocido como “Stealth”. Stealth era un proyecto dirigido por ingenieros que se habían frustrado con el uso de Sun de las API de C/C++ y sentían que había una mejor manera de escribir y ejecutar aplicaciones. Durante los siguientes años, el proyecto fue renombrado varias veces, incluidos nombres como Oak, Web Runner y, finalmente, en 1995, el proyecto pasó a llamarse Java.

En 1994, Java se dirigió a la Web mundial ya que Sun vio esto como una gran oportunidad de crecimiento. Internet es una gran red de computadoras que se ejecutan en diferentes sistemas operativos y en ese momento no tenía forma de ejecutar aplicaciones ricas de manera universal, Java era la respuesta a este problema. En enero de 1996, se lanzó el Java Development Kit (JDK), que permite a los desarrolladores escribir aplicaciones para la plataforma Java.

En ese momento, no había otro lenguaje como Java. Java le permitió escribir una aplicación una vez y luego ejecutarla en cualquier computadora que tenga instalado Java Run-time Environment (JRE). El JRE era y sigue siendo una aplicación gratuita que puede descargar desde el sitio web de Sun Microsystems, ahora el sitio web de Oracle.

Java funciona compilando la aplicación en algo conocido como código de bytes de Java. El código de bytes de Java es un lenguaje intermedio que solo puede leer el JRE. Java utiliza un concepto conocido como compilación Just in Time (JIT). En el momento en que escribe su programa, su código Java no está compilado. En su lugar, se convierte en código de bytes de Java, hasta justo antes de que se ejecute el programa. Esto es similar a la forma en que Unix revolucionó los sistemas operativos mediante el uso del lenguaje de programación C. Dado que JRE compila el software justo antes de ejecutarlo, el desarrollador no necesita preocuparse por el sistema operativo o la plataforma de hardware en la que el usuario final ejecutará la aplicación; y el usuario no necesita saber cómo compilar un programa, que es manejado por el JRE.

El JRE se compone de muchos componentes, el más importante de los cuales es la máquina virtual Java. Siempre que se ejecuta una aplicación Java, se ejecuta dentro de la máquina virtual Java. Puede pensar que la máquina virtual Java es un sistema operativo muy pequeño, creado con el único propósito de ejecutar su aplicación Java. Dado que Sun/Oracle se toma la molestia de trasladar la máquina virtual Java para que se ejecute en varios sistemas desde su teléfono celular a los servidores de su centro de datos, usted no tiene que hacerlo. Puede escribir la aplicación una vez y ejecutarla en cualquier lugar. Al menos esa es la idea; existen algunas limitaciones.

Adopción generalizada de la virtualización de hardware

Como se trató en la sección Invención de la máquina virtual, IBM fue la primera en llevar el concepto de máquinas virtuales al entorno comercial. Las máquinas virtuales, como estaban en los mainframes de IBM, todavía se utilizan hoy en día, sin embargo, la mayoría de las empresas no utilizan mainframes.
En enero de 1987, Insignia Solutions presentó un emulador de software llamado SoftPC. SoftPC permitió a los usuarios ejecutar aplicaciones Dos en sus estaciones de trabajo Unix. Esta es una hazaña que nunca antes había sido posible. En ese momento, una PC capaz de ejecutar MS-DOS cuesta alrededor de $ 1,500. SoftPC les dio a los usuarios con una estación de trabajo Unix la capacidad de ejecutar aplicaciones DOS por solo $ 500.

Para 1989, Insignia Solutions había lanzado una versión Mac de SoftPC, dando a los usuarios de Mac las mismas capacidades; y había agregado la capacidad de ejecutar aplicaciones de Windows, no solo aplicaciones de DOS. En 1994, Insignia Solutions comenzó a vender su software empaquetado con sistemas operativos precargados, incluidos SoftWindows y SoftOS/2.

Inspiradas por el éxito de SoftPC, comenzaron a surgir otras empresas. En 1997, Apple creó un programa llamado Virtual PC y lo vendió a través de una empresa llamada Connectix. Virtual PC, como SoftPC, permitía a los usuarios ejecutar una copia de Windows en la computadora Mac para evitar incompatibilidades de software. En 1998, se estableció una empresa llamada VMWare y en 1999 comenzó a vender un producto similar a Virtual PC llamado VMWare Workstation. Las versiones iniciales de la estación de trabajo VMWare solo se ejecutaban en Windows, pero luego agregaron soporte para otros sistemas operativos.

Menciono VMWare porque es realmente el líder del mercado de virtualización en el mercado actual. En 2001, VMWare lanzó dos nuevos productos a medida que se ramificaban en el mercado empresarial, ESX Server y GSX Server. GSX Server permitió a los usuarios ejecutar máquinas virtuales sobre un sistema operativo existente, como Microsoft Windows, esto se conoce como hipervisor de tipo 2. El servidor ESX se conoce como hipervisor de tipo 1 y no requiere un sistema operativo host para ejecutar máquinas virtuales. Un hipervisor de tipo 1 es mucho más eficiente que un hipervisor de tipo 2, ya que se puede optimizar mejor para la virtualización y no requiere todos los recursos necesarios para ejecutar un sistema operativo tradicional.

Desde que lanzó ESX Server en 2001, VMWare ha experimentado un crecimiento exponencial en el mercado empresarial; y ha agregado muchos productos complementarios para mejorar ESX Server. Desde entonces, otros proveedores han entrado en el mercado. Microsoft adquirió Connectix en 2003, después de lo cual relanzó Virtual PC como Microsoft Virtual PC 2004, luego Microsoft Virtual Server 2005, ambos productos inéditos de Connectix en el momento en que Microsoft los adquirió. Citrix Inc., ingresó al mercado de la virtualización en 2007 cuando adquirió XenSource, una plataforma de virtualización de código abierto que comenzó en 2003. Citrix poco después cambió el nombre del producto a XenServer.

Aplicaciones publicadas

En los primeros días de UNIX, podía acceder a aplicaciones publicadas a través de una interfaz Telnet; y luego SSH. Telnet es un pequeño programa que le permite acceder de forma remota a otra computadora. SSH es una versión de telnet que incluye varias funciones como el cifrado. Telnet/SSH le permite acceder a una interfaz de texto o una interfaz gráfica, aunque no está realmente optimizado para gráficos. Con telnet, puede acceder a gran parte de la funcionalidad del servidor dado, desde casi cualquier lugar.

Windows y OS/2 no tenían forma de acceder de forma remota a las aplicaciones sin herramientas de terceros. Y las herramientas de terceros disponibles solo permitían un usuario a la vez. Algunos ingenieros de IBM tuvieron la idea de crear una interfaz multiusuario para OS/2, sin embargo, IBM no compartía la misma visión. Así que en 1989 Ed Lacobucci dejó IBM y fundó su propia empresa llamada Citrus. Debido a una marca comercial existente, la empresa fue rápidamente renombrada como Citrix, una combinación de Citrus y Unix.

Citrix obtuvo la licencia del código fuente para OS/2 a través de Microsoft y comenzó a trabajar en la creación de su extensión para OS/2. La empresa operó durante dos años y creó una interfaz multiusuario para OS/2 llamada MULTIUSER. Sin embargo, Citrix se vio obligado a abandonar el proyecto en 1991 después de que Microsoft anunció que ya no sería compatible con OS / 2. En ese momento, Citrix obtuvo la licencia del código fuente de Microsoft y comenzó a trabajar en un producto similar enfocado en Windows.

En 1993, Citrix adquirió Netware Access Server de Novell. Este producto era similar a lo que Citrix había logrado para OS / 2 en el sentido de que brindaba acceso a varios usuarios a un solo sistema. Citrix obtuvo la licencia del código fuente de Windows NT de Microsoft, luego en 1995 comenzó a vender un producto llamado WinFrame. WinFrame era una versión de Windows NT 3.5 con capacidades de acceso remoto; permitiendo que varios usuarios accedan al sistema al mismo tiempo para ejecutar aplicaciones de forma remota.

Mientras desarrollaba WinFrame para Windows NT 4.0, Microsoft decidió dejar de otorgar las licencias necesarias a Citrix. En este punto, Citrix otorgó la licencia de WinFrame a Microsoft y se incluyó con Windows NT 4.0 como Terminal Services. Como parte de este acuerdo, Citrix acordó no crear un producto de la competencia, pero se le permitió ampliar la funcionalidad de Terminal Services.

Escritorios virtuales

Infraestructuras de escritorio virtual (VDI) es la práctica de ejecutar el sistema operativo de escritorio de un usuario, como Windows XP, dentro de una máquina virtual en una infraestructura centralizada. Las computadoras de escritorio virtuales tal como las consideramos hoy en día son un tema de conversación bastante nuevo. Pero son muy similares a la idea que tenía IBM en la década de 1960 con las máquinas virtuales en sus computadoras mainframe. Le da a cada usuario en el sistema su propio sistema operativo, luego cada usuario puede hacer lo que quiera sin interrumpir a otros usuarios en el sistema. Cada usuario tiene su propia computadora, está centralizada y es un uso muy eficiente de los recursos.

Si compara MultiCS de la década de 1960 con los mainframes de IBM, sería similar a comparar un servidor de terminales de Microsoft con una infraestructura de escritorio virtual en la actualidad.

El salto de los escritorios virtuales en mainframes a los escritorios virtuales como los conocemos hoy en día no sucedió realmente hasta 2007 cuando VMWare presentó su producto VDI. Antes de esta versión, los usuarios de una empresa podían utilizar escritorios virtuales como computadoras principales. Sin embargo, no era realmente una solución viable debido a los dolores de cabeza de la administración. La introducción de Virtual Machine Manager de VMWare y productos similares de empresas como Microsoft y Citrix ha permitido que esta área crezca muy rápidamente.