lunes, 9 de julio de 2007

Tecnologías de Virtualización

El enfoque técnico y evolutivo de los sistemas de virtualización.

ABSTRACT

La industria informática se encuentra frente al resurgimiento de los sistemas de Virtualización. Éstos aparecieron en la década de los 60 del siglo pasado y evolucionaron junto al resto de la informática durante años. Pero no fue hasta hace pocos años que los sistemas de Virtualización se han metido de lleno en la agenda de desarrolladores, administradores de red y gerentes de IT de pequeñas y medianas empresas. En este artículo se introduce al lector en los aspectos técnicos de la virtualización y se realiza un breve paneo sobre las opciones comerciales y la historia de dichos sistemas. Desde los VM/370 de IBM pasando por VMware y llegando a Intel-VT y AMD-V se han recorrido décadas de avances y nuevas ideas que ya están impactando en la forma de trabajar de muchos de nosotros.

INTRODUCCIÓN

QUÉ ES UNA MÁQUINA VIRTUAL

Una máquina virtual es una ilusión de una máquina real [1]. Se trata de una ilusión creada por un programa o sistema operativo que hace creer a otro sistema operativo que tiene acceso a todo el hardware de un computador para sí mismo.

De la forma que conocemos un sistema operativo, nos referimos en general a que es un componente de software que se utiliza para administrar y aprovechar el hardware del computador. Sobre él, se instalan aplicaciones que nos ayudarán a resolver una problemática específica. Pero aunque ésta es una definición muy acotada y se pueden encontrar otros componentes de software que administran hardware, para el objetivo de este artículo será considerada como suficiente.

Debe aclararse en la definición anterior que un sistema operativo fue creado para ser el único componente de software que administra el hardware. Cuando un usuario o una aplicación requieren acceso a un dispositivo de hardware, deben hacerlo a través del sistema operativo. Si ese no fuera el caso, diferentes componentes de software podrían tratar de utilizar un mismo recurso de hardware a la misma vez y llevaría a resultados indeseables que limitarían el aprovechamiento del hardware o del computador entero.Es así que se puede deducir que el sistema operativo, para cumplir con la administración de los recursos de hardware, debe ser el único administrador permitido. Pero en los sistemas con máquinas virtuales, no sucede de esa forma, sino que debe alternarse de forma ordenada el uso de los recursos, o buscarse alguna forma de encapsulamiento. El soporte para máquinas virtuales creará ilusiones de hardware sobre las cuales se podrá correr otro sistema operativo. De esta forma, los sistemas operativos que llamaremos “guests” o “invitados” tendrán la ilusión de que están administrando un hardware que en realidad es una representación (por eso “virtual”) de un hardware real. El hardware real estará administrado en última instancia por otro sistema operativo, cuya tarea será responder al sistema operativo invitado como si el hardware fuera solo para él.

Pero la complejidad, además del inherentemente técnico a cada arquitectura, está en que un sistema operativo de máquinas virtuales debe tener la capacidad de administrar varios sistemas invitados a la misma vez y responder a cada uno de ellos de forma lo más equitativamente posible.

Pero la industria informática no solo desarrolló sistemas que puedan correr varios sistemas operativos a la misma vez sobre un mismo hardware, sino que se esfuerza por hacer que varios sistemas operativos diferentes convivan de la misma forma. Dietel cita en la carátula del capítulo “Estudio de caso: VM un sistema operativo de máquina virtual” a Robert J. Creasy quien escribiera: Si es posible atribuir convicciones políticas a los sistemas operativos, [entonces el programa de control (CP) de VM] es sin duda el más igualitario. Todos los sistemas operativos son bienvenidos.

VMM O HYPERVISOR

Dos de los términos que deben concerse para continuar con el estudio de la virtualización son VMM (Virtual Machine Monitor, Monitor de Máquina Virtual) e Hypervisor. Ambos, indistintamente, se refieren a una capa de software que corre directamente sobre el hardware (Hypervisor de Tipo 1) o que corre sobre otro sistema operativo (Hypervisor de Tipo 2).

El objetivo de un VMM o Hypervisor es lograr el particionamiento de hardware que requiere la virtualización y realizar la administración de los recursos para que sean compartidos entre los sistemas operativos invitados.

De aquí en más, podrán usarse ambos términos de acuerdo al uso que le da la literatura consultada y manteniendo como modo habitual el de VMM. Sin embargo, podrán encontrarse casos en los que algunos autores mencionan al Hypervisor como un componente de un VMM.

DÓNDE VEMOS MÁQUINAS VIRTUALES HOY EN DÍA

Hoy en día, el concepto de máquina virtual está presente en muchos aspectos informáticos cotidianos, y no solo en grandes empresas que tengan necesidad de correr varios sistemas operativos en un hardware específico, como es el caso de z/VM de IBM [10]. Éste es un sistema de virtualización que puede correr miles de máquinas virtuales con Linux. Sino que el concepto de máquina virtual está presente en la computadora que mucho de nosotros usamos en nuestro trabajo diario.

En cuanto al trabajo de desarrolladores de software, está muy difundido el uso de máquinas virtuales basadas en VMware o Microsoft Virtual PC. De esta forma se pueden mantener sistemas operativos y productos específicos que se reutilizan y sobre los cuales se desarrolla una única solución, evitando que varias soluciones convivan en un mismo entorno y puedan interferirse entre ellas.

En las empresas [6] también se ven sistemas virtualizados, ya que tienen como beneficio mantener en un solo computador físico a varios sistemas antiguos o poco escalables. Estos, que por sus características estarían desperdiciando capacidades físicas para las cuales no fueron creados, pero sin embargo, tener varios de ellos en un solo gran computador, los haría rentables.

ORÍGENES Y DESARROLLO ACTUAL

Entre los sistemas de tiempo compartido de la década de los 60 estaba CP/CMS, el cual se terminaría convirtiendo en el sistema operativo VM de IBM. De CP/CMS existieron 3 versiones CP-40/CMS, CP-67/CMS y CP370/CMS. Éste último fue la base para que en junio de 1970, IBM anunciara el sistema VM/370 [7].IBM continuó con el desarrollo de sus sistemas operativos de VM hasta llegar al actual z/VM, anunciado el 3 de octubre de 2000 y que el 6 de febrero de 2007 conoció a su versión 5.3 [10].

