O que é a API GUI nativa do Linux?

441

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?

DavidColson
fonte
46
Joni está correto: "No Linux, a interface gráfica do usuário não faz parte do sistema operacional ... O X Window System define um protocolo de rede para [recursos da GUI]. Bibliotecas de kits de ferramentas como Gtk + (usado pelo Gnome) e QT (usado pelo KDE), construído sobre o Xlib. "
precisa
33
pelo contrário, David, esta é uma excelente pergunta
amphibient
7
Eu concordo - eu li "A API de programação do Linux" e "Sistemas de programação ... Unix", que são as duas Bíblias no kernel e na API, e essa pergunta nunca me ocorreu :) As respostas são interessantes.
John Humphreys - w00te
10
A API Win32 também é multi-plataforma, se você incluir Wine ..
Brendan Longo
2
O Windows possui subsistemas WIN32 / WIN64 que implementam praticamente o mesmo para o 'Windows Look and Feel - aka WIN32', entre outras coisas. Esses subsistemas operam acima do kernel do NT. As APIs para esses são diferentes. Por exemplo, C: é uma abstração do WIN32, não uma coisa do kernel do NT. O mesmo para algumas das funcionalidades de janelas. O Windows também tinha subsistemas Unix disponíveis (que suportam o X11 até certo ponto).
Preet Sangha

Respostas:

603

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.

Joni
fonte
95
+1. Desde quando um sistema operacional precisa ter uma GUI, o que implica que, caso contrário, não é um sistema operacional? Absurdo.
David Hammen
42
Até o Windows era originalmente apenas um programa executado em cima do DOS.
dan04
2
+1 @DavidHammen Não tenho certeza se isso foi direcionado para mim ou não, mas você está 100% correto. Minha terminologia não era exatamente exata. O que eu deveria ter dito foi que não é um sistema operacional completo da maneira que você normalmente pensa em um sistema operacional com todos os componentes adicionais que facilitam o uso, mas sim um conglomerado de componentes de diferentes fornecedores etc.
Chris Thompson
3
@ ChrisThompson - hmm ... talvez eu esteja velho demais, mas nunca pensei em uma GUI como parte essencial de um sistema operacional. E nunca pensei que um sistema operacional sem uma GUI fosse simplesmente "um conglomerado de componentes de diferentes fornecedores etc." Mas hey, talvez as coisas mudaram desde que eu formei minha opinião sobre o que constitui um sistema operacional :)
George Hawkins
2
A menos que uma resposta seja um wiki da comunidade, não mudarei nenhum conteúdo, além de melhorar a gramática / formatação ou adicionar links. Se o conteúdo precisar ser corrigido ou atualizado, é de responsabilidade da pessoa cuja reputação está vinculada ao conteúdo. No entanto, farei a eles o favor de comentar, para que eles tomem consciência de que acho que algo precisa ser corrigido ou atualizado.
Honest Abe
84

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.

Chris Thompson
fonte
6
Eles são construídos em cima disso. X11 é o servidor, enquanto o KDE, Gnome, etc, são os gestores de desktop, proporcionando APIs de nível superior, janela comum layouts etc.
Mark
7
O X11 é a camada de baixo nível real que lida com tudo isso e lida com o desenho na tela etc. (e se comunica com os drivers gráficos). O Gnome / KDE controla o X11. É sobre isso em um nível alto e ignorando um bilhão e um detalhe.
slugonamission
3
obrigado. mais uma pergunta: a wikipedia explica que o X11 "cria uma camada de abstração de hardware onde o software é escrito para usar um conjunto generalizado de comandos, permitindo independência do dispositivo e reutilização de programas em qualquer computador que implemente o X". minha pergunta é: por que o X11 fornece interação de hardware (HAL), o Linux Kernel deve fornecer isso e o X11 opera sobre o Kernel? Em outras palavras, por que o X11 está alcançando dispositivos de hardware quando o Kernel deve ser seu proxy?
amphibient
1
Eu acho que , neste caso, 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.
22412 Chris Thompson
4
X11 é um protocolo de rede. A abstração envolve escrever programas na plataforma A que podem exibir clientes X11 (janelas, aplicativos etc.) na plataforma B em alguns equipamentos de rede. Seu aplicativo pode ser executado localmente, remotamente, em um servidor aninhado, em um servidor virtual que apenas executa VNC etc. A abstração de hardware (na plataforma local) é um efeito colateral desse recurso, mas também atrapalha a linha entre X11 e o kernel (que é o que faz a abstração de hardware em um sistema Unix comum).
Alex4 #
59

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.

