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?
Respuestas:
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.
fuente
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.
fuente
HAL
es 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.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.
fuente
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.
fuente
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
fuente
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í
fuente
XWindows es probablemente el más cercano a lo que podría llamarse 'nativo' :)
fuente
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"
fuente
ioctl
usted, tendría que incluir algo desys/
.Xlib
nolibc
.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.
fuente
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".
fuente
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:
fuente
Parafraseando la pregunta original:
P. ¿Cuál es el equivalente de Linux de las interfaces de programación de aplicaciones de Microsoft y Apple?
A. La "API del kernel de Linux". https://www.kernel.org/doc/htmldocs/kernel-api
fuente