Pero no solo IBM ha participado de la creación de sistemas de máquinas virtuales. Otras empresas como Connectix, VMware y SWsoft, entre otras, han contribuido al desarrollo y distribución de sistemas de máquinas virtuales.Connectix fundada en 1998 produjo varios productos para Mac, un emulador de PlayStation también para Mac y los productos Virtual PC y Virtual Server. Estos dos últimos fueron comprados por Microsoft en 2003 al disolverse Connectix. Virtual PC corría sobre Mac y sobre Windows, permitiendo correr un Windows dentro de una Mac. Microsoft continuó su desarrollo y hoy ofrece Virtual PC para Mac y Windows, y Virtual Server para Windows. La siguiente evolución en esta línea será la integración de las tecnologías de virtualización dentro de Windows Server “Longhorn”, la versión de Windows Server que se espera será lanzada para el año 2008 [15].

VMware es una compañía fundada en 1998 que en 1999 presentó su producto estrella, VMware Workstartion. Según el sitio web de VMware, solo este producto ha ganado 100 premios a mejor producto. Toda la gama de productos de VMware está dedicada a máquinas virtuales con varios enfoques tecnológicos y de negocios diferentes. VMware fue el primer producto de virtualización para procesadores x86 desarrollado por sus fundadores luego de una investigación que realizaran en la Universidad de Stanford [12].

SWsoft, fundada en 1999, es propietaria de Parallels y Virtuozzo, empresas que desarrollan programas de virtualización. También mantiene un projecto “Open Source” de virtualización llamado OpenVZ. [16]

Así como las anteriores, existen otras empresas que ofrecen productos de virtualización, así como también existen varios proyectos de la comunidad “open source”.

COMO SE COMPARTEN RECURSOS ENTRE LOS SISTEMAS OPERATIVOS INVITADOS [13]

Zeichick nos ofrece una excelente y resumida descripción sobre la teoría de cómo se realiza el uso de los recursos compartidos entre los sistemas operativos invitados de un VMM.
Como todos los sistemas operativos, un VMM carga aplicaciones. En el caso de los VMM, las aplicaciones que sobre él corren son otros sistemas operativos. Y el objetivo del VMM es correrlos al mismo tiempo y compartiendo recursos.Se pueden encontrar tres formas de compartir recursos. Algunos recursos se comparten por tiempo, como puede ser el procesador, el cual es utilizado por cada invitado de acuerdo a algún tipo de programación de procesos.

Algunos recursos pueden no ser compartidos, por lo cual se les da el acceso exclusivo a un sistema operativo invitado específico. Para ilustrar el caso, se pude mencionar una tarjeta de red la cual se defina pueda ser utilizada por un único sistema invitado.

Otra forma de compartir o dividir los recursos entre los sistemas invitados, es dividiéndolos de forma virtual en varios recursos. De esta forma, el VMM manipula de forma activa pero transparente el canal de I/O del dispositivo. El caso que ejemplifica también puede ser una tarjeta de red. Cada nueva tarjeta de red virtual que utiliza el hardware real tendrá su propia dirección MAC y por lo tanto, diferente dirección IP. Cada vez que el VMM permita transmitir a un sistema invitado, hará comportarse a la tarjeta real como si fuera la virtual que enmascara.Otro caso son los discos, en el cual el VMM destina una parte del disco para cada sistema invitado. En este caso, redirecciona las llamadas de I/O del sistema invitado a la porción del disco que le corresponde, no permitiendo que otro sistema invitado acceda a un disco que no le pertenece.

TIPOS DE VIRTUALIZACIÓN [4]

Tal cual se presentara en la introducción existen varios enfoques tecnológicos de virtualización. Para este artículo se presentará la propuesta por Abramsom et al de Intel. Los autores identifican 3 tipos distintos de virtualización dependiendo de la posición que ocupa el VMM en la arquitectura de la solución de virtualización.

  • VMM alojado en un Sistema Operativo
  • Hypervisor de VMM solitario
  • VMM híbrido

VMM ALOJADO EN UN SISTEMA OPERATIVO

En este caso el VMM se construye sobre un Sistema Operativo anfitrión. Un kernel del VMM corre en modo privilegiado paralelo al kernel del sistema operativo anfitrión. De acuerdo a una política de programación de procesos, el kernel del sistema operativo y el kernel del VMM comparten el uso del procesador y el VMM se apoya en la existencia de drivers del sistema operativo anfitrión para obtener acceso a los recursos.

Pero a pesar de la facilidad con que puede ser implementado, presenta la desventaja de ser tan confiable, seguro y disponible como el sistema operativo del cual depende. El VMM también es presa de las políticas de programación de procesos del sistema anfitrión, ya que competirá con las aplicaciones que corran sobre este, así como de las necesidades del sistema anfitrión. En caso de que el sistema anfitrión deba ser reiniciado, por ejemplo para aplicar un parche de seguridad, los sistemas invitados también deben ser sacados de línea.

HYPERVISOR DE VMM SOLITARIO

Otra alternativa para un VMM es construir un Hypervisor que no dependa de otro sistema operativo, por lo cual debería tener sus propios controladores de dispositivos y programador de procesos. Con esto, se puede lograr un control total de los recursos de hardware que permita garantizar calidad de servicio para los sistemas invitados.

Otra ventaja es que el camino que realiza una solicitud de I/O de un sistema invitado es mucho más corta, ya que se realiza a través del los controladores del propio Hypervisor y no a través de los del sistema anfitrión. Pero sin embargo, se pueden presentar problemas de implementación, ya que se deben reescribir controladores para cada dispositivo de hardware. También, las funciones avanzadas de un sistema operativo, como los sistemas de administración de energía basados en ACPI deben ser reimplementadas.

VMM HÍBRIDO

Un VMM híbrido busca lograr lo mejor de los 2 mundos; la confiabilidad y seguridad de un sistema de Hypervisor solitario así como las facilidades que ofrece un sistema operativo existente.

