¿Qué es la API GUI nativa de Linux?

441

Espero que esto no parezca una pregunta estúpida, pero siempre es algo que me he preguntado. Tanto Windows (Win32 API) como OS X (Cocoa) tienen sus propias API para manejar ventanas, eventos y otras cosas del sistema operativo. Realmente nunca obtuve una respuesta clara sobre cuál es el equivalente de Linux.

He escuchado a algunas personas decir GTK +, pero GTK + es multiplataforma, ¿cómo puede ser nativo?

DavidColson
fuente
46
Joni tiene razón: "En Linux, la interfaz gráfica de usuario no es parte del sistema operativo ... X Window System define un protocolo de red para [capacidades de GUI]. Bibliotecas de herramientas como Gtk + (usado por Gnome) y QT (usado por KDE), construido sobre Xlib ".
paulsm4
33
por el contrario, David, esta es una excelente pregunta
amphibient
77
Estoy de acuerdo: he leído "La API de programación de Linux" y "Programación de sistemas ... Unix", que son las dos biblias en el núcleo y la API, y esta pregunta nunca se me ocurrió :) Las respuestas son interesantes.
John Humphreys - w00te
10
La API de Win32 también es multiplataforma si incluye Wine ..
Brendan Long
2
Por cierto, Windows tiene subsistemas WIN32 / WIN64 que implementan mucho de lo mismo para 'Windows Look and Feel, también conocido como WIN32', entre otras cosas. Estos subsistemas funcionan por encima del núcleo NT. Las API para estos son diferentes. Por ejemplo, C: es una abstracción WIN32, no una cosa del núcleo NT. Lo mismo para algunas de las funciones de ventanas. Windows también tenía subsistemas Unix que están disponibles (que admiten X11 hasta cierto punto).
Saludo Sangha

Respuestas:

603

En Linux, la interfaz gráfica de usuario no forma parte del sistema operativo. La interfaz gráfica de usuario que se encuentra en la mayoría de los escritorios de Linux es proporcionada por un software llamado X Window System , que define una forma independiente del dispositivo de manejar pantallas, teclados y dispositivos de puntero.

X Window define un protocolo de red para la comunicación, y cualquier programa que sepa cómo "hablar" este protocolo puede usarlo. Hay una biblioteca C llamado Xlib que hace que sea más fácil de usar este protocolo, por lo Xlib es una especie de la API de interfaz gráfica de usuario nativa. Xlib no es la única forma de acceder a un servidor X Window; También hay XCB .

Las bibliotecas de herramientas como GTK + (utilizada por GNOME ) y Qt (utilizada por KDE ), creadas sobre Xlib, se utilizan porque son más fáciles de programar. Por ejemplo, le brindan una apariencia consistente en todas las aplicaciones, facilitan el uso de arrastrar y soltar, proporcionan componentes estándar para un entorno de escritorio moderno, etc.

La forma en que X dibuja en la pantalla internamente depende de la implementación. X.org tiene una parte independiente del dispositivo y una parte dependiente del dispositivo. El primero gestiona los recursos de la pantalla, como Windows, mientras que el segundo se comunica con el controlador de la tarjeta gráfica, generalmente un módulo del núcleo. La comunicación puede ocurrir a través del acceso directo a la memoria o mediante llamadas del sistema al núcleo. El controlador traduce los comandos a una forma que el hardware de la tarjeta comprende.

A partir de 2013, un nuevo sistema de ventanas llamado Wayland está comenzando a ser utilizable, y muchas distribuciones han dicho que en algún momento migrarán a él, aunque todavía no hay un calendario claro. Este sistema se basa en la API OpenGL / ES, lo que significa que en el futuro OpenGL será la "API GUI nativa" en Linux. Se está trabajando para portar GTK + y QT a Wayland, de modo que las aplicaciones populares actuales y los sistemas de escritorio necesitarían cambios mínimos. Las aplicaciones que no se pueden portar serán compatibles a través de un servidor X11, al igual que OS X admite aplicaciones X11 a través de Xquartz. Se espera que el puerto GTK + esté terminado dentro de un año , mientras que Qt 5 ya tiene soporte completo de Wayland.

