Historia de X-Window

X Window Systems, X Window o simplemente X es un sistema de ventanas orientado a red (network-based window system), independiente del hardware y del sistema operativo y considerado ampliamente como el estándar en este contexto.

X es un sistema extremadamente complejo, lo que en gran parte se debe a que debe correr sobre gran variedad de configuraciones hardware y software, así como de periferia de visualización. Existen implementaciones de X que se ejecutan sobre prácticamente cualquier máquina, desde PC’s o Macintosh hasta Cray pasando por una amplia variedad de máquinas intermedias. X es ya hoy día un enlace entre máquinas muy dispares con S.O. muy diferentes.

Origen de X

Nació como un intento de interconexión en red de estaciones de trabajo gráficas muy diversas con diversos S.O. Proyecto Athena (1984) de MIT con DEC e IBM.

Solución: Diseño de un sistema de ventanas, basado en el entorno W de Stanford University, con un entorno gráfico soportado por red e independiente del hardware de las máquinas que lo soportaban.

En marzo de 1988 se liberó la versión 11 actualización 2 (X11 release 2). El mismo año, la actualización 3, en enero de 1990 la actualización 4, que supuso la explosión de su difusión, y en 1992, la actualización 5.

¿ Por qué el éxito de X ?

  • X es un entorno abierto, ya que el propietario de los derechos es MIT, que lo distribuye libremente. De hecho, los fuentes son gratuitos. Por ello, quien desarrolla en X no está atado a ninguna firma comercial en particular.
  • X es un entorno gráfico de ventanas que nació en un momento en el que el mercado comenzó a demandar interfaces gráficas de usuario (GUI).
  • X se ha beneficiado también del éxito de Unix como S.O., aunque X no se diseñó específicamente para este.
  • X es transportable, debido a que existen versiones para casi cualquier plataforma. El interface con C es prácticamente el mismo para cualquiera de las implementaciones.
  • X, a nivel de ejecución y debido a su naturaleza de protocolo de red y a su independencia del SO, puede ejecutarase en una máquina y sacar resultados en otra.
  • Varios programas pueden utilizar los mismos recursos (raton, teclado, pantalla grafíca).

 

En algún momento entre 1989 y 1990, un estudiante alemán llamado Thomas Roell empezó a portar el código fuente del servidor X incluído en la Versión 11 Release 4 (X11R4), para que pudiera funcionar con una placa de video que él tenía instalada en su PC de 33 MHz Intel 386 (sin unidad de punto flotante por si no se acuerda, éste hardware ya era viejo y lento incluso en esa época). Eventualmente, Roell terminó de portar su servidor X y lo llamó X386.1.1; llamó así la atención de algunos desarrolladores de X en el MIT, en el X Consortium y en el equipo Dell Unix, residente en Austin, Texas.

Línea de tiempo de XFREE86

1984: Comienza el desarrollo del X Window System en el MIT

1986: Primera liberación comercial de X (Version 10)

1988: Se forma el MIT X Consortium

PRE-1991: X386.1.1 es liberada por Roell, sin ser parte de la distribución oficial de X

1990-1991: Roell trabaja para el Equipo Dell Unix

1991: Roell se une a SGCS, que más tarde se volvió Xi Graphics

AGOSTO 29, 1991: X386.1.2 es liberado junto a X11R5

MAYO 7, 1992: X386 1.2E 0.0 es el primer código pre-XFree86 por miembros casuales.

AGOSTO 31, 1992: Última vez que se usó «X386», cambiando luego a XFree86

SEPTIEMBRE 2, 1992: XFree86 1.0m, primera vez que se usa el nombre XFree86

FINALES DE 1993: XFree86 empieza a trabajar buscando obtener acceso y membresía en el X Consortium.

ENERO 1994: El Proyecto XFree86 Project se incorpora al X Consortium

ABRIL 26, 1994: XFree86 3.0 es la primera versión compatible con X11R6

MAYO 16, 1994: X11R6 es liberada

MAYO 27, 1994: Luego de una larga espera, la incorporación del Proyecto XFree86 se vuelve 100% oficial.

SEPT 29, 1994: La versión 3.1 de XFree86 es liberada.

JULIO 1, 1996: El Open Group asume el liderazgo de X

OCTUBRE 26, 1996: La versión 3.2 de XFree86 es liberada.

FINALES DE 1996: Metro Link dona tecnología ‘de carga’ a XFree86

ABRIL 17, 1997: Se inicia el trabajo de una nueva arquitectura a partir de la versión 3.9a

MARZO 1998: Se funda Precision Insight

MARZO 31, 1998: El Open Group libera X11R6.4 bajo una licencia restrictiva

AGOSTO 1998: Se inicia el diseño de alto nivel de DRI

SEPTIEMBRE 1998: El Open Group rescinde la licencia restrictiva para X11R6.4