En este método, un micro hypervisor controla la CPU y la memoria, mientras que los recursos de I/O son controlados por los controladores de dispositivos de un sistema operativo de servicio que ha sido desprevilegiado. Este sistema operativo desprivilegiado no corre otras aplicaciones y solo trabaja para el VMM, de forma de mejorar la seguridad y confiabilidad del sistema.

Como se decía al principio, un sistema híbrido ofrece lo mejor del VMM alojado y del VMM solitario, sin embargo introduce nuevos retos a resolver. Entre ellos, se incluye un problema de desempeño ocasionado por la sobrecarga de las transiciones de privilegios entre los sistemas invitados y el sistema de servicio. Pero todas las ventajas de un sistema operativo desprivilegiado de servicio solo se logran cuando se agregan nuevos soportes de hardware para controlar el Acceso Directo a Memoria (DMA) a través del hypervisor.

TÉCNICAS DE VIRTUALIZACIÓN DE I/O [4]

Mientras que en la sección anterior se trataba el enfoque de la ubicación del VMM en una arquitectura de virtualización por software, en ésta se presentan diferentes técnicas utilizadas actualmente para virtualizar el acceso a dispositivos de entrada/salida (I/O).
Al momento de virtualizar un dispositivo de I/O debe tenerse en cuenta los tipos de operaciones que deben brindarse por parte del software de virtualización:

  1. Descubrimiento del dispositivo: un mecanismo para descubrir, consultar y configurar un dispositivo.
  2. Control del dispositivo: un mecanismo de software para comunicarse con el dispositivo e iniciar una operación de I/O.
  3. Transferencia de Datos: un mecanismo para que se pueda transferir datos desde y hasta la memoria del sistema.
  4. Interrupciones de I/O: un mecanismo de hardware para notificar al software de eventos y cambios de estado.

Cada uno de estos mecanismos difiere en cada una de las técnicas de virtualización que se muestran a continuación, con sus consecuentes ventajas y desventajas.

  • Emulación
  • Paravirtualización
  • Asignación directa

EMULACIÓN

La emulación, también conocida como Virtualización Completa, refiere a la implementación de hardware real de forma completa en software. Su gran ventaja es que no requiere modificaciones al sistema invitado, ya que éste correrá como lo haría de forma nativa sobre el hardware para el que fue construido interactuando con el emulador del VMM, tal cual lo haría con hardware real. El sistema invitado no sabría que está corriendo en un ambiente virtualizado.En esta solución, el VMM debe exponer los dispositivos de hardware de manera que puedan ser descubiertos por el sistema invitado, por ejemplo en un espacio de configuración PCI, indicando los dispositivos y los espacios de memoria a través de los cuales se puede interactuar con ellos.

De la misma forma, el VMM debe proveer métodos para capturar lecturas y escrituras para que el sistema invitado crea que está interactuando con hardware real. E igual deben ser tratadas las interrupciones, emulando por software un PIC (Programmable Interrupt Controller).

Todo esto se logra implementando un “dispositivo modelo” en software por parte del VMM, el cual es totalmente independiente del hardware real. Incluso se cuenta con la ventaja que se podría portar el VMM a otro hardware sin afectar el sistema invitado.

PARAVIRTUALIZACIÓN

El hecho de modificar el software dentro del invitado, es una técnica conocida como Paravirtualización. La ventaja de paravirtualizar la I/O es mejorar el desempeño, pero tiene como desventaja que se deben modificar los drivers y otros componentes de software del sistema invitado, lo cual limita la solución si los sistemas operativos invitados son heredados.

El funcionamiento se basa en una nivel de abstracción más alto en el cual el sistema invitado se comunica con una API del VMM para realizar las operaciones de I/O en vez de acceder directamente a un dispositivo de hardware (fuera real o virtual). De esta forma se reduce la interacción entre el VMM y el sistema invitado, resultando en mejor desempeño.

En cuanto a interrupciones, en vez de usar un mecanismo emulado, la paravirtualización utiliza un mecanismo de eventos o callbacks. De esta forma se elimina la comunicación con un PIC y se realiza a través de un pequeño ISR (Interrupt Service Routine) el cual acepta las interrupciones y genera una tarea para cada una de ellas en el contexto correspondiente. De todas formas, este método también tiene la contra de que los mecanismos de manejo de interrupciones del kernel del sistema invitado deben ser modificados.

De la misma forma que la emulación, la paravirtualización soporta la migración de VM a cualquier plataforma que tenga las mismas APIs del VMM requerido por el sistema invitado.
Este enfoque fue tomado por al menos tres de los fabricantes de software de virtualización para lograr capacidad de escalamiento y mejores desempeños de I/O. Tanto Xen como VMware tienen en su oferta la capacidad de correr controladores de I/O paravirtualizados, mientras que Microsoft lo introdujo a partir de Virtual Server 2005 R2.

ASIGNACIÓN DIRECTA

En el caso de la asignación directa, el VMM permite que el sistema operativo invitado acceda directamente al hardware que necesite para las operaciones de I/O. Estos recursos de hardware deben ser propiedad de la VM en cuestión. Como en la emulación, el sistema invitado tiene la posibilidad de interactuar directamente con la interfaz estándar de un dispositivo. Sin embargo, con Asignación Directa, el sistema invitado puede reutilizar sus controladores ya existentes para comunicarse directamente con el dispositivo.

Con asignación directa, se mejora el desempeño con respecto a la emulación, aunque se tiene la contra de que solo se pueden asignar tantos recursos físicos como tenga el hardware, ya que no se comparten entre diferentes máquinas virtuales.

También se pierde en capacidad de migración, ya que para llevar una máquina virtual de una plataforma a otra se requiere que en ambas existan los mismos dispositivos. Más allá de eso, el hardware a ser asignado directamente debe soportar ese método de trabajo y las interrupciones puede que aun sea necesario manejarlas a través del VMM, donde se perdería en la práctica lo que en teoría se gana en desempeño.

VIRTUALIZACIÓN Y HARDWARE

Pero la virtualización no es un tema exclusivo de software, sino que también existen componentes de hardware que ayudan o permiten la virtualización. Las arquitecturas IBM System/370 o Motorola MC68020 ya lo permitían, pero en arquitectura x86 no fue hasta que Intel y AMD lanzaran las tecnologías Intel VT y AMD-V respectivamente, que se comenzó a tener en x86 primitivas nativas de la arquitectura para virtualización.