Nenhum
fonte
2
O diagrama da arquitetura de alto nível para Wayland é o mesmo do X, exceto que o "Compositor" e o "Server" no diagrama X são mesclados no diagrama de Wayland. O que falta é uma explicação plausível por que essa integração não pode ser trabalhado em X.
Kaz
1
bem, eu diria que não é fácil mudar o design fundamental de uma base de código de mais de 20 anos. Observe também que outro problema com o X11 é que a maioria de suas funcionalidades, como a renderização de fontes, não está sendo usada hoje. Além disso, o X11 ainda será necessário em servidores e supercomputadores, a transparência da rede é boa demais para ser abandonada.
nenhum
3
@gokcehan wayland não omite a transparência da rede, é um mito. Ainda não foi implementado , assim como muitas outras coisas em Wayland. wayland.freedesktop.org/faq.html#heading_toc_j_8 blog.martin-graesslin.com/blog/2011/08/... etc.
whitequark
8
+! por mencionar a falta de X11 no Android. O Android é provavelmente o contra-exemplo mais convincente do argumento de que "x11 é a GUI nativa do Linux". Demonstrar que o Linux pode ter x11 ou Android, pois é uma GUI "nativa" mostra aos iniciantes que o Linux é realmente apenas um kernel e nem sempre tem uma GUI.
Trevor Boyd Smith
"Ser multiplataforma não tem nada a ver com ser nativo" é um ponto excelente. Eu usei esse padrão com muita frequência ao longo dos meus anos de portabilidade entre plataformas. Mais notavelmente, nos anos 90, vendi uma estrutura que permite a compilação cruzada de códigos gravados na estrutura do Metrowerks PowerPlant usando o MFC sob o capô. (Antes que alguém zombe, depois que você fica abaixo das macros, o MFC é bastante razoável.) Também tive vários trabalhos de portabilidade em que a API do Win32 ou do Mac Toolbox era a especificação com a qual compilamos, reimplementada conforme necessário nas outras plataformas .
Andy Dent
23

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.

nibot
fonte
3
Esta resposta foi escrita quando a pergunta foi "O que é a API nativa do linux?" (desde então, "GUI" foi inserido na pergunta).
Nibot 04/10/12
É ainda a resposta certa para o que é agora uma pergunta incoerente porque nenhum dos sistemas que se sentar em cima do Linux, incluindo GNU e X11, são "nativos" em qualquer sentido.
Jim Balter
20

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

Matt
fonte
habrahabr.ru/post/148954 - (em russo) tradução desse post, se alguém precisar #
Boris Burkov
9

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

Marca
fonte
5

O XWindows é provavelmente o mais próximo do que poderia ser chamado de 'nativo' :)

Sergey Sirotkin
fonte
3
é a mesma coisa que x11?
DavidColson 03/10/2012
1
Mas se você usá-lo diretamente, verá que não é uma API de GUI ... O Linux simplesmente não possui uma API de GUI nativa. Mas quase todas essas APIs da GUI (pelo menos aquelas comuns no Linux para desktop hoje) são executadas sobre o X. Se você começar a escrever um aplicativo usando o X antigo simples hoje, ele parecerá totalmente fora de lugar em qualquer distribuição moderna, então eu diz que a GUI nativa depende da distribuição - gtk / gnome para ubuntu, kde para outros.
Axel
1

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"

Midhat
fonte
5
libc (a biblioteca padrão C) é uma interface para as chamadas do sistema OS. É o último (chamadas do sistema operacional) no Linux que se traduz aproximadamente no Win32 no Windows. Você não pode realmente (ou não?) Programar para versões atuais do Windows sem, em algum nível, usar a API Win32, mas pode programar para Windows e Linux sem usar a biblioteca C padrão do respectivo compilador, simplesmente duplicando o diretório código para syscalls. Não é recomendado e torna seu código completamente não portável para outros sistemas operacionais, mas é possível.
um CVn
A interface do usuário não faz parte da libc - desde que você não pense em printf / scanf e similares como uma interface de usuário ... libc é apenas a biblioteca padrão C. E também não é realmente uma interface para o sistema operacional. Ele fornece funções para E / S de arquivos, gerenciamento de memória, processamento de strings etc. e usa internamente chamadas do sistema. Para fazer chamadas do sistema como ioctlvocê, você precisará incluir algo sys/.
Axel
A pergunta nem sempre especifica "GUI".
Jv110
Talvez você fale sobre Xlibnão libc.
i486
1

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.

M. Ziegast
fonte
0

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".

Chawathe Vipul S
fonte
0

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:

  • QT 5
  • GTK +
  • LSD
  • Desordem
  • EFL
Amir Fo
fonte
0

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

user11545776
fonte