Tiene su origen en el llamado proyecto Athena que, encabezado por Robert Sheifler y Jim Gettys, inició el MIT (Instituto Tecnológico de Massachusetts). La meta del proyecto Athena era que los programas deberían estar disponibles interactivamente para los usuarios sobre cualquier estación de trabajo, en cualquier lugar del campus, enfrentándose con una estructura de muchos tipos de CPUs, terminales y sistemas operativos. Valiédose del sistema de ventanas W, de la Universidad de Stanford, dieron forma al X Window System.
La popularidad, sobre todo en entorno UNIX, de X Window puede ser debida entre otros factores a que los fuentes se dejaron como de libre distribución.
Inmediatamente las compañías comenzaron a improvisar sobre lo existente y surgieron los primeros problemas de incompatibilidad. Con el propósito de evitar esto, compañías como DEC, IBM o Sun Microsystems trabajaron en grupo para llegar a una versión estándard de X Window, la versión 11, en 1987. Después vendría el nacimiento del X Consortium, organización integrada por cerca de 100 corporaciones como Apple Computer, Ardent Computer, AT&T, Calcomp, Control Data, Digital Equipment, Data General, Fujitsu Microelectronics, Hewlett Packard, IBM, Eastman kodak, NCR, Nippon Electric, Prime Computer, Silicon Graphics, Sun Microsystem, Tektronix, Texas Instruments, Unisys, Wang, Xerox, etc..., y que vela por el mantenimiento del estándard, autoriza las nuevas versiones y productos que de X Window van surgiendo.
De todas formas, dentro del estándard caben diferentes tendencias en las interfaces y modos de funcionar. Así, se pueden distinguir 2 tendencias principales:
CARACTERÍSTICAS
X Window da soporte básicamente para el desarrollo de aplicaciones, actua de intermediario entre una aplicación y el sistema de presentación, que puede ser un terminal X, una estación de trabajo o un PC. La aplicación es el llamado cliente y ha de existir un llamado servidor X que le suministra servicios con un protocolo asíncrono.
Para exhibir este comportamiento X tendra estas características:
SISTEMAS DE VENTANAS X
Que no sea sólo un sistema de ventanas no impide que hablemos de cómo organiza X las ventanas: X permite a los programas mostrar ventanas conteniendo texto y gráficos en cualquier sistema que de soporte al protocolo X sin tener que modificar, recompilar o relinkar la aplicación.
Una diferencia fundamental con otros sistemas de ventanas es que X Window no impone un estilo de interfaz al desarrollador (como hacen Microsoft Windows o Macintosh) sino que proporciona al programador una serie de operaciones de bajo nivel sobre las ventanas para que diseñe dentro de las posibilidades. Esto lo hace X proporcionando una capa independiente del dispositivo que sirve como base. Tampoco ofrece elementos como botones, cajas de diálogo o barras de scroll. Estos elementos se consiguen mediante librerías de alto nivel también a disposición del desarrollador.
El servidor X es responsable de todos los dispositivos de E/S, siendo quien crea y manipula las ventanas, muestra texto y gráficos y maneja dispositivos de entrada como teclado o ratón.
El ratón es el dispositivo de interacción básico, con tres tareas fundamentales:seleccionar, ajustar y presentar menu.
Otro concepto que hay que aclarar es el de display. Para X, el display no es necesariamente el crt de un ordenador sino que un display puede ser soporte de varias pantallas y es un término que se usa también para designar al servidor (server). Como dijimos, el servidor controla los recursos del sistema de ventanas y estos son ventanas, bitmaps, fuentes, colores, y otras estructuras de datos usadas por una aplicación.
El recurso más importante en X es la ventana, sin embargo, el concepto es simple: una sección rectangular de la pantalla. A diferencia de otros sistemas, una ventana de X no tiene barra de títulos o de scroll, sino que es un rectángulo con cierto fondo. Elementos como las barras de scroll se consiguen como combinaciones de ventanas unas dentro de otras, con control sobre cada una. Son también ventanas los iconos, los menús, los paneles, los mensajes y las ventanas de trabajo propiamente dichas.
Materialmente docenas de funciones xlib controlan la creación, localización, manipulación y destrucción de ventanas. El servidor realiza estos cometidos en respuesta a llamadas de las aplicaciones clientes para crear, cambiar contenidos de las ventanas, moverlas, destruirlas, etc. Los clientes se refieren a las ventanas por su identificador (window´s ID).
X permite la existencia de múltiples ventanas de múltiples aplicaciones en el mismo display y se hace necesaria una organización.
X organiza las ventanas como una jerarquía, el Window tree. La ventana más alta en la jerarquía es denominada root window. Existe una sola por cada pantalla física, ocupa toda su extensión y no puede ser desplazada ni variar su tamaño. Cada ventana tiene un padre excepto la raiz y todas pueden tener descendientes o ventanas hijas.
Figura 1
La fig 1 muestra como un conjunto de ventanas pueden aparecer en la pantalla,mientras que la fig 2 muestra el árbol formado por esas ventanas.Las ventanas (windows) A y B son hijas de la ventana raíz, mientras que las ventanas C y E son hijas de A.La ventana G es hija de ventana E.De igual manera, D y F son hijas de B y H es hija de la ventana F.
Figura 2
Sólo aquella porción de una ventana que queda dentro de los límites de su ventana padre es visible; el servidor 'recorta' lo que queda de la ventana según los bordes de la ventana padre.
El stacking order (orden en que se apilan las ventanas) determina qué ventanas o porciones de las mismas aparecen en lo más alto (y de esta manera son visibles).Si 2 ventanas ocupan una región común en la pantalla (han de solaparse) la que está en la posición más alta en el stacking order 'oscurece' parcial o completamente la otra ventana más baja. Ej.window B está más alto en el stacking order que window A.
La geometría de una ventana está constituida por su tamaño, posición, y forma dentro de la ventana padre. Cada ventana incluyendo la raíz, tiene su propio sistema de coordenadas entero.La coordenada del extremo superior izquierdo de la ventana es (0,0).La coordenada x se incrementa conforme avanzamos hacia la derecha y la coordenada y se incrementa conforme avanzamos hacia abajo.
Figura 3
Las ventanas además tienen una serie de características y atributos como son: Clase, profundidad, visual, colores y texturas del fondo, del borde, atracción, etc... Cada condicionante tiene asociados una serie de mensajes de respuesta del sistema, error, etc.
En X, la tarea de mantener los contenidos de una ventana cuando es solapada o es recortada, por ejemplo, es responsabilidad del cliente que usa la ventana y no del sistema de ventanas como en otros casos.
Un window manager (gestor de ventanas) permite al usuario controlar la posición y tamaño de las ventanas en la pantalla.En muchos sistemas de ventanas, el gestor de ventanas es inseparable del resto del sistema de ventanas.En X, un gestor de ventanas es una aplicación cliente como las demás.
El Interclient Communications Conventions Manual (ICCCM) define el protocolo que todos los gestores de pantalla y aplicaciones deben seguir para relacionarse entre sí.
ARQUITECTURA X
A la hora de dar soporte hardware a este sistema, el usuario se puede decantar fundamentalmente por: X terminals, estaciones de trabajo y PC´s. Los X terminals permiten puestos de trabajo más baratos, pero dependiendo de ordenadores potentes que los soporten.
Figura 4: Diagrama de arquitectura
Una estación de trabajo es una opción más independiente (puede dar soporte de por si a un sistema completo) pero más cara también.
Un PC supone de principio la opción más barata, siendo usado como terminal, pero el equipar un PC con los dispositivos como monitores de mucha resolución o tarjetas de comunicación puede encarecer mucho esta opción.
Hablemos también de la filosofía de cliente-servidor: es la que adopta X Window.
MODELO CLIENTE-SERVIDOR
El proceso cliente-servidor no solo divide los procesos de las aplicaciones que interactuan entre sí, sino que además define la forma en la que va a tener lugar.
El mecanismo de comunicación entre procesos clientes y servidores es transparente al usuario y permite conectar procesos dentro de una misma máquina o a través de una red. Podemos tener un servidor de display ejecutándose en una máquina remota y los clientes realizando peticiones a través de una red. Las funciones gráficas se encomiendan a un proceso servidor situado fuera del sistema operativo.
El servidor es una aplicación más, que conoce las características del hardware gráfico de que dispone. Tiene la responsabilidad de gestionar los recursos de interacción con el usuario (pantallas, teclado, ratón, ventanas, cursor...) y servir las peticiones de los clientes.
Los clientes son aplicaciones finales, gestores de ventanas, emuladores de terminales... que solicitan servicios al servidor. Varios clientes pueden hacer peticiones a un mismo servidor (y por ello, trabajar con el mismo display) y un cliente puede dialogar con varios servidores a la vez.
Figura 5
El protocolo en si que usa X Windows para comunicación cliente-servidor es el X protocol. Toda esta comunicación se atiene a una serie de convenciones que dicta el ICCCM (Inter-Client Comunication Conventions Manual), como ya dijimos.
PROGRAMACIÓN
Un aspecto interesante pero bastante complejo es la programación en X Windows. De por si exigiría varios artículos. A modo de resumen se puede decir que define un entorno de programación, con diferentes niveles de complejidad en la programación según se usen rutinas de 'bajo nivel' de la X lib, rutinas de las X toolkit (de más alto nivel y construidas sobre la X lib, o herramientas en propiedad (una especie de lenguaje de un nivel más alto que gestiona objetos gráficos (widgets) más elaborados y evitan a los desarrolladores el entrar en los detalles técnicos de su concepción).
A modo de conclusión reflejar que X Windows parece configurarse como el estandard de facto en entornos gráficos sobre UNIX, por ser un sistema abierto, controlado en cuanto al estándard por una organización de los principales representantes en el mercado UNIX.