O que é a API GUI nativa do Linux?
ouvi algumas pessoas dizerem GTK+, mas GTK+ sendo plataforma transversal, como pode ser nativo?
11 answers
No Linux a interface gráfica do utilizador não faz parte do sistema operativo. A interface gráfica de usuário encontrada na maioria dos desktops Linux é fornecida por um software chamado X Window System, que define uma forma independente de dispositivo de lidar com telas, teclados e dispositivos ponteiros.
A janela X define um protocolo de rede para a comunicação, e qualquer programa que saiba como "falar" este protocolo pode usá-lo. Existe uma biblioteca C chamada Xlib que a torna é mais fácil usar este protocolo, por isso o Xlib é uma espécie de a API da interface gráfica nativa. O Xlib não é a única forma de aceder a um servidor de janelas em X; existe também o XCB.
Bibliotecas de ferramentas como GTK+ (usadas por GNOME ) e Qt (usadas por KDE), construídas no topo do Xlib, são usadas porque são mais fáceis de programar. Por exemplo, eles dão-lhe uma aparência consistente em todas as aplicações, tornar mais fácil de usar o drag-and-drop, fornecer o padrão de componentes para um ambiente de trabalho moderno, e assim por diante.
A forma como X desenha na tela internamente depende da implementação. X.org tem uma parte independente do dispositivo e uma parte dependente do dispositivo. O primeiro gerencia recursos de tela como o windows, enquanto o segundo se comunica com o driver da placa gráfica, geralmente um módulo do kernel. A comunicação pode acontecer ao longo de acesso directo à memória ou através de chamadas do sistema para o núcleo. O controlador traduz os comandos para um forma que o hardware no cartão compreende.
A partir de 2013, um novo sistema de janelas chamado Wayland está a começar a ser utilizável, e muitas distribuições disseram que em algum momento irão migrar para ele, embora ainda não exista um calendário claro. Este sistema é baseado na API OpenGL/ES, o que significa que no futuro o OpenGL será a "API GUI nativa" no Linux. O trabalho está sendo feito para portar GTK+ e QT para Wayland, de modo que aplicações populares atuais e sistemas de desktop precisariam mudanças mínimas. As aplicações que não podem ser portadas serão suportadas através de um servidor X11, assim como o OS X suporta aplicativos X11 através do Xquartz. O porto GTK+ é esperado para terminar dentro de um ano , enquanto o Qt 5 já tem suporte completo para Wayland.
Para complicar ainda mais as coisas, o Ubuntu anunciou que estão a desenvolver um novo sistema chamado Mir por causa dos problemas que percebem com a Wayland. Este sistema de janelas também é baseado na API OpenGL/ES.
O Linux é um kernel, não um sistema operacional completo. Existem diferentes sistemas de windowing e gui que funcionam em cima do Linux para fornecer windowing. Tipicamente X11 é o sistema de janelas usado pelo Linux distros.
Wayland Também vale a pena mencionar, pois é principalmente referido como um"futuro assassino X11".
Note também que o Android e outros sistemas operacionais móveis não incluem o X11, embora tenham um kernel Linux, então nesse sentido o X11 não é nativo de todos os sistemas Linux.
Ser multi-plataforma não tem nada a ver com ser nativo. O cacau também foi portado para outras plataformas via GNUStep , mas ainda é nativo do OS X / macOS.Estritamente falando, a API do Linux consiste em suas chamadas de sistema . Estas são todas as funções do kernel que podem ser chamadas por um programa de modo de usuário (não-kernel). Esta é uma interface de nível muito baixo que permite aos Programas fazer coisas como abrir e ler arquivos. Ver http://en.wikipedia.org/wiki/System_call ([5]) para uma introdução geral.
Um sistema Linux Real também terá uma "pilha" inteira de outros softwares rodando nele, a fim de fornecer um usuário gráfico interface e outras características. Cada elemento desta pilha irá oferecer a sua própria API.
Para ajudar no que já foi mencionado, existe uma boa visão geral da pilha de gráficos Linux neste blog: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
Isto explica o X11 / Wayland etc e como tudo se encaixa. Além do que já foi mencionado, acho que vale a pena adicionar um pouco sobre as seguintes API que você pode usar para gráficos em Linux:Mim - " mim é muitas coisas, mas uma das coisas principais que fornece que é mais famoso por sua implementação OpenGL. É uma implementação de código aberto da API OpenGL."
Cairo - " cairo é uma biblioteca de desenho usada tanto por aplicações como o Firefox diretamente, ou através de bibliotecas como GTK+, para desenhar formas vetoriais."
DRM (Direct Rendering Manager) - entendo isto pelo menos, mas são basicamente os controladores de kernel que lhe permitem escrever gráficos directamente para o framebuffer sem passar pelo X
Suponho que a pergunta é mais como "o que é a API nativa do linux".
Na maioria dos casos X (também conhecido por X11) será utilizado para isso: http://en.wikipedia.org/wiki/X_Window_System.
Você pode encontrar a documentação da API aqui
XWindows é provavelmente o mais próximo do que poderia ser chamado de 'nativo':)
A coisa mais próxima do Win32 no linux seria a libc, já que você menciona não só a UI, mas eventos e"outras coisas do sistema operacional"
A GUI é uma abstração de alto nível de capacidade, por isso quase tudo, desde o servidor XOrg ao OpenGL, é portado de plataforma cruzada, incluindo para a plataforma Windows. Mas se por GUI API você quer dizer * nix graphics API então você pode estar vagando em torno de"infra-estrutura de renderização direta".
As operações gráficas do kernel linux estão em / include / linux / fb.h as struct fb_ops. Eventualmente isto é o que add-ons como X11, Wayland, ou DRM parecem referência. Como estas operações são apenas para placas de vídeo, não vetoriais ou raster hardcopy ou dispositivos terminais orientados para tty, a sua utilidade como uma interface gráfica é limitada; simplesmente não é inteiramente verdade que você precisa desses add-ons para obter saída gráfica, se você não se importa de usar algum assembler para contornar o syscall como necessário.