Espero que isso não pareça uma pergunta estúpida, mas é sempre algo que me perguntei. O Windows (API do Win32) e o OS X (Cocoa) têm suas próprias APIs para lidar com janelas, eventos e outras coisas do sistema operacional. Eu nunca recebi uma resposta clara sobre qual é o equivalente do Linux.
Ouvi algumas pessoas dizerem GTK +, mas sendo GTK + multiplataforma, como pode ser nativo?
Respostas:
No Linux, a interface gráfica do usuário não faz parte do sistema operacional. A interface gráfica do usuário encontrada na maioria dos desktops Linux é fornecida por um software chamado X Window System , que define uma maneira independente de lidar com telas, teclados e dispositivos apontadores.
O X Window define um protocolo de rede para comunicação e qualquer programa que sabe "falar" esse protocolo pode usá-lo. Há uma biblioteca C chamada Xlib que o torna mais fácil de usar este protocolo, de modo Xlib é uma espécie da API GUI nativa. Xlib não é a única maneira de acessar um servidor X Window; também há XCB .
Bibliotecas de kits de ferramentas como GTK + (usado pelo GNOME ) e Qt (usado pelo KDE ), construídas sobre o Xlib, são usadas porque são mais fáceis de programar. Por exemplo, eles oferecem uma aparência consistente entre aplicativos, facilitam o uso do recurso de arrastar e soltar, fornecem componentes padrão para um ambiente de desktop moderno e assim por diante.
Como o X desenha na tela internamente depende da implementação. O X.org possui uma parte independente do dispositivo e uma parte dependente do dispositivo. O primeiro gerencia recursos de tela como o windows, enquanto o último se comunica com o driver da placa gráfica, geralmente um módulo do kernel. A comunicação pode ocorrer através do acesso direto à memória ou através de chamadas do sistema ao kernel. O driver converte os comandos em um formato que o hardware da placa entende.
A partir de 2013, um novo sistema de janelas chamado Wayland está começando a se tornar utilizável, e muitas distribuições disseram que em algum momento migrarão para ele, embora ainda não haja um cronograma claro. Este sistema é baseado na API OpenGL / ES, o que significa que no futuro o OpenGL será a "API GUI nativa" no Linux. Está sendo feito um trabalho para portar GTK + e QT para Wayland, para que os aplicativos populares atuais e os sistemas de desktop precisem de alterações mínimas. Os aplicativos que não podem ser portados serão suportados por um servidor X11, assim como o OS X suporta aplicativos X11 por meio do Xquartz. Espera- se que a porta GTK + termine dentro de um ano , enquanto o Qt 5 já possui suporte completo a Wayland.
Para complicar ainda mais, o Ubuntu anunciou que está desenvolvendo um novo sistema chamado Mir, devido a problemas que eles percebem com Wayland. Esse sistema de janelas também é baseado na API OpenGL / ES.
fonte
Linux é um kernel, não um sistema operacional completo. Existem diferentes sistemas e guias de janelas que rodam no Linux para fornecer janelas. Normalmente, o X11 é o sistema de janelas usado pelas distribuições Linux.
fonte
HAL
é um termo usado incorretamente. Na verdade, o que eles estão dizendo é que o X11 fornece um meio independente do sistema para exibir janelas. Existem versões do X11 para Darwin (Mac OS - que na verdade é mais complicado agora com o Mountain Lion ...), MS Windows e Linux.Vale mencionar também Wayland , pois é conhecido como "futuro assassino do X11".
Observe também que o Android e alguns outros sistemas operacionais móveis não incluem o X11, embora tenham um kernel Linux, portanto, nesse sentido, o X11 não é nativo em todos os sistemas Linux.
Ser multiplataforma 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.
fonte
A rigor, a API do Linux consiste em suas chamadas de sistema . Essas são todas as funções do kernel que podem ser chamadas por um programa em modo de usuário (não-kernel). Essa é uma interface de nível muito baixo que permite que programas façam coisas como abrir e ler arquivos. Veja http://en.wikipedia.org/wiki/System_call para uma introdução geral.
Um sistema Linux real também terá uma "pilha" inteira de outros softwares em execução, a fim de fornecer uma interface gráfica com o usuário e outros recursos. Cada elemento dessa pilha oferecerá sua própria API.
fonte
Para ajudar no que já foi mencionado, há uma visão geral muito boa da pilha de gráficos do Linux neste blog: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
Isso 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 APIs que você pode usar para gráficos no Linux:
Mesa - "O Mesa é muitas coisas, mas uma das principais coisas pelas quais ele é mais famoso é a implementação do OpenGL. É uma implementação de código aberto da API do OpenGL".
Cairo - "cairo é uma biblioteca de desenhos usada por aplicativos como o Firefox diretamente, ou através de bibliotecas como o GTK +, para desenhar formas vetoriais".
DRM (Direct Rendering Manager) - Entendo isso menos, mas são basicamente os drivers do kernel que permitem escrever gráficos diretamente no framebuffer sem passar pelo X
fonte
Suponho que a pergunta seja mais parecida com "O que é a API GUI nativa do linux".
Na maioria dos casos, o X (também conhecido como X11) será usado para isso: http://en.wikipedia.org/wiki/X_Window_System .
Você pode encontrar a documentação da API aqui
fonte
O XWindows é provavelmente o mais próximo do que poderia ser chamado de 'nativo' :)
fonte
A coisa mais próxima do Win32 no Linux seria a libc, pois você menciona não apenas a interface do usuário, mas eventos e "outras coisas do sistema operacional"
fonte
ioctl
você, você precisará incluir algosys/
.Xlib
nãolibc
.As operações gráficas do kernel do linux estão em /include/linux/fb.h como struct fb_ops. Eventualmente, é isso que complementos como X11, Wayland ou DRM parecem fazer referência. Como essas operações são apenas para placas de vídeo, e não para dispositivos impressos em vetor ou raster ou terminais orientados a tty, sua utilidade como GUI é limitada; simplesmente não é totalmente verdade que você precisa desses complementos para obter uma saída gráfica, se você não se importa em usar algum assembler para ignorar o syscall conforme necessário.
fonte
A GUI é uma abstração de alto nível de capacidade; portanto, quase tudo, desde o servidor XOrg até o OpenGL, é portado em várias plataformas, inclusive na plataforma Windows. Mas se por GUI API você quer dizer * nix graphics API, você pode estar andando por "Direct Rendering Infrastructure".
fonte
Wayland
Como você pode ouvir, wayland é a escolha de muitas distros hoje em dia, por causa de seu protocolo ser mais simples que o X.
Kits de ferramentas do wayland
Os kits de ferramentas ou bibliotecas de GUI sugeridas por wayland são:
fonte
Parafraseando a pergunta original:
P. Qual é o equivalente do Linux das interfaces de programação de aplicativos da Microsoft e da Apple?
A. A "API do Kernel do Linux". https://www.kernel.org/doc/htmldocs/kernel-api
fonte