OCTUBRE 5, 1998: XFree86 3.9Nh es integrado con X11R6.4

DICIEMBRE 1998: Se inicia el diseño de bajo nivel de DRI

ENERO 1999: Si inicia la implementación de DRI

FEBRERO 1, 1999: MESA 3.1 se prepara para ser liberado bajo una licencia afín a la XFree86/ BSD/MIT

FEBRERO 16, 1999: SGI libera GLX como código abierto

MYO 12, 1999: Disponibles documentos sobre el diseño de bajo nivel de DRI

MAYO 12, 1999: El Open Group forma X.org y le asigna el patrocinio de X

JUNIO 1999: Es liberada la implementación DRI 1.0

NOVIEMBRE 1999: El Proyecto XFree86 es hecho Miembro Honorario de X.org

MARZO 8, 2000: XFree86 4.0 es liberado

MEDIADOS DE 2000: SGI dona GLX y tecnologías de fuentes XFree86

OCTUBRE 27, 2000: La extensión X Render aparece en XFree86 4.0.1d

JUNIO 2001: XFree86 4.1 es liberado

 

Componentes lógicos de X

Para que la ejecución de los programas no tenga que efectuarse en la misma máquina en la que se procede a la visualización, X se diseñó, como se ha dicho, como un protocolo de red, es decir, un conjunto de peticiones (request) y réplicas (replies) entre dos procesos. Esos procesos son el cliente (client) y el servidor (server).

Un cliente es un programa de usuario o aplicación. El servidor X actúa como intermediario entre los clientes y los recursos locales como teclado, pantalla o ratón. El servidor aisla a los clientes de las diferencias y especificidades que se presentan entre distinto hardware, manejadores de dispositivos (device, drivers) o S.O.

Las tareas asignadas al servidor son:

  • Gestión del acceso al display por múltiples clientes.
  • Interpretación de los mensajes de red o peticiones (requests) provenientes de los clientes y actuación en consecuencia. Algunos mensajes solictan al servidor la ejecución de tareas como, por ejemplo, mover una ventana. Otros simplemente solicitan información al servidor.
  • Paso a los clientes de la información de entrada a través de mensajes de red denominados eventos (events) provenientes de presión de teclas, movimientos de ratón, etc. El servidor gestiona el paso adecuado de cada evento al cliente correspondiente.
  • Mantenimiento de las estructuras de datos, ventanas y fuentes, a los que los clientes se refieren por números de identificación (ID numbers).

Arquitectura de X-window

En linux el proceso gráfico no es más que otro proceso que ejecuta el sistema operativo. Esto evita muchos problemas de estabilidad al kernel. Otra ventaja que tiene es la absoluta independencia del sistema operativo y el entorno gráfico. En contrapartida a todas estas ventajas, existe el inconveniente que el entorno gráfico reduce su velocidad en comparación a otros sistemas gráficos. Estos últimos incluyen los procesos referentes al subapartado gráfico en el propio núcleo. Aunque esta práctica tiene la ventaja de que el sistema gráfico es más veloz. Se hace un gasto innecesario de recursos, aun sin usar ninguna aplicación, y estar más propensos a fallos del sistema debidos a errores en el apartado gráfico.
Toda la filosofía de X Window se basa en la arquitectura cliente/servidor. Esta arquitectura es el modelo de sistema X mediante la cual los clientes, programas de aplicaciones, se comunican con los servidores que controlan parte del hardware.

El programa que habilita un entorno gráfico X-window en un ordenador es el servidor X (X server). Se le llama servidor ya que este programa sólo se dedica a escribir en pantalla lineas, cuadros y funciones gráficas básica. El servidor X ofrece funciones gráficas primarias a las aplicaciones (clientes) que las soliciten y este las muestra en pantalla. El servidor es el programa encargado de gestionar un display. Un display se debe entender como la unidad formada por la o las pantallas y por los dispositivos de entrada, bien sea un ratón, un teclado, un trackball etc. todo este conjunto es un display. Un servidor puede servir a varios clientes a la vez. La otra parte de la arquitectura cliente / servidor es el cliente, básicamente es una aplicación que se esta ejecutando en modo gráfico. El servidor es la unidad de visualización, que puede a su vez estar formada por varios monitores o pantallas físicas.
El servidor se encarga de captar las entradas del usuario y se las pasa a las aplicaciones o clientes X, dicha información proviene de los dispositivos de entrada del display, para que los clientes actúen en consecuencia. Los clientes tienen que captar esta información y operar. La respuesta del cliente es mandada al servidor ordenándole que dibuje dicha respuesta en la pantalla o las pantallas del display. Descodifican los mensajes de los clientes, como las peticiones de información o el movimiento de una ventana. Toda la comunicación entre el cliente y el servidor se realiza en lenguaje formal X window.

