Mucho se ha hablado sobre Xgl este ultimo tiempo, y pareciera que todos quieren instalarlo en sus escritorios, pero también veo que hay mucha confusión acerca de que se pretende con Xgl, incluso algunos creen que es una suerte de 3ddesktop pero más espectacular. Hace tiempo que quería escribir sobre el tema, y podría haber escrito varios artículos, pero como la próxima semana no voy a tener mucho tiempo, decidí escribirlo todo en uno solo. Sé que esto llegará a Planeta GNOME Hispano en donde hay gente que sabe mucho más del tema, agradezco si me envían correcciones al artículo por mail privado.
X-Server
El sistema gráfico utilizado en Linux es X-Window, este sistema asume que las aplicaciones actúan como un cliente (x-client) de un servidor X-Window (x-server). El x-server se encarga de lograr la interacción entre el usuario y la aplicación, el rol del servidor es desplegar la imagen en pantalla, y recibir los eventos de teclado, mouse y otros dispositivos. Hay distintas implementaciones de x-servers, los hay para Linux, MacOSX y también para Windows.
Mientras mejor sea el x-server, mejor es la representación de la aplicación. Para ir mejorando un servidor x-server se van proponiendo extensiones (x extensions) y con el tiempo estas extensiones se van implementando en los distintos x-server y drivers. Ejemplos de x-server son XFree86 y Xorg.
Aunque normalmente tanto los x-client y el x-server se ejecutan en un mismo computador, la separación entre x-client y x-server también permite que una aplicación que se ejecuta en un computador, pueda utilizarse desde otro computador en forma remota con un x-server corriendo en el computador local al usuario en forma independiente del sistema operativo.
Modelo de composición
El dibujado de las aplicaciones en pantalla se llama composición. En los sistemas tradicionales, cada ventana es un rectángulo en donde se dibuja la aplicación. Cuando una ventana cubre a otra, no es necesario dibujar el contenido de la ventana no visible. Cuando una ventana que cubre a otra se mueve, la nueva superficie visible de la ventana debe ser redibujada por la aplicación. Si ustedes mueven una ventana en el escritorio rápidamente, verán como las aplicaciones intentan redibujar las ventanas. Este es el modelo de composición utilizado tanto en Windows como en Linux
Una de las desventajas es que las aplicaciones constantemente tienen que estar redibujando las ventanas aunque no hayan sufrido cambios. Si la aplicación no responde, lo único que veremos sera un rectángulo vacío, o si la aplicación se demora en redibujar, se verá un retraso en el despliegue. Otra desventaja es que una ventana que quiera utilizar áreas no rectangulares o áreas semitransparentes, tienen «conciencia» limitada de lo que esta dibujado detrás de ellas, por lo tanto cualquier ventana que no sea 100% opaca y rectangular, no se dibujará correctamente. Si han visto como funcionan gDesklets o SuperKaramba, entenderán de lo que estoy hablando.
Composite Managers : xcompmgr, luminocity, looking glass
Un modelo de composición mas evolucionado consiste en dibujar las ventanas completamente fuera de pantalla (off-screen). Cada aplicación dibuja solamente cuando necesita cambiar algo de su ventana, y el contenido completo de cada ventana siempre está disponible, aunque no sea visible. Una aplicación especializada se encarga de transferir la imagen de cada ventana al área visible de video, es decir al escritorio que vemos en pantalla. En esta transferencia puede aplicar cualquier transformación, por ejemplo cambiar el tamaño, rotar, mezclar con el fondo, etc. Esta aplicación especializada es lo que se conoce como Composite Manager. Mientras que un Window Manager debe posicionar y manipular (move/resize) las ventanas en el escritorio, un Composite Manager se encarga de renderizar las ventanas en el escritorio.
Un Composite Manager radical podría por ejemplo dibujar las ventanas como una textura sobre un polígono a través de OpenGL, y pedirle a la tarjeta de video que dibuje el polígono en pantalla, considerando que hoy en dia las tarjetas de video son hábiles en renderizar polígonos en un entorno 3D, se podría delegar gran parte del trabajo a una tarjeta con aceleración 3D. Si por ejemplo se quisiera obtener una vista minituarizada o ampliada de la ventana, bastaría simplemente con cambiar el tamaño del polígono y la tarjeta de video se encargaría de hacer el render, y Uds. saben: «sí, son rápidas». Al mover una ventana sobre otra, son simplemente dos polígonos que se superponen, y se pueden mover «como si nada».
Keith Packard trabajó en una nueva x-extension llamada Composite. Esta extensión permite cambiar el modelo de composición tradicional en donde cada ventana dibuja solo las áreas visibles, y redibuja las que se van «descubriendo», por el descrito en el párrafo anterior en donde las ventanas se dibujan siempre off-screen. El trabajo se inicio en el x-server experimental kdrive, también conocido como el x-server de freedesktop.org, y posteriormente se implementó en el servidor Xorg, que es el que viene con la mayoría de las distribuciones de Linux. Hay un paper sobre los cambios necesarios para cambiar al nuevo modelo de composición.
El primer Composite Manager conocido se llama xcompmgr, y era un Composite Manager de ejemplo que implementaba cosas simples como agregar sombras y transparencias a las ventanas. Para realizar estas sombras y transparencias se utilizaron funciones de la extensión XRender (también de K.P.), un obstáculo es que prácticamente ningún driver de Xorg acelera(ba) correctamente la extensión XRender, a excepción del driver propietario de nvidia. El problema es que la arquitectura de aceleración de Xorg (XAA) no es muy adecuada para tener XRender acelerado por hardware, mientras que la arquitectura de kdrive (KAA) si permite una buena implementación de XRender pero no hay muchos drivers compatibles con kdrive. Por lo tanto, xcompmgr solo era usable si eras propietario de una nvidia, o bien utilizabas kdrive pero sin aceleración por hardware.
Para solucionar este problema, surgió la iniciativa de EXA, que vendría siendo algo así como KAA aplicado a Xorg. La idea era que lentamente los drivers XAA se fueran convirtiendo en EXA, y el usuario puede escoger si usar EXA o el modelo tradicional XAA. Mientras tanto, en RedHat se comenzó a experimentar modificando Metacity, que es el Window Manager de GNOME, para que incluyera funciones de un Composite Manager. Este desarrollo tomo el nombre de Luminocity. Este Composite Manager era mas ambicioso que xcompmgr e incluía funciones de transformación de ventanas, uso inteligente de transparencias para destacar ventanas en transición, y un selector de escritorios en donde se podia ver cada ventana minituarizada en tiempo real.
Si buscamos otra aplicación de Composite conocida, tenemos el famoso proyecto Looking Glass de Sun. Ellos aprovecharon la extensión composite para poder hacer un Window Manager/Composite Manager que pudiera manipular las ventanas en un entorno 3D.
Xgl y Compiz
Otro camino posible para obtener buenos resultados era olvidarse de Xorg y crear un nuevo x-server que facilitara el trabajo considerando el nuevo modelo de composición, y aprovechando las características de las tarjetas de video modernas que han sido diseñadas para utilizar operaciones gráficas 3D aceleradas por hardware. Es ahi donde aparece el x-server Xgl, publicado recientemente por Dave Reveman de Novell. Este x-server realiza sus operaciones de render no utilizando un driver propio, sino que utilizando un driver OpenGL. El x-server Xgl mas común es el Xglx, y lo que hace es conectarse a otro servidor X que tenga soporte de OpenGL a través de la extensión GLX (OpenGL/X). Entonces si levantamos Xorg + Xglx tendremos un x-server con operaciones OpenGL aprovechándose de la infraestructura de otro x-server con drivers OpenGL a través de GLX. Es esta combinación la que hemos tenido oportunidad de ver últimamente en los alucinantes videos.
El Composite Manager creado para aprovechar las características de Xgl se llama Compiz, además de ser un Composite Manager también es un Window Manager. Una de las cosas interesantes de Compiz es que funciona en base a plugins, entonces cada plugin agrega un nuevo efecto especial a Compiz. Los plugins que existen a la fecha permiten hacer fade de las ventanas al aparecer/desaparecer, rotar los escritorios virtuales como un cubo, visualizar las ventanas como Exposé de MacOSX, mover las ventanas como si fueran de papel. etc.
Aiglx y Xair
No todos eran partidarios de construir un nuevo x-server como se hizo con Xgl, porque era harto trabajo. Entonces surgió un proyecto alternativo llamado Aiglx, publicado por RedHat. Aiglx permite utilizar aceleración OpenGL para realizar la composición, pero modificando suavemente Xorg. Aiglx se apoya en un Composite Manager llamado Xair, que al parecer es una evolución de Luminocity.
Soporte de Hardware
Para utilizar el nuevo modelo de composición en nuestros computadores, necesitamos hardware que sea compatible con las distintas combinaciones de x-servers y composite managers. Hoy en día la mejor alternativa es utilizar alguna tarjeta de video que utilice un chip de nvidia. El soporte va a ir mejorando a medida que se implementen las funciones necesarias por cada x-server y composite manager, específicamente el soporte de EXA, y la nueva extensión GLX_EXT_texture_from_pixmap son claves para la expansión de estas nuevas tecnologías.
El cambio en la forma en que se perciben las ventanas, y el hecho de que las aplicaciones ya no tienen que redibujar, hacen que el cambio realmente valga la pena, inclusive si solamente se utiliza xcompmgr en su forma mas básica.
Las esperanzas son altas, por ejemplo tengo una tarjeta de video integrada Intel i855 de 64MB, xcompmgr funciona perfectamente con Xorg, es suficientemente usable como para tenerlo diariamente en mi escritorio. Compiz+Xgl funcionan bien, pero con algunos «glitches», y hay cosas que funcionan lentas debido a la falta de soporte de GLX_EXT_texture_from_pixmap en la versión actual de mi driver.
¿Como estan los otros sistemas?
MacOSX cambió el modelo de composición hace bastante tiempo, a través de Quartz Extreme . Windows cambiará el modelo de composición en Windows Vista, pero requerirán un hardware mucho mas potente para poder aprovechar estas características.
septiembre 6th, 2010 at 16:54
Son dos casos diferentes.
En el caso de Windows, sin entorno gráfico no tenías ninguna funcionalidad esperable en un sistema operativo moderno : multihilos, multitarea, protección, etc.
En el caso de Linux tienes todo eso (y más) sin que te oblige a levantar un sistema gráfico. El sistema gráfico es sólo otra interfaz de usuario, pero no una parte crítica del sistema operativo.
Se puede decir que X es un sistema gráfico montado sobre el sistema operativo Linux (u otro Unix).
julio 23rd, 2010 at 20:37
Tengo una duda. Significa que Linux no es nativamente grafico?
Hasta donde tengo entendido, por ejemplo Windows era un sistema de ventanas montado sobre MS-DOS hasta que aparecio Windows XP.
Mi duda es si Linux sigue siendo un entorno de ventanas montado sobre un shell.
julio 12th, 2009 at 19:04
[…] en la edición de Enero. Como muchos otros contactos, éste se inició por mi artículo sobre “XGL y la revolución gráfica en Linux”, cuando lo escribí tenía sospechas de que era un tema interesante, pero todo lo que ha pasado con […]
julio 6th, 2009 at 23:03
[…] tardaron en aparecer proyectos que aprovecharon el nuevo modelo de composición. Mi artículo sobre la revolución gráfica en Linux y algunos cambios para mejorar el contenido y sus referencias, hizo que la cantidad de visitantes […]
julio 6th, 2009 at 15:05
[…] Begins. En este número aparece un articulo “remasterizado” de mi publicación sobre La revolución gráfica en Linux, uno de los artículos más populares de este blog. Los editores de la revista me pidieron publicar […]
abril 24th, 2009 at 10:42
Gonzalo,te entiendo perfectamente porque muchas veces he estado en la misma situación.
Este tema es más o menos específico e incluso una gran cantidad de usuarios Linux tampoco lo entienden, y al menos para usuarios normales no es necesario entender.
De todas formas, si quieres meterte en el tema, te recomiendo estos puntos de partida, y vas siguiendo los enlaces
http://www.linfo.org/x.html
http://en.wikipedia.org/wiki/X_Window_System
abril 24th, 2009 at 00:22
…. me acuerdo de los sabios que estaban solos y desencantados y te miravan y hablaban sin que nadien los entendieran….yo soy uno de aquellos que no entienden lo que dicen sorri por mi lentitud y mi incompresion solo me defiende este dicho :las vacas se olvidaron que algun dia fueron terneros..quiero aprender pero me cuesta enterder la gramatica de esta comunicacion…lei cada uno de cada comentarios;cada uno decia lo atrasado que estabas ;y otro te agradecia cada una de tus explicaciones que tu davas….y yo ahun sin entender si m puedes ayudar e indicarme a que pagina puedo ir pa entender en que mierda estoi metido te lo agradeceria .yo entiendo por que estas aqui …por tu afan de enseñar y sobre todo ayudar ….gracias de antemano por leer este mensaje un abraso a la distancia y por tu luz ahora mañana y siempre…..
septiembre 27th, 2008 at 18:44
es increible, no?
septiembre 20th, 2008 at 15:31
Felicitaciones Franco, simpre tienes muy buen material en tu blog, para uno que no está 100% interiorizado en el gnu/linux tu aportes me permiten aprender siempre algo nuevo.
Saludos
agosto 13th, 2008 at 16:42
ops.. ya lo había dicho, dos comentarios más atrás
agosto 13th, 2008 at 16:41
Este articulo es de hace dos años atras. Los cambios fueron integrados a xorg y se puede usar directamente en cualquier distribución actual con una tarjeta de video bien soportada (intel integradas y nvidia). Ya no es necesario xgl
Yo tengo una intel integrada (i945) y no se ve ningun redibujado, en la casa tengo una nvidia gforce 4 mmx y funciona un poco más lento pero tampoco se ven redibujados.
agosto 13th, 2008 at 16:36
pero ¿cuando XGL dejara depender de los otro servidor x con drivers, cuando se hagan drivers de las tarjetas para XGL??, será mas rapido que el actual?? ya que siempre observo los redibujados de pantalla mas lentos que en otros sistemas Oper.
me gustaria ver corriedo a XGL sin Xorg por debajo, ¿¿es un un sueño??
cualquier info se agradece, saludos
julio 30th, 2008 at 20:36
Estoy super encantado con todo lo que se dice y lo que he leido, de este nuevo sistema operativo y me encantaria poder instalarlo en mi computadora
junio 26th, 2008 at 12:13
Cualquier distribucion actual tiene soporte nativo para estas cosas, no necesariamente con XGL que al final fue quedando atras respecto a X.org + AIGLX
Puedes probar Fedora 8 o Ubuntu 7.10 en adelante. Por ejempo en Ubuntu vas a Sistema -> Preferencias -> Apariencia -> Efectos Visuales y seleccionas cualquier modo que no sea «normal» y se activa todo.
Lo unico que necesitas es una tarjeta de video que permita correr compiz, como una intel integrada o alguna nvidia.
junio 26th, 2008 at 10:36
Soy un novato en el tema, pero me gustaria saber como se implementan estas caracteristicas en mi PC, es decir, que distribucion de LINUX debo instalar y como se habilitan estas caracteristicas XGL. gracias.
junio 13th, 2008 at 13:08
es muy bueno su programa un saludo para la familia peña figueroa y para el octabo de la continental xao
mayo 21st, 2008 at 17:13
Alejandro, este artículo es mas o menos antiguo y muchas cosas han cambiado. Al final el camino que todos tomaron fue el de modificar el X server actual y agregar lo que faltaba para hacer posible un Composite Manager 3D. Inicialmente se conocía como AIGLX, pero después fue todo integrado en X.org.
Si usas cualqueir distribución actual con una tarjeta de video medianamente decente, ya vienen con todo esto activado y funcionando de pelos.
mayo 21st, 2008 at 03:08
Franco, algun dia podremos usar solo XGL para dibujar eliminando el XX server o siempre va a hber dependencia, me gustaria que las aplicaciones dibujaran directamnete sobre bufferes en la tarjeta de video usando XGL, se podria o estoy soñando?? , ya que ahora la tarjetas de video tienen muucha RAM y ya no es necesario tanta lentitud y redibujados, ya que desde chico desde que usaba DOS, he querido que las aplicaciones sean dibujasdas como los juegos , en donde no se vean dibujados de pantalla, y solo sean mostradas en la pantalla cuando la aplicaion temine de dibujar
grax
mayo 5th, 2008 at 13:23
super buenos sus comentarios