Deitel comenta que muchas de las operaciones de los sistemas operativos con el tiempo van pasando a la arquitectura, por ejemplo, en forma de microcódigo. Éste es un caso de ese tipo. En las arquitecturas no preparadas para virtualización, los sistemas de máquinas virtuales deben realizar operaciones muy complejas para administrar correctamente la asignación de recursos entre todos los sistemas operativos invitados.

Popek y Goldberg, en 1974, escribieron un artículo donde utilizan técnicas formales para determinar si una determinada arquitectura cumple con las condiciones suficientes para ser virtualizada. En principio debe definirse el concepto de Hypervisor o Virtual Machine Monitor (VMM) que es el componente de software que permite y administra la virtualización. Respecto del VMM, Popek y Goldberg definen que éste debe cumplir con las siguientes 3 propiedades:

  1. Equivalencia: un programa que funciona debajo del VMM debe exhibir un comportamiento esencialmente idéntico al demostrado al funcionar en una máquina directamente equivalente.
  2. Control de recursos: el VMM debe tener el control completo de los recursos virtualizados.
  3. Eficacia: una fracción estadísticamente dominante de las instrucciones de máquina se debe ejecutar sin la intervención del VMM.

Pero para definir si una arquitectura está preparada nativamente para virtualizarse, se detienen en separar el conjunto de instrucciones de la arquitectura (Instruction Set Architecture, ISA) en 3 grupos:

  1. Instrucciones Privilegiadas: son las que se atrapan si el procesador está en modo del usuario y no si está en modo de sistema.
  2. Instrucciones sensibles de control: son las que procuran cambiar la configuración de recursos del sistema.
  3. Instrucciones sensibles del comportamiento: son las que el comportamiento o el resultado depende de la configuración de los recursos (el contenido del registro de relocalización o el modo del procesador).

Con la definición de esos 3 conjuntos de instrucciones, establecen dos teoremas. En el primero indican que un VMM puede ser construido si el conjunto de instrucciones sensibles para esa computadora es un subconjunto de las instrucciones privilegiadas. En el segundo, establecen la virtualización recursiva, indicando que una máquina virtual es virtualizable recursivamente si puede correr una copia del mismo VMM que la creó.

Como ejemplos, se pueden citar las arquitecturas System/370, Motorola MC68000 y x86. En el caso de System/370, todas las instrucciones sensibles de control son privilegiadas, por lo cual cumple con las premisas de virtualización. Motorola MC68000 solo tiene una instrucción sensible no privilegiada. A partir del Motorola MC68010 dicha instrucción se hizo privilegiada. En el caso de x86 contiene 17 instrucciones sensibles no privilegiadas.

VIRTUALIZACIÓN CON SOPORTE EN LA ARQUITECTURA

Intel VT y AMD-V son la respuesta de Intel y AMD al desarrollo de la virtualización en la arquitectura x86. Ambos proponen soluciones de extensiones de la arquitectura x86 de sus procesadores de gama alta para que se acorte la distancia entre el sistema invitado y el hardware real. Aunque en x86, la virtualización ya existe a través de un componente de software, tener recursos a nivel de arquitectura que faciliten la virtualización es la forma de llegar a las tres propiedades definidas por Popek y Goldberg.

AMD

Zeichick (2007) en su artículo “Processor-Based Virtualization” [13][14] explica que la solución de AMD fue repensar la arquitectura x86 y agregar una nueva instrucción llamada VMRUN y un nuevo modo de procesador, el modo “Guest”, además de los que ya tiene dicha arquitectura: modo privilegiado y modo usuario. De esta forma, un VMM corriendo en un equipo con un procesador AMD-V, puede llamar la instrucción VMRUN para cambiar de modo “Host” a modo “Guest” y favorecer un acceso directo al hardware por parte del sistema operativo invitado.
Un procesador AMD que soporte la tecnología AMD-V, inicia y funciona como cualquier otro procesador x86 hasta el momento en que un VMM compatible ejecuta la instrucción VMRUN. A partir de ese momento el procesador se cambia a modo Host, obteniendo las nuevas capacidades de virtualización. De esta manera, se puede definir a nivel de procesador y no de software, las características de las máquinas virtuales, incluyendo cuanto procesador, recursos de I/O y memoria real tendrán asignada.

Una vez que las máquinas virtuales fueron definidas en una estructura de datos llamada VMCB (Virtual Machine Control Block, Bloque de Control de Máquina Virtual), el VMM cambia el sistema a modo Guest, pasando el control al sistema operativo invitado en la máquina virtual. Luego de ello, comienza la carga normal de ese sistema operativo virtualizado, el cual creerá que tiene y controla un conjunto de recursos únicos que en realidad son compartidos.

El procesador con soporte para AMD-V, monitoreará las actividades de cada sistema operativo invitado. Cuando uno de esos sistemas requiera ejecutar una instrucción privilegiada o requiera utilizar un recurso de hardware que tenga asignado por su VMCB, el procesador se cambiará a modo Host y el VMM evaluará el requerimiento del sistema operativo invitado. Allí decidirá qué hacer con él, si permitirlo y en tal caso como manejarlo. Eventualmente podría llegar a ejecutar una interrupción para informar de algo al sistema operativo invitado o hasta podría apagarlo si detectara un riesgo de seguridad, como podría ser que el invitado quisiera ejecutar una instrucción VMRUN por sí mismo.

Ese método es mucho más seguro y eficiente que el utilizado por software, como en Virtual PC o VMware Workstation. Cada vez que el sistema operativo invitado ejecute una instrucción privilegiada o se ejecute una interrupción, el procesador cambiará a modo Host y el VMM tomará control de la situación.

Una segunda instrucción nueva de los AMD-V, entre otras varias que agrega, es VMMCALL. Ésta permite a un sistema operativo invitado saber si está corriendo en un ambiente virtualizado y en caso necesario, pedir más recursos. Algo que solo se puede hacer en tal escenario. Un equipo físico no puede solicitar más que al operador o administrador que le agreguen más recursos cuando esté falto de memoria o el disco se esté quedando lleno, sin embargo, en un ambiente virtualizado, existen otros sistemas operativos invitados que no tienen porque estar utilizando todos los recursos asignados.

