Explicación de UML (Use Mode Linux) para novatos

Explicación de UML (Use Mode Linux) para novatos

UML (User Mode Linux), es como Uds. ya habrán leído, un tipo de máquina virtual implementado sobre el propio kernel de Linux. Para ser precisos, UML es un port del kernel a sí mismo, es decir que ejecuta sobre la plataforma de llamadas al sistema del kernel, tal como lo haría sobre una arquitectura hardware (como x64 por ejemplo).

El objetivo principal de UML era en principio facilitar la vida de los desarrolladores del kernel. Como se imaginarán, cuando se está probando un código/kernel nuevo si éste falla se cuelga el sistema y para volver a probar cualquier arreglo haría falta reiniciar el sistema; tal cosa es innecesaria si se está trabajando sobre UML.

Trabajar sobre UML es similar a trabajar en modo loopback, ya que debemos montar una imagen y es sobre ella que trabajaremos. La imagen la podemos conseguir del sitio de UML o generarla nosotros mismos, luego de montar la imagen ya tendremos un ´Linux sobre Linux´. Es muy importante aclarar que aparte de la imagen principal (que es indispensable), también podemos montar dispositivos del sistema como la lectora de CDs, la diskettera,etc. así como también cualquier directorio del host sobre el que corra UML. Adicionalmente tenemos también la posibilidad de conectarnos en red con la máquina host y también, usando la misma placa de red que el host, con otras máquinas.

La generación de una imagen propia es ´tan fácil´ como generar un archivo vacío (usando dd), crear el sistema de archivos (mkfs..), montarlo y luego montar alguno de nuestros directorios de la máquina host de UML y copiar sus archivos al archivo antes generado. Tengan en cuenta que si crean su propia imagen tendrán que lidiar con el /etc/fstab y hacer que monte las particiones con las que estén trabajando, como en el ejemplo que sigue...por ejemplo :-) .

Siguiendo la idea anterior podríamos por ejemplo testear determinado kernel sobre nuestro actual árbol en /usr. Así que activaríamos nuestro UML, montaríamos el directorio /usr de la máquina host sobre la virtual y tendríamos casi todo igual que en el host, sin tener que copiar nada; lo que sería útil si no tenemos tanto espacio como para duplicar /usr en la imagen UML. Otra posible utilidad sería tener disponible todo el entorno de compilación (librerías y utilidades), como para probar la compilación de programas sobre el kernel virtual, por ejemplo, como cuando usamos Garnome (el script que permite compilar Gnome completo desde el código fuente). Como se ve, esto de las máquinas virtuales tiene muchas posibilidades (no habrán visto una película, como era, Matrix? :-)

Ya que estamos hablando de copiar directorios, montar, etc. seguro que te habrás olvidado de los permisos. El UML es para el kernel real, solo otro proceso más. En condiciones normales deberías ejecutar UML como usuario y estarías igual de limitado que haciendo cualquier otra cosa como usuario. Condiciones ´no normales´, sería por ejemplo trabajar como root; esta situación es bastante peligrosa como en todos los casos en que existe la posibilidad de hacer modificaciones masivas en todo el sistema; imáginate que podría pasar si en un momento de confusión - extrema digamos - montás el /etc de tu host sobre UML y empezás a modificar el archivo fstab...humm, mejor hablemos de otro tema menos preocupante :-) Así que nunca deberías ejecutar UML como root.

Al hablar de UML siempre surge la comparación con VMware y otro software de emulación de ese tipo. Ok, vale la pena aclarar que esos programas emulan el conjunto total (o casi, casi), de instrucciones de una PC, lo que les da la posibilidad de ejecutar cualquier programa o sistema operativo que corra sobre el hardware que emulan. A diferencia de ellos, UML solo emula (por intercepción de señales de otros procesos), las llamadas al sistema del kernel, por esto UML nunca podría ser ejecutado en otro sistema operativo que no sea Linux (lo de ´nunca´ claro es una suposición, ya que cualquiera podría tomar el código fuente y modificarlo para ejecutar UML desde un BSD por ejemplo y no sería, en teoría tan complejo ni haría gran diferencia con respecto al rendimiento, en teoría).

Pese al objetivo inicial del proyecto, UML ya se ha excedido de él, porque mucha gente lo está usando en otras tareas, como por ejemplo, un entorno seguro, al cual se puede logear a usuarios ´conflictivos´ y tener corriendo servicios ´inseguros´ (una especie de sandbox); también había una idea de generar varias instancias de UML en máquinas potentes y hacerlas correr...en cluster!!!, pero esto último dependía mucho de la capacidad NUMA que aún no tenía el kernel 2.4 y (si mal no recuerdo), ya tiene el 2.6.

Esta descripción es solo eso, si querés detalles y tal vez novedades y nuevas capacidades debería ir al sitio de UML y ver que hay de nuevo. El proyecto UML, debido a sus potenciales aplicaciones, casi todas ellas revolucionarias, tiene una envidiable salud y velocidad de desarrollo, así que casi siempre hay algo nuevo para leer o implementar.

Como sea que la historia continúe, seguramente vamos a seguir escuchando acerca de UML o de iniciativas similares en el futuro cercano.

Si estás interesado, el sitio de UML es http://user-mode-linux.sourceforge.net/.

D.A. Valdez (yaco)