Todo esta arquitectura se debe a que el sistema X windows tiene una gran flexibilidad de uso en redes. La conexión del Servidor X a los clientes no esta limitada a la misma máquina. Sino que cualquier aplicación o cliente que se este ejecutando en una red se puede conectar a cualquier servidor. Cuando decimos conectarse se quiere decir que se puede visualizar en el ordenador que ejecuta un servidor X. Una forma de aprovechar esta flexibilidad es utilizar desde casa un ordenador personal conectado a una gran computadora para aprovechar la potencia de esa computadora desde casa. Esta práctica de compartir aplicaciones esta muy extendida, de hecho existen un tipo de ordenadores cuya única función es ejecutar un servidor X, se denominan «terminales X». Estos ordenadores en ocasiones no disponen de dispositivos de almacenamiento y no son muy potentes con lo que se consigue muchos puestos de trabajo a un precio muy reducido. Otro punto importante es que no existe ninguna razón por la que el sistema X window este restringido al sistema operativo Unix o Linux. De hecho existen servidores X para DOS, Windows Macintosh u OS/2.

Una de las partes más importantes de la arquitectura cliente servidor es la conexión física entre el cliente y el servidor. De ello dependerá en gran medida el rendimiento del sistema. Una conexión de red rápida entre cliente y servidor o que el servidor este en la misma computadora que el cliente hará que el entorno funcione de una manera rápida.
La comunicación entre el cliente y el servidor sistema X-Window se realizan mediante el denominado protocolo X (X protocol). Este protocolo X permite definir el número exacto de bytes necesarios para definir una ventana. El problema es que la programación con este lenguaje es extremadamente complicada y laboriosa.
Se puede comparar el protocolo X al lenguaje máquina. De la misma manera que el ensamblador proporciona potencia a la programación en lenguaje máquina, las funciones Xlib proporcionan la potencia del protocolo X con un coste menor.
Xlib es un biblioteca de unas 300 funciones escritas en C que generan protocolo X, que facilitan la programación básica, las funciones Xlib son el punto de partida para aprender a manejar X Window y aunque sea imprescindible dominarlas. Para programar a más alto nivel nos harán falta otras herramientas.
Existen también las llamadas X Toolkit Intrinsics más comúnmente conocido como Xt intrinsics, son herramientas de más alto nivel ya que nos ayudaran a crear bloques de pantalla llamados widgets, como por ejemplo menús, barras de desplazamiento ,botones etc. La ventaja de esta herramienta es que da a la aplicación una apariencia estándar fácil de ver y de entender, con lo que se gana en facilidad de uso que es lo que se pretende desde el principio al usar el sistema X window.

image068

Terminología:

  • Servidor X: Es un programa dedicado a suministrar servicios de display en una Terminal gráfica, en favor del usuario y a petición del cliente X del usuario. Controla la pantalla y maneja el teclado y el ratón(u otros dispositivos de entrada) para uno o más clientes X. Igualmente, es responsable de la salida sobre el display, el mapeado de colores, la carga de fuentes y el mapeado del teclado. Típicamente, los servidores X se ejecutan en PCs y terminales de trabajo de tipo gráfico y de alto rendimiento, además de en las «terminales X», diseñadas para ejecutar sólo servidores X.

El servidor X X11R5 ha proporcionado algunas mejoras en la velocidad y nuevas interfaces para la fuentes. Existe un Protocolo de Servicio de Fuentes X disponible para permitir a los servidores X delegar la gestión de las fuentes en un servidor de fuentes.

  • Cliente X: Es la aplicación propiamente dicha y está diseñado para emplear una interfaz gráfica de usuario para mostrar sus salidas. Típicamente, muchos clientes X compiten por los servicios de un servidor X por cada usuario y display. El gestor de X Window, que es una entidad separada y diferenciada, resuelve los conflictos producidos por esta competencia. Xterm y Xclock son dos ejemplos de clientes X.

X11R5 ha añadido algunos clientes más, nuevas demos y una implementación completamente nueva del mapa de bits y xmag.

  • El gestor de X Window: Es un cliente X localizado en la estación de trabajo donde se ejecuta el servidor X. El gestor no es necesario para crear las ventanas, aunque permite redimensionarlas, moverlas y modificarlas cuando sea solicitado.
  • Protocolo X: Se ejecuta sobre la conexión de red y permite que se efectúen solicitudes y respuestas entre cliente y servidor. Está orientado a conexión(usa TCP) y describe el formato de los mensajes intercambiados entre cliente y servidor sobre la conexión.
  • Xlib: Contiene una rudimentaria interfaz de programación de aplicación. Se trata de una colección de subrutinas primitivas de C embebidas en todos los clientes X, que proporciona el acceso de más bajo nivel al protocolo X. Los procedimientos en Xlib traducen las peticiones de los clientes a solicitudes del protocolo X y analizan los mensajes que llegan(eventos, respuestas, errores) de los servidores X, además de suministrar diversas utilidades adicionales, por ejemplo, operaciones independientes del sistema operativo, como puede ser la gestión de almacenamiento. Es posible escribir aplicaciones enteras con Xlib. De hecho, la mayoría de los clientes X existentes son o han sido desarrollados de este modo.