INTEL

En cuanto a Intel, maneja dos arquitecturas de procesadores, IA-32 (x86) e Itanium. Para cada una de ellas se desarrolló un enfoque diferente de arquitectura de virtualización. A continuación se tratará la solución VT-x, creada para IA-32.

VT-x agrega dos nuevos modos de operación del procesador, llamados “VMX root operation” y “VMX non-root operation”. VMX root, es un modo diseñado para ser usado por el VMM y su comportamiento es similar al de un procesador IA-32 sin la tecnología VT-x. VMX non-root es un entorno controlado por un VMM y que es usado para soportar máquinas virtuales. Ambas formas soportan los cuatro niveles de privilegio de la arquitectura IA-32, de forma que un sistema operativo invitado puede correr en el modo de privilegio para el que fue creado y el VMM mantiene la flexibilidad de niveles múltiples de privilegio.

La tecnología VT-x define dos nuevas transiciones para pasar del modo root al non-root y viceversa. Éstas son: “VM entry” y “VM exit”. También define una estructura de datos llamada VMCS (Virtual Machine Control Structure, Estructura de Control de Máquina Virtual) la cual se divide en una “guest-state area” y una “host-state area”. Cuando se ejecuta una transición “VM entry”, se carga el estado del procesador desde el área guest-state y cuando se sale, a través de una “VM exit” se guarda el estado del procesador en dicha área y se carga el estado del procesador desde el área “host-state”. El área “guest-state” se utiliza para guardar el estado del procesador virtual de una VM, como puede ser el contenido de los registros. Además, se guardan elementos del estado del procesador que no pueden ser accedidos por software, ya que el VMM no podría verlos. Entre ellos está el estado de interruptibilidad del procesador. De aquí, que los elementos de estado de la VM que puedan ser accedidos por software no serán guardados en dicha área. Estos datos se excluyen principalmente para mejorar el desempeño de ejecución de las instrucciones “VM entry” y “VM exit”.

El diseño de la implementación de la tecnología VT-x permite que el procesador pase de forma directa algunas interrupciones al sistema operativo invitado. De esta forma se ahorran entradas y salidas de la guest-area y se realiza menos carga de procesamiento por parte del VMM.
Al ser un diseño que mantiene los niveles de privilegio de uso del procesador, un sistema operativo invitado no puede saber si está corriendo en un entorno virtualizado.

CONCLUSIÓN

La virtualización puede haber sido una tecnología existente desde los comienzos de la informática moderna que ha sido relegada durante años mientras los precios del hardware eran baratos y las necesidades informáticas no estaban tan distribuidas como ahora.

Cuando se vio la necesidad de la consolidación de servidores para mantener las estructuras informáticas en tamaños administrables, se encontró que una posible solución ya había sido creada y allí renació la idea de la virtualización. Pero hay otros factores que ayudaron a llegar al estado actual: la necesidad de contar con sistemas preparados para una única tarea de uso esporádica, el desarrollo de los procesadores y su barrera de velocidad por llegar al límite físico de lo que se puede fabricar. Y sin duda que cada analista de negocios, cada administrador de redes, cada gerente de IT y cada desarrollador de sistemas de virtualización encontrarán sus razones particulares para aprovechar y desarrollar esta tecnología.

Aun se espera más avance sobre la implementación de estos sistemas. Las tecnologías de AMD e Intel para soportar virtualización desde la arquitectura están en etapas muy tempranas de distribución y solo disponibles en sus procesadores más nuevos de gama alta. Productos de software (VMM) para virtualización compiten en un mercado muy abierto y con una oferta muy amplia. Así como se dio la “guerra de los navegadores” a fines de los años 90 del siglo pasado y que ahora se repite, podría llegar a darse en algún momento una “guerra de virtualizadores” que estandarice la oferta, marque un rumbo tecnológico y el impacto se haga sentir desde los servidores de red en nuestros trabajos y universidades hasta el mismo escritorio de nuestras casa.

BIBLIOGRAFÍA

[1] DEITEL, H. M. 1993. Sistemas Operativos. 2da. ed. Wilmington: Addison Wesley.

[2] White Paper. Server Virtualization on Intel Architecture. [Folleto] INTEL. 2006.

[3] NEIGER, GIL, et al. Intel® Virtualization Technology: Hardware Support for Efficient Processor Virtualization. En: Intel Technology Journal [online] Volume 10, Issue 03. pp. 167-177, 10 ago. 2006. [citado 20 julio 2007]. Disponible en Internet : http://developer.intel.com/technology/itj/2006/v10i3/1-hardware/1-abstract.htm

[4] ABRAMSON, DARREN, et al. Intel® Virtualization Technology for Directed I/O. En: Intel Technology Journal [online] Volume 10, Issue 03. pp. 179-192, 10 ago. 2006. [citado 20 julio 2007]. Disponible en Internet : http://developer.intel.com/technology/itj/2006/v10i3/2-io/1-abstract.htm

[5] DONG, YAOZU, et al. Extending Xen with Intel® Virtualization Technology. En: Intel Technology Journal [online] Volume 10, Issue 03. pp. 193-203, 10 ago. 2006. [citado 20 julio 2007]. Disponible en Internet : http://developer.intel.com/technology/itj/2006/v10i3/3-xen/1-abstract.htm

[6] FABIAN, PATRICK, et al. Virtualization in the Enterprise. En: Intel Technology Journal [online] Volume 10, Issue 03. pp. 227-242, 10 ago. 2006. [citado 20 julio 2007]. Disponible en Internet : http://developer.intel.com/technology/itj/2006/v10i3/6-enterprise/1-abstract.htm

[7] VARIAN, MELINDA.VM and the VM Community: Past, Present, and Future. Disponible en Internet: http://www.princeton.edu/~melinda/25paper.pdf