Para complicar aún más las cosas, Ubuntu ha anunciado que están desarrollando un nuevo sistema llamado Mir debido a los problemas que perciben con Wayland. Este sistema de ventanas también se basa en la API OpenGL / ES.

Joni
fuente
95
+1. ¿Desde cuándo un sistema operativo tiene que tener una GUI, lo que implica que si no es un sistema operativo? Disparates.
David Hammen
42
Incluso Windows era originalmente solo un programa que se ejecutaba sobre DOS.
dan04
2
+1 @DavidHammen No estoy seguro de si eso fue dirigido a mí o no, pero estás 100% correcto. Mi terminología no era exactamente precisa. Lo que debería haber dicho es que no es un sistema operativo completo en la forma en que comúnmente se piensa en un sistema operativo con todos los componentes adicionales que lo hacen fácil de usar, sino más bien un conglomerado de componentes de diferentes proveedores, etc.
Chris Thompson
3
@ChrisThompson - hmm ... tal vez soy demasiado viejo pero nunca pensé en una GUI como parte central de un sistema operativo. Y nunca pensé en un sistema operativo sin una GUI como simplemente "un conglomerado de componentes de diferentes proveedores, etc." Pero bueno, tal vez las cosas han avanzado desde que formé mi opinión sobre lo que constituía un SO :)
George Hawkins
2
A menos que una respuesta sea una wiki comunitaria, no cambiaré ningún contenido, aparte de mejorar la gramática / formateo o agregar enlaces. Si el contenido necesita ser corregido o actualizado, es responsabilidad de la persona cuya reputación está vinculada al contenido. Sin embargo, les haré el favor de comentar, para que se den cuenta de que creo que algo debe corregirse o actualizarse.
Abe honesto el
84

Linux es un kernel, no un sistema operativo completo. Existen diferentes sistemas de ventanas y gui que se ejecutan sobre Linux para proporcionar ventanas. Por lo general, X11 es el sistema de ventanas utilizado por las distribuciones de Linux.

Chris Thompson
fuente
66
Están construidos encima de él. X11 es el servidor, mientras que KDE, Gnome, etc. son administradores de escritorio, que proporcionan API de nivel superior, diseños de ventanas comunes, etc.
Marque el
77
X11 es la capa real de bajo nivel que maneja todo esto y maneja el dibujo a la pantalla, etc. (y se comunica con los controladores de gráficos). Gnome / KDE luego controla X11. Eso es todo a un alto nivel e ignorando mil millones de detalles.
slugonamission
3
Gracias. Una pregunta más: Wikipedia explica que X11 "crea una capa de abstracción de hardware donde el software está escrito para usar un conjunto general de comandos, lo que permite la independencia del dispositivo y la reutilización de programas en cualquier computadora que implemente X". mi pregunta es: ¿por qué X11 proporciona interacción de hardware (HAL)? ¿Debería proporcionar eso el kernel de Linux y X11 debe funcionar encima del kernel? En otras palabras, ¿por qué X11 llega a los dispositivos de hardware cuando el Kernel debería ser su proxy?
anfibio
1
Creo que en este caso HALes un término utilizado incorrectamente. Realmente lo que dicen es que X11 proporciona un medio independiente del sistema para mostrar ventanas. Hay versiones de X11 para Darwin (Mac OS, que en realidad es más complicado ahora con Mountain Lion ...), MS Windows y Linux.
Chris Thompson, el
44
X11 es un protocolo de red. La abstracción implica escribir programas en la plataforma A que pueden mostrar clientes X11 (ventanas, aplicaciones, etc.) en la plataforma B sobre algunos equipos de red. Su aplicación puede ejecutarse localmente, remotamente, en un servidor anidado, en un servidor virtual que solo hace VNC, etc. La abstracción de hardware (en la plataforma local) es un efecto secundario de esta función, pero también desdibuja la línea entre X11 y el núcleo (que es lo que hace la abstracción de hardware en un sistema Unix promedio).
Alexios
59