X11R5 ha añadido dos grandes funcionalidades a Xlib:

  • Dispositivos independientes del color
  • Internacionalización (i18n): significa que los clientes X pueden adaptarse a los requerimientos de distintos lenguajes nativos, costumbres locales y códigos de caracteres.
  • X Toolkits: La complejidad de la interfaz de bajo nivel Xlib y de protocolo X subyacente puede ser manejada con un creciente variedad de Toolkits disponibles. Los X Toolkits son librerías de software que añaden funcionalidades de alto nivel para implementar objetos comunes de la interfaz de usuario, como por ejemplo botones, menús, barras de desplazamiento, así como herramientas de configuración para organizar estos objetos en el display. El estándar de X del MIT proporciona la base para el desarrollo de los X Toolkits. La librería, llamada Intrínsecas de Xlib o Xt, constituye las piezas elementales para construir una serie de objetos de la interfaz llamados widgets.
  • Widgets: Para toolkits basados en Xt, se hace uso de mecanismos de interfaz comunes, llamados widgets. Un widget set es básicamente una ventana X más algunos datos adicionales y un conjunto de procedimientos para operar sobre ellos. Los widgets son un concepto exclusivo del cliente. Ni el servidor X ni el protocolo son capaces de entender los widgets. Un ejemplo de widget set es el Xaw, más conocido como Athena Widget Set, distribuído por el MIT con el código fuente de X11.

Funcionalidad:

  • Los servidores y clientes X pueden estar en hosts diferentes. En ese caso podrán usar TCP/IP para comunicarse en la red. También pueden estar en la misma máquina, usando IPC(comunicación entre procesos) para comunicarse(a través de zócalos).
  • Sólo hay un servidor X por terminal, con el que se pueden comunicar múltiples clientes X. El deber del servidor X es mostrar las ventanas de aplicación y enviar al cliente X correspondiente las entradas del usuario.
  • Depende del cliente X el mantener las ventanas que ha creado. Los cambios efectuados en el display por otros clientes son notificados por eventos del servidor X. Sin embargo, los clientes no tienen que preocuparse de qué parte sus ventanas son visibles y cuáles no, o de cuándo se deben dibujar o redibujar sus ventanas.
  • El servidor X lleva la cuenta de las ventanas visibles y no visibles manteniendo pilas o stacks. Una pila contiene los «hijos de primera generación» de una ventana padre. Una ventana hijo puede ser padre si tiene a su vez una o más ventanas hijo, que de nuevo se almacenarán en una subpila. La pila primaria es la que guarda todas las ventanas localizadas directamente bajo la raíz. Ver Figura – Estructura del sistema X Window para una ilustración. Las subventas sólo pueden ser visibles del todo cuando su padre está en la cima de su respectiva pila y se halla mapeada en el display.
  • El servidor X en sí carece de funciones de gestión; sólo realiza el recorte de las ventanas sobre el puerto de visión según sus pilas. Cada cliente es responsable de sus propias ventanas. Hay un gestor de ventanas(«Window Manager») que manipula las ventanas de la cima de todos los clientes. El gestor no forma parte del servidor X sino que es en sí un cliente. En cuanto el gestor cambia algo en la pantalla(por ejemplo, redimensionando una ventana), hace que el servidor X envíe un evento a los demás clientes.
  • Los clientes envían mensajes de solicitud al servidor, que contesta con mensajes de respuesta o mensajes de error. El servidor X también puede enviar mensajes de eventos a las aplicaciones. Los mensajes de eventos indican cambios en las ventanas(y su visibilidad), y en la entrada de usuario(ratón y teclado).

image070

Figura: Estructura de ventanas del sistema X Window – Cada ventana es hijo de otra ventana, siendo la raíz el display.

 

 

Aplicar el concepto de cliente/servidor tiene las siguientes ventajas:

  • Las aplicaciones no tienen que conocer las características hardware de la terminal.
  • Las aplicaciones no tienen que estar en el mismo ordenador que la terminal.
  • Los programas escritos en Xlib son portables.
  • Se pueden añadir nuevos tipos de terminal sólo con proporcionar un servidor X adecuado.
  • Los programadores no tienen que ocuparse de las comunicaciones, sólo han de escribir aplicaciones gráficas para Xlib, con independencia de si los usuarios son locales o remotos.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.