[8] ADAMS, KEITH; AGESEN, OLE. A Comparison of Software and Hardware Techniques for x86 Virtualization. 2006. [online] [citado 20 junio 2007] Disponible en Internet: http://www.vmware.com/pdf/asplos235_adams.pdf

[9] CREASY, J. R. The Origin of the VM/370 Time-Sharing System. En: Journal of Research and Development. Volume 25, Number 5. pp. 483-490 (1981) [online] [citado 20 junio 2007] Disponible en Internet: http://domino.watson.ibm.com/tchjr/journalindex.nsf/0/d6b9939ef2f3540b85256bfa0067f4d6

[10] IBM. z/VM Overview. [online][citado 20 junio 2007] Disponible en Internet: http://www.vm.ibm.com/overview/

[11] HARDY, NORMAN. Short History of IBM’s Virtual Machines. 2006. [online] [citado 20 junio 2007] Disponible en Internet: http://cap-lore.com/Software/CP.html

[12] VMWARE. About us. [online] [citado 20 junio 2007] Disponible en Internet: http://www.vmware.com/company/home.html

[13] ZEICHICK, ALAN. Processor-Based Virtualization, AMD 64 Style, Part I. 2006. [online] [citado 20 junio 2007] Disponible en Internet: http://developer.amd.com/articles.jsp?id=14&num=1

[14] ZEICHICK, ALAN. Processor-Based Virtualization, AMD 64 Style, Part II. 2006. [online] [citado 20 junio 2007] Disponible en Internet: http://developer.amd.com/articles.jsp?id=14&num=1

[15] MICROSOFT. Windows Server Virtualization Beta to be Available with RTM of Windows Server "Longhorn". 2007. [online] [citado 20 junio 2007]. Disponible en Internet: http://www.microsoft.com/windowsserver2008/bulletins/wsvirtualization_bulletin.mspx

[16] SWSOFT. About SWsoft. 2007. [online] [citado 20 junio 2007]. Disponible en Internet: http://www.swsoft.com/en/company

domingo, 24 de junio de 2007

El Software Libre en Trámite Parlamentario

El denominado Software Libre comienza a formar parte de los proyectos Legislativos de varios países, y Uruguay no es ajeno a dicha realidad. Esta forma de producción y licenciamiento de Software ya está dando sus primeros pasos de promoción a nivel estatal.

Introducción

El diario El Observador, en su edición del sábado 9 de Junio de 2007 presenta un artículo de dos páginas donde informa que el tema está siendo tratado en el parlamento. El cronista, Alejandro Nogueira, cumple con la tarea de presentar el tema a los lectores del mencionado medio (13).

El 27 de setiembre de 2006 ingresó a la Cámara de Representantes un proyecto de ley que está dedicado a la promoción del Software denominado “Libre” dentro de los organismos del estado o en los que el estado uruguayo tiene participación accionaria mayoritaria. La propuesta fue presentada por los diputados Pablo Álvarez López, José Luis Blasina, Diego Cánepa, Alba M. Cocco Soto, Edgardo Ortuño, Aníbal Pereyra, Daisy Tourné (actual Ministra del Interior) y Carlos Varela Nestier (1).

El presente informe, motivado a raíz del artículo de El Observador, investiga y pretende dar elementos que ayuden a entender el mundo del Software Libre y las controversias que hoy en día se están dando entre nuestros legisladores, frente a lo que hoy es una opción más de licenciamiento de software. Teniendo esto en cuenta, se comentan los orígenes y de allí se realiza un análisis la propuesta existente, llevando los conceptos técnicos-legislativos a un entendimiento simplificado.

Software Libre

Lo que se conoce como Software Libre puede entenderse como la liberación de los derechos de autor por parte de los propios autores a través de algún sistema de licenciamiento que permite la distribución, modificación o uso del software creado. Pueden o no existir algunas restricciones y cada autor define que tipo de licenciamiento otorga al código por él creado.

Habiendo realizado una definición de Software Libre, se puede entrar en el detalle y sus orígenes. Uno de los mayores promotores del concepto de Software Libre es Richard Stallman quien creara la Fundación del Software Libre (FSF, Free Software Fundation) en el año 1985 (2). Dicha fundación, una organización sin fines de lucro, maneja una definición más amplia en la cual explica el significado utilizado para la palabra “Libre”.

La definición de la FSF especifica que la palabra libre refiere a “Libertad” y no a “Gratuidad”, confusión muy habitual en el idioma inglés gracias a que maneja un único vocablo (free) para ambos conceptos (3). Por eso, define cuatro “libertades” que se deben asegurar para considerar libre a un determinado producto de software:
  • La libertad de usar el programa, con cualquier propósito (libertad 0).
  • La libertad de estudiar cómo funciona el programa, y adaptarlo a cualquier necesidad (libertad 1). El acceso al código fuente es una condición necesaria para esto.
  • La libertad de distribuir copias, con lo que se puede ayudar a otros (libertad 2).
  • La libertad de mejorar el programa y hacer públicas las mejoras a los demás usuarios, de modo que toda la comunidad se beneficie. (libertad 3). El acceso al código fuente es un requisito necesario para esto.

La FSF establece en su filosofía, que un Software Libre puede venderse y ser considerado comercializable, siempre y cuando se sigan respetando las cuatro libertades antedichas. Eventualmente, alguien podría comprar un producto considerado Software Libre, y luego distribuirlo gratuitamente. En sí, la forma principal de financiamiento de la FSF no es a través de donaciones, sino a través de la venta de CDs y Manuales con Software Libre (2).

Uno de los proyectos más importantes de la FSF es GNU, un Sistema Operativo similar y compatible con Unix pero que únicamente está creado con Software Libre. El nombre GNU es un acrónimo recursivo cuyo significado en inglés es GNU’s Not Unix (20). Pero GNU no fue un Sistema Operativo completo hasta no tener uno de los núcleos (kernel) del Sistema Operativo más conocidos hasta ahora, Linux, creación del finlandés Linus Torvalds en 1991 (4).

La FSF eligió en 1992 a Linux como el núcleo del Sistema Operativo GNU cuando fue lanzado como Software Libre, creando lo que hoy se conoce como GNU/Linux y que comúnmente se le llama Linux. El origen de Linux se remonta a un proyecto universitario de Torvalds, quien se inspirara en el Sistema Operativo Minix de Andrew S. Tanenbaum (5) y lo mejorara para ser un núcleo completo (4).

