¿Cómo están hechos los escritorios?
Cuando yo quiero hacer una aplicación con GUI en GNU/Linux (o talvez también válido para todo *nix) me baso en las APIs (o no se como se llamen ) Qt o Gtk+, ahora, ¿en qué se basa uno para hacer un escritorio tipo KDE, GNOME, Xfce...?
Y ya de paso... ¿es lo mismo en Windows (obviamente usando Win32 en vez de Qt/Gtk+)?
Bueno, hay 3 niveles básicos
Nivel mas bajo El escritorio real es el servidor X
Nivel medio sobre el escritorio van las Apis, como QT o Gtk
Nivel Alto sobre las apis o librerías se construyen los manejadores de ventana y los escritorios o framework y estos 2 son diferentes entre si y ambos se pueden omitir, uno al otro pero entonces uno o el otro estaría incompleto
Las ventanas las provee el servidor X, pero las ventanas se ven muy simples así nomás, son solo cuadros reservados para mostrar una aplicación grafica..
Para solucionar el aspecto visual vienen los manejadores de ventana que básicamente es ponerle piel al X (skin) y con esto ya tienen una apariencia más agradable, pero no esta integrado.
Por ejemplo un framework o integración común que conocemos es Windows, todos los programas son integrados por subprocesos que omitimos por que los damos por hecho. El más común es el clipboard o portapapeles. Ese simple copiar y pegar nos integra nuestros programas por que podemos pasar información entre programas que podrían ser escrito por gente que no se conoce y que nunca pensaron que sus programas interactuaran, pero al estar ambos programas en la misma pc interactúan al menos en el portapapeles
Entonces en los manejadores de ventanas esta función la viene a dar el framework que elegimos como KDE o Gnomo, que se encargan de lanzar procesos que permiten integrar los programas y a esto es lo que ya nosotros llamamos escritorio, en forma sinónima al escritorio de Windows.
Los escritorios framework y los manejadores de ventana están hechos con las mismas librerías que los programas que desarrollamos, así que si sabes moverte en GTK o QT fácilmente podrás escribir un nuevo manejador de ventanas y luego su framework de integración.
Por ejemplo Gnomo y XFCE estan escritos en GTK y son framework diferentes, pero comparten las apis básicas, por que usan las librerías GTK, KDE usa QT y cualquier otro framework y manejadores de ventanas podrían ser escritos partir de QT, así como de Gtk
En resumen los escritorios están hechos casi igual que los programas que corren sobre ellos o entre ellos y son básicamente framework para integrar programas
Ahora la muestra grafica.
En la siguiente pantalla se ve solo el X que es el escritorio real, capas de mostrar programas sin importar si son QT o GTK, pero muestra los programas silvestres, por que no hay ningún manejador de ventanas que como indica su nombre maneja las ventanas, permitiendo moverlas, minimizarlas o hacer algo. Simplemente son cuadros sin posibilidad de administrarse con el Mouse, pero totalmente funcional en su capacidad grafica y es por eso que corre una Terminal y el Gedit parte de la suite de Gnome, pero sin Gnomo solo el programa
La siguiente imagen, muestra las mismas aplicaciones ya con un manejador de ventanas el twm, pero este es un simple manejador de ventanas, le da al X la capacidad de manejar los cuadros antes estáticos, pero no permite una integración, por lo que el alt + tab para cambiar de aplicación no esta disponible y no hay nada que me permita pegar y copiar ni nada de los procesos que damos por hecho que sirven para integrarlo todo.
La ultima imagen es de nuevo los 2 programas pero ahora con una manejador de ventanas y además el framework o escritorio gnome y ahora si tenemos integrado los programas, ya podemos hacer uso del alt + tab , copiar y pegar , y todo lo que damos por hecho funciona entre programas
Espero que te sirva la explicación, por ultimo te dejo con un articulo que hice sobre portar aplicaciones visuales entre sistemas operativos, como una forma de escribir programas que sean idénticos para el usuario que final sin importar el OS que los ejecuta ni las librerías que dependen de el.
Programas visuales con C# en Windows y Linux