También vale la pena mencionar a Wayland, ya que se lo conoce principalmente como un "futuro asesino X11".

También tenga en cuenta que Android y algunos otros sistemas operativos móviles no incluyen X11, aunque tienen un kernel de Linux, por lo que X11 no es nativo de todos los sistemas Linux.

Ser multiplataforma no tiene nada que ver con ser nativo. Cocoa también se ha portado a otras plataformas a través de GNUStep, pero aún es nativo de OS X / macOS.

ninguna
fuente
2
El diagrama de arquitectura de alto nivel para Wayland es el mismo que el de X, excepto que el "Compositor" y el "Servidor" en el diagrama X se fusionan en el diagrama de Wayland. Lo que falta es una explicación plausible de por qué esta integración no se pudo trabajar en X.
Kaz
1
bueno, diría que no es fácil cambiar el diseño fundamental de una base de código de más de 20 años. También tenga en cuenta que otro problema con X11 es que la mayor parte de su funcionalidad, como la representación de fuentes, no se usa hoy en día. Además, X11 seguirá siendo necesario en servidores y supercomputadoras, la transparencia de la red es demasiado buena para renunciar a ella.
ninguno
3
@gokcehan wayland no omite la transparencia de la red, es un mito. No está implementado todavía , al igual que muchas otras cosas en Wayland. wayland.freedesktop.org/faq.html#heading_toc_j_8 blog.martin-graesslin.com/blog/2011/08/… etc.
whitequark
8
+! por mencionar la falta de Android de X11. Android es probablemente el contraejemplo más convincente al argumento de que "x11 es la GUI nativa de Linux". Demostrar que Linux puede tener x11 o Android ya que es una GUI "nativa" muestra a los principiantes que Linux es realmente solo un núcleo y no siempre tiene GUI.
Trevor Boyd Smith
"Ser multiplataforma no tiene nada que ver con ser nativo" es un punto excelente. He usado ese patrón con mucha frecuencia durante mis años de portabilidad multiplataforma. En particular, en los años 90, vendí un marco que le permitía compilar código escrito en el marco Metrowerks PowerPlant usando MFC bajo el capó. (Antes de que alguien se burle, una vez que se encuentre por debajo de las macros, MFC es bastante razonable). También he tenido múltiples trabajos de portabilidad donde la API Win32 o Mac Toolbox fue la especificación contra la que compilamos, reimplementada según sea necesario en las otras plataformas .
Andy Dent
23

Estrictamente hablando, la API de Linux consiste en sus llamadas al sistema . Estas son todas las funciones del núcleo a las que puede llamar un programa en modo de usuario (sin núcleo). Esta es una interfaz de muy bajo nivel que permite a los programas hacer cosas como abrir y leer archivos. Ver http://en.wikipedia.org/wiki/System_call para una introducción general.

Un sistema Linux real también tendrá una "pila" completa de otro software que se ejecuta en él, con el fin de proporcionar una interfaz gráfica de usuario y otras características. Cada elemento de esta pila ofrecerá su propia API.

nibot
fuente
3
Esta respuesta se escribió cuando la pregunta era "¿Cuál es la API nativa de Linux?" (desde entonces, se ha insertado "GUI" en la pregunta).
nibot
Sigue siendo la respuesta correcta a lo que ahora es una pregunta incoherente porque ninguno de los sistemas que se encuentran en la parte superior de Linux, incluidos GNU y X11, son "nativos" en ningún sentido significativo.
Jim Balter
20

Para ayudar en lo que ya se ha mencionado, hay una muy buena descripción de la pila de gráficos de Linux en este blog: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/

Esto explica X11 / Wayland, etc. y cómo encaja todo. Además de lo que ya se ha mencionado, creo que vale la pena agregar un poco sobre las siguientes API que puede usar para gráficos en Linux:

Mesa : "Mesa es muchas cosas, pero una de las principales cosas por las que es más famosa es por su implementación de OpenGL. Es una implementación de código abierto de la API de OpenGL".

