Soy un desarrollador de Windows (Win32api) moviéndome de Windows a Linux. Al instalar Linux, hay muchas cosas que debe saber sobre X11, X Window System, X Server, Xorg, Xfree86 y lo que no.
¿Cómo es que no somos conscientes de tales cosas en Windows? El artículo de Wiki sobre estos me asusta. ¿Alguien puede explicar estas cosas? ¿Cómo trabajan ellos? ¿Por qué es tan complicado en Linux y no en Windows?
Cualquier buena referencia también es apreciada.
PD: Me encanta conocer aspectos internos, no dudes en profundizar.
Respuestas:
Windows le brinda una implementación única de un escritorio único además de una implementación única de un API / marco único, todo hecho por Microsoft.
En los sistemas Unix, obtienes una API / framework (X11 / X Window System) para el cual existen múltiples implementaciones (Xorg, Xfree86), además de las cuales obtienes varias API / frameworks de "nivel superior" (GTK +, Qt, ... ) porque X11 sin formato es muy primitivo, además de lo cual obtienes varios escritorios (Gnome, KDE, ...), todos hechos por diferentes personas.
Además, el sistema X11 se ha diseñado desde cero teniendo en mente las GUI remotas, es decir, una máquina local que muestra la GUI de una aplicación que se ejecuta de forma remota, que introduce los conceptos de un "Servidor X" y un "Cliente X".
Luego hay una nomenclatura que "se siente" al revés para los recién llegados: su máquina local está ejecutando el "Servidor X" que proporciona el servicio "mostrar una GUI", mientras que la máquina remota es el "Cliente X" que hace uso de los servicios en su máquina para mostrar la GUI.
Bueno, esa es la descripción general rápida; una vez que lo solucione, comprender los artículos / publicaciones del foro sobre el tema debería ser mucho más fácil.
Editar: para responder a los dos primeros comentarios de la OP.
Sí, "X11" es simplemente un protocolo, y Xorg / XFree86 son dos implementaciones. En su nivel básico, X11 solo se trata de dibujar líneas y puntos, lo cual no es terriblemente útil si desea hacer una GUI.
Además del protocolo X11, las personas implementaron muchas cosas, y es bastante difícil hacer una comparación 1: 1 con Windows porque Microsoft nunca se molestó en mantener las cosas separadas. Además, no soy un desarrollador de tipo GUI, es decir, mi experiencia real con cualquiera de los sistemas es mínima.
En la parte inferior, un "administrador de ventanas" proporciona una ventana (manejo de bordes, botones de cerrar / minimizar / maximizar, cambiar el tamaño, etc.), y ofrece el "espacio real" dentro de la ventana al conjunto de herramientas de widgets. Hay muchos gestores de ventanas, algunos que imitan otros sistemas (Windows, MacOS, AmigaOS, lo que sea), y en su mayoría son intercambiables y transparentes para el sistema restante.
El "conjunto de herramientas de widgets" le ofrece botones, controles deslizantes, campos de texto, etc., sobre los cuales puede construir su GUI. Esto es lo que usted (como desarrollador de aplicaciones) realmente puede "ver", en cuanto a API, y lo que decide la mayor parte del "aspecto" de su aplicación.
Un "escritorio" crea una serie de aplicaciones sobre una combinación determinada de conjunto de herramientas de widgets / administrador de ventanas, con el fin de proporcionar una apariencia consistente. No tiene que molestarse con estos a menos que realmente quiera desarrollar el escritorio en sí.
El escritorio "Gnome" utiliza el conjunto de herramientas de widgets "GTK +" en la parte superior del administrador de ventanas "Metacity".
El escritorio "KDE" utiliza el conjunto de herramientas de widget "Qt" en la parte superior del administrador de ventanas "KWin".
Tenga en cuenta que especialmente esos dos, GTK + y Qt, han evolucionado mucho más allá de simples "conjuntos de herramientas de widgets" en "marcos de desarrollo de aplicaciones". Si desea desarrollar aplicaciones GUI para Linux, debe elegir cuál de esas dos desea utilizar. Hay más opciones, si desea una aplicación más "liviana" (que no necesite las grandes dependencias de la biblioteca), pero hoy en día la mayoría de los sistemas ya tienen las librerías GTK + y Qt instaladas.
Es perfectamente posible usar aplicaciones Qt en un escritorio Gnome o aplicaciones GTK + en un escritorio KDE (no siempre fue así), por lo que debe preocuparse poco por la compatibilidad. Dada la opción entre dos aplicaciones de funcionalidad comparable, las personas generalmente preferirán la aplicación utilizando los widgets "nativos" de su escritorio de elección, pero no me preocuparía por eso.
Otros puntos más importantes en la elección del "conjunto de herramientas de widgets": términos de licencia, soporte para el idioma de su elección, compatibilidad multiplataforma.
Post Scriptum : volviendo varios años más tarde, he adquirido experiencia en programación GUI por mi cuenta, y me doy cuenta de que falta una cosa en la explicación anterior si estás buscando un consejo de "qué camino tomar": wxWidgets . Este es un marco que se basa en lo que sea que esté usando de forma nativa y permite el desarrollo de una GUI transparente y portátil , sin sacrificar el rendimiento ni tener ningún tipo de licencia. API de C ++. Es el camino que he elegido para mis necesidades de GUI, y sentí que debería mencionarse por completo.
fuente
At the bottom, a "window manager"
El administrador de ventanas se acumula en el sistema X Window? Si es así, el sistema de Windows estaría en la parte inferior derecha. Me estás confundiendo con el administrador de ventanas y el sistema de ventanas.No entiendo por qué le resulta tan difícil entender la explicación proporcionada por http://en.wikipedia.org/wiki/X_Window_System pero de todos modos:
El sistema X Window normalmente consta de 2 partes:
El servidor se conecta al hardware (tarjeta gráfica, dispositivos de entrada) y permite a los clientes utilizar estos recursos. Los clientes se conectan al servidor x y usan los recursos proporcionados.
Existen servidores para Unix (Xorg, la gente de Mac tiene su propio etc.) y para Windows (Hummingbird, el puerto de Xorg de Cygwin, etc.).
Puede conectar clientes en un sistema operativo a servidores que se ejecutan en otro sistema operativo.
La comunicación entre el servidor y los clientes se realiza a través de Xlib-API o (más moderno) xcb-API .
Para crear una aplicación simple, normalmente solo hace esto:
y hecho.
fuente