Junto al concepto de Software Libre debe manejarse el concepto de formato de archivos libre. Un formato de archivos libre es aquel que está basado en estándares establecidos por alguna organización de estandarización como la Organización Internacional para la Estandarización (6) o el Consorcio para la World Wide Web (7), o cuya especificación y copyright están liberados de la misma forma que la FSF plantea para el Software Libre.

A modo de ejemplo, una consulta en el sitio web oficial de la FSF solo muestra al formato OGG, de audio, como formato libre. Otros formatos, como MP3 son formatos propietarios (8). El sitio web OpenFormats (9), presenta listas más amplias de formatos abiertos y alternativas a los formatos propietarios.

Pero la historia de los últimos años ha demostrado que el Software Libre y el propietario, así como sus formatos de archivo, conviven en la industria sin grandes problemas. Muchas empresas que han sido fundamentales en el desarrollo de las tecnologías de la información, como IBM (10) y Microsoft (11) han comenzado a combinar sus métodos de negocios con iniciativas relacionadas al Software Libre a través del Código Abierto o el Código Compartido (12).

Antecedentes en Uruguay

En el Parlamento, el asunto ha sido tratado en al menos tres oportunidades. El 18 de noviembre de 2003 se inicia el primer trámite parlamentario de una ley de promoción del Software Libre. Este proyecto pasa a archivo el 22 de febrero de 2005 (14).

El 27 de setiembre de 2006, se presenta nuevamente un proyecto de ley que a la fecha aun continúa en trámite parlamentario (1). Este proyecto, similar al de 2003, contiene algunos nuevos elementos.

En 2007, el Poder Ejecutivo envía al Parlamento el proyecto de ley de Rendición de Cuentas y Balance de Ejecución Presupuestal correspondiente al Ejercicio 2006, donde en el artículo N° 241, le asigna la suma de $ 1.400.000 al CODICEN de la ANEP para el proyecto Software Libre (15).

Pero el Software Libre en Uruguay no está solo en un proyecto parlamentario, sino que se usa y produce. El principal promotor de su uso es el Grupo de Usuarios Linux del Uruguay – UYLUG (16).

Antecedentes en el Mundo

En 2002, el Profesor en Derecho Eben Moglen de la Universidad de Columbia (17) escribió un artículo donde analizaba la importancia del tema del Software Libre a nivel gubernamental y citaba información brindada por el New York Times sobre 66 gobiernos que tenían estudios o propuestas promocionando el Software Libre.

El mismo diario citado por Moglen, en su edición del 29 de marzo de 2005 (18) bajo el título “Brasil: El mayor y mejor amigo del Software Libre” informa sobre los planes del gobierno brasileño para promover el uso del Software Libre a través del programa “PC Conectado” con el cual pretendía vender hasta 6 millones de computadores provistos de programas con licenciamiento libre a personas de bajos recursos, así como la promoción de éste en la esfera gubernamental y académica.

Enfoque del proyecto de ley de 2006

El actual proyecto de ley (1) a estudio en la Cámara de Representantes, contiene 4 artículos que solicitan que en la administración pública y en los institutos de enseñanza públicos se utilicen y difundan los productos que tienen la particularidad de considerarse Software Libre. En ningún caso define el concepto de este tipo de software, por lo cual se toma como definición para este informe la ya citada definición de la FSF.

En su artículo 1°, promociona el uso de formatos de distribución de información que sean abiertos y estándares. Para entender posibles implicancias, es significativo referirse al libro de Stallman (19), donde el autor discute el problema de las patentes en el capítulo 16. Allí indica que el Software Libre no puede utilizar formatos propietarios de archivos. Sin embargo, asiente que se encontró con el problema de que los formatos propietarios están ampliamente difundidos y que es difícil no caer en una forma de juego del huevo y la gallina. Si la mayoría de las personas no pueden usar un formato libre, distribuir en dicho formato atenta contra la libertad que promueve.

El artículo 2° solicita que se dé preferencia a la contratación de licencias de software que sean de Software Libre frente a la de software propietario. Por lo cual, el software licenciado debería cumplir con la definición de Software Libre propuesta por la FSF. El hecho del trato diferencial y preferente hacia el Software Libre indicaría que siempre que una misma solución pueda ser realizada tanto con Software Libre como con software propietario, el enfoque libre será el elegido. Para realizar la contratación de software con una licencia diferente a la libre, el organismo deberá fundamentar la decisión.

El artículo 3° indica que las instituciones educativas del estado deben agregar a su currícula la formación en Software Libre, manteniendo la actual formación que realiza en software con otro tipo de licenciamiento.

El artículo 4°, al igual que otras leyes, establece un tiempo de 6 meses para que el Poder Ejecutivo reglamente las condiciones, tiempos y formas en que se realizará la transición al sistema propuesto por el Proyecto de Ley.

Comparación de los dos proyectos de ley

Existen diferencias entre los proyectos de ley presentados en 2003 (14) y en 2006 (1). La primera de ellas está al final del artículo 1° donde la versión de 2006 incluye el texto:

“Se dará preferencia en ambos casos a los formatos abiertos y estándar”

En este pasaje se indica que el proyecto de ley, solicita que se traten de forma diferenciada el uso de formatos abiertos frente al de formatos cerrados. En este caso, se establece un sistema preferencial, que favorece a los formatos libres y abiertos. Según el enfoque de la ley y el análisis de Stallman que se presentara en la sección anterior de este informe, esto podría llegar al punto en que la información se estuviera distribuyendo preferentemente, en un formato que el público no pudiese leer hasta no tener un programa propietario o libre que permita acceder a dicho formato.

Lo anterior, es una coincidencia indeseable a los dichos de la filosofía propuesta por la FSF. Atentaría contra las libertades del individuo que no quisiera o no pudiera acceder a un archivo en un formato para el cual aun no está preparado. Es una posibilidad que difícilmente llegue a darse, aunque de todas formas, queda latente.

El artículo 2° es nuevo al proyecto de ley con respecto a la versión de 2003. De esta forma, el proyecto comienza a promover de forma directa el uso de Software Libre en la administración pública.

El artículo 3°, entre la versión 2003 y la 2006, perdió el trato diferencial que se hacía para con el Software Libre. De esta forma, en la versión 2006 los institutos de enseñanza del estado deberán enseñar tanto Software Libre como el que actualmente enseñan, en igualdad de condiciones.

El artículo 4° permaneció incambiado entre ambas versiones del proyecto de ley.

Conclusión

Una vez conocidas las bases para entender los conceptos relacionados al Software Libre, se comienza a entender por qué hacer un análisis de opinión sobre el contenido del Proyecto de Ley está fuera de este informe, ya que como comenta Nogueira en su artículo en el diario El Observador (13), “En el sustrato de esta fundamentación, y también del debate mundial sobre el tema, se entremezclan aspectos económicos y comerciales con consideraciones de perfil ético e ideológico”. Quien desee entrar más a fondo en la argumentación del proyecto de ley puede consultar las secciones de Exposición de Motivos en la bibliografía correspondiente, o leer el Diario de Sesiones con la exposición de la Señora Daisy Tourné del 6 de julio de 2004 en la Cámara de Representantes, también disponible en la bibliografía (21).

Pero si algo es claro, y queda demostrado en la extensa bibliografía que se puede consultar a través de Internet, es que el tema es muy amplio y contiene muchas aristas que deben ser tratadas con cuidado. Tanto la FSF y la comunidad del Software Libre tientan a parlamentarios alrededor del mundo con sus ideales de libertad y bajo costo, mientras que las compañías de software propietario hacen lo suyo con sus cálculos de costos de soporte y el respaldo que representaría toda una compañía organizada detrás de un producto.

El tema llegó para quedarse y poco a poco se mete dentro de nuestra sociedad. Estar informados, depende de cada uno de nosotros.

Bibliografía

[1] Poder Legislativo, Cámara de Representantes. 2006. Repartido Nº 779 - Programas de computación de formato abierto y estándar [online] [citado 10 junio 2007]. Disponible en Internet: http://www.parlamento.gub.uy/indexdb/Repartidos/ListarRepartido.asp?Id=3684

[2] Free Software Foundation. 2007. The GNU Project [online] [citado 10 junio 2007]. Disponible en Internet: http://www.gnu.org/gnu/thegnuproject.html

[3] Free Software Foundation. 2007. The Free Software Definition [online] [citado 10 junio 2007]. Disponible en Internet: http://www.gnu.org/philosophy/free-sw.html

[4] Hispalinux. 2005. ¿Qué es GNU/Linux? [online] [citado 10 junio 2007]. Disponible en Internet: http://www.hispalinux.es/GNULinux

[5] Tanenbaum, Andrew. 1987. Operating Systems: Design and Implementation. Prentice Hall.

[6] International Organization for Standardization (ISO). 2007. [online] [citado 10 junio 2007]. Disponible en Internet: http://www.iso.org/iso/en/aboutiso/isoinbrief/isoinbrief.html

[7] World Wide Web Consortium (W3C). 2007. W3C Develops Web Standards and Guidelines. [online] [citado 10 junio 2007]. Disponible en Internet: http://www.w3.org/Consortium/

[8] Free Software Foundation. 2007. File Formats [online] [citado 10 junio 2007]. Disponible en Internet: http://www.fsf.org/resources/formats/

[9] OpenFormats. 2007. Why use open formats? [online] [citado 10 junio 2007]. Disponible en Internet: http://www.openformats.org

[10] Free Software Foundation. 2007. Why “Free Software” is better than “Open Source” [online] [citado 10 junio 2007]. Disponible en Internet: http://www.gnu.org/philosophy/free-software-for-freedom.html

[11] Microsoft. 2007. CodPlex. [online] [citado 10 junio 2007]. Disponible en Internet: http://www.codeplex.com/

[12] Microsoft. 2007. SharedSource Licences. [online] [citado 10 junio 2007]. Disponible en Internet: http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx

[13] Nogueira, Alejandro. Software Libre en el Estado Uruguayo. En: El Observador (Año XVI, N° 5207), pp. 16-17, 9 jun. 2007.

[14] Poder Legislativo, Cámara de Representantes. 2003. Repartido Nº 1510 - Programas de computación de formato abierto y estándar [online] [citado 10 junio 2007]. Disponible en Internet: http://www.parlamento.gub.uy/indexdb/Repartidos/ListarRepartido.asp?Id=2272

[15] Poder Legislativo, Cámara de Representantes. 2007. Repartido Nº 964 - Rendición de cuentas y balance de ejecución presupuestal ejercicio 2006 [online] [citado 10 junio 2007]. Disponible en Internet: http://www.parlamento.gub.uy/repartidos/AccesoRepartidos.asp?Url=/repartidos/camara/d2007020070-00.htm

[16] Uruguay Linux Users Group. 2007. [online] [citado 10 junio 2007] Disponible en Internet: http://www.linux.net.uy

[17] Moglen, Eben. 2002. Free Software Matters: Free Government. [online] [citado 10 junio 2007]. Disponible en Internet: http://emoglen.law.columbia.edu/publications/lu-23.html

[18] Benson, Todd. Brazil: Free Software’s Biggest and Best Friend. En: The New York Times, 29 mar. 2005. Disponible en Internet: http://www.nytimes.com/2005/03/29/technology/29computer.html?ex=1269752400&en=9e12f51a80800820&ei=5088&partner=rssnyt

[19] Stallman, Richard. 2002. Free Software, Free Society: Selected Essays of Richard M. Stallman. Boston: GNU Press

[20] Free Software Foundation. 2007. Overview of the GNU System [online] [citado 10 junio 2007]. Disponible en Internet: Poder Legislativo, Cámara de Representantes. 2004. Diario de Sesiones, quinto período ordinario de la XLV legislatura, 32ª Sesión, N° 3213 - 6 de julio de 2004 [online] [citado 10 junio 2007]. Disponible en Internet: http://www.parlamento.gub.uy/sesiones/AccesoSesiones.asp?Url=/sesiones/diarios/camara/html/20040706d0032.htm#numeral10