El Cairo : "El Cairo es una biblioteca de dibujo utilizada por aplicaciones como Firefox directamente, o mediante bibliotecas como GTK +, para dibujar formas vectoriales".

DRM (Direct Rendering Manager) : lo entiendo menos, pero son básicamente los controladores del núcleo los que le permiten escribir gráficos directamente en framebuffer sin pasar por X

Mate
fuente
habrahabr.ru/post/148954 - (en ruso) traducción de esa publicación si alguien lo necesita
Boris Burkov
9

Supongo que la pregunta es más como "¿Cuál es la API GUI nativa de Linux?".

En la mayoría de los casos, X (también conocido como X11) se utilizará para eso: http://en.wikipedia.org/wiki/X_Window_System .

Puedes encontrar la documentación de la API aquí

marca
fuente
5

XWindows es probablemente el más cercano a lo que podría llamarse 'nativo' :)

Sergey Sirotkin
fuente
3
¿Es eso lo mismo que x11?
DavidColson
1
Pero si lo usa directamente, verá que no es una API GUI ... Linux simplemente no tiene 1 API GUI nativa. Pero casi todas esas API GUI (al menos las comunes en Linux de escritorio hoy en día) se ejecutan encima de X. Si comienza a escribir una aplicación usando X antigua, se verá totalmente fuera de lugar en cualquier distribución moderna, por lo que digamos que la GUI nativa depende de la distribución: gtk / gnome para ubuntu, kde para otros.
Axel
1

Lo más parecido a Win32 en Linux sería la biblioteca, ya que no solo mencionas la interfaz de usuario, sino también los eventos y "otras cosas del sistema operativo"

Midhat
fuente
55
libc (la biblioteca estándar de C) es una interfaz para las llamadas al sistema operativo. Es lo último (llamadas del sistema operativo) en Linux lo que se traduce aproximadamente a Win32 en Windows. Realmente no se puede (¿o en absoluto?) Programar para las versiones actuales de Windows sin utilizar la API de Win32 en algún nivel, pero se puede programar para Windows y Linux sin utilizar la biblioteca C estándar del compilador respectivo, simplemente duplicando el código de llamadas al sistema. No se recomienda, y hace que su código sea completamente no compatible con otros sistemas operativos, pero es posible hacerlo.
un CVn
La interfaz de usuario no es parte de libc, siempre y cuando no pienses en printf / scanf y similares como una interfaz de usuario ... libc es solo la biblioteca estándar de C. Y tampoco es realmente una interfaz para las llamadas al sistema operativo. Proporciona funciones para E / S de archivos, gestión de memoria, procesamiento de cadenas, etc. y utiliza internamente llamadas al sistema. Para realizar llamadas al sistema como ioctlusted, tendría que incluir algo de sys/.
Axel
La pregunta no siempre especificaba "GUI".
jv110
Quizás hables de Xlibno libc.
i486
1

Las operaciones gráficas del kernel de Linux están en /include/linux/fb.h como struct fb_ops. Finalmente, esto es lo que parecen hacer referencia a complementos como X11, Wayland o DRM. Como estas operaciones son solo para tarjetas de video, no para copias impresas vectoriales o ráster o dispositivos terminales orientados a tty, su utilidad como GUI es limitada; simplemente no es del todo cierto que necesita esos complementos para obtener una salida gráfica si no le importa usar algún ensamblador para omitir syscall según sea necesario.

M. Ziegast
fuente
0

La GUI es una abstracción de alto nivel de capacidad, por lo que casi todo, desde el servidor XOrg hasta OpenGL, es portado multiplataforma, incluida la plataforma Windows. Pero si por API GUI te refieres a * nix graphics API, entonces podrías estar deambulando por "Infraestructura de renderizado directo".

Chawathe Vipul S
fuente
0

Wayland

Como puede escuchar, wayland es la opción destacada de muchas distribuciones en estos días, debido a que su protocolo es más simple que el X.

Juegos de herramientas de wayland

Los kits de herramientas o bibliotecas gui que sugiere wayland son:

  • QT 5
  • GTK +
  • LSD
  • Desorden
  • EFL
Amir Fo
fuente