487 votes

Quelle est l'API native de l'interface graphique de Linux ?

Windows (API Win32) et OS X (Cocoa) ont tous deux leurs propres API pour gérer Windows, les événements et autres éléments du système d'exploitation. Je n'ai jamais vraiment obtenu de réponse claire quant à l'équivalent de Linux ?

J'ai entendu certaines personnes dire GTK+, mais GTK+ est multiplateforme. Comment peut-il être natif ?

49 votes

Joni a raison : "Dans Linux, l'interface graphique ne fait pas partie du système d'exploitation... Le système X Window définit un protocole réseau pour les [capacités de l'interface graphique]. Les bibliothèques de boîtes à outils telles que Gtk+ (utilisée par Gnome) et QT (utilisée par KDE), sont construites au-dessus de Xlib."

36 votes

Au contraire, David, c'est une excellente enquête.

8 votes

Je suis d'accord - j'ai lu "The Linux Programming API" et "Systems Programming.... Unix" qui sont les deux bibles sur le noyau et l'API, et cette question ne m'a jamais effleuré :) Les réponses sont intéressantes.

647voto

Joni Points 46728

Dans Linux, l'interface utilisateur graphique ne fait pas partie du système d'exploitation. L'interface utilisateur graphique que l'on retrouve sur la plupart des ordinateurs de bureau Linux est fournie par un logiciel appelé le Système X Window qui définit une manière indépendante du périphérique de traiter les écrans, les claviers et les pointeurs.

X Window définit un protocole réseau pour la communication, et tout programme qui sait "parler" ce protocole peut l'utiliser. Il existe une bibliothèque C appelée Xlib qui rend plus facile l'utilisation de ce protocole, donc Xlib est une sorte de le site API GUI native. Xlib n'est pas le seul moyen d'accéder à un serveur X Window. XCB .

Les bibliothèques de la boîte à outils telles que GTK+ (utilisé par GNOME ) et Qt (utilisé par KDE ), construits au-dessus de Xlib, sont utilisés car ils sont plus faciles à programmer. Par exemple, ils permettent d'obtenir un aspect et une convivialité cohérents d'une application à l'autre, facilitent l'utilisation du glisser-déposer, fournissent des composants standard pour un environnement de bureau moderne, etc.

La façon dont X dessine à l'écran en interne dépend de l'implémentation. X.org a une partie indépendante du dispositif et une partie dépendante du dispositif. La première gère les ressources de l'écran, comme Windows, tandis que la seconde communique avec le pilote de la carte graphique, généralement un module du noyau. La communication peut se faire par accès direct à la mémoire ou par appels de système au noyau. Le pilote traduit les commandes sous une forme que le matériel de la carte comprend.

Depuis 2013, un nouveau système de fenêtre appelé Wayland commence à devenir utilisable, et de nombreuses distributions ont déclaré qu'elles migreraient vers elle à un moment donné, bien qu'il n'y ait toujours pas de calendrier précis. Ce système est basé sur l'API OpenGL/ES, ce qui signifie qu'à l'avenir, OpenGL sera l'"API GUI native" de Linux. Des travaux sont en cours pour porter GTK+ et QT sur Wayland, de sorte que les applications populaires actuelles et les systèmes de bureau ne nécessitent que des modifications minimales. Les applications qui ne peuvent pas être portées seront prises en charge par un serveur X11, tout comme OS X prend en charge les applications X11 par Xquartz. Le portage de GTK+ est devrait être terminé dans un délai d'un an alors que Qt 5 a déjà un support complet de Wayland.

Pour compliquer encore les choses, Ubuntu a annoncé qu'ils développent un nouveau système appelé Mir à cause des problèmes qu'ils perçoivent avec Wayland. Ce système de fenêtre est également basé sur l'API OpenGL/ES.

53 votes

Même Windows n'était à l'origine qu'un programme fonctionnant au-dessus de DOS.

3 votes

+1 @DavidHammen Je ne sais pas si cela m'était destiné ou non, mais vous avez tout à fait raison. Ma terminologie n'était pas tout à fait exacte. Ce que je devrait J'ai dit qu'il ne s'agissait pas d'un système d'exploitation complet au sens où on l'entend habituellement, avec tous les composants supplémentaires qui le rendent facile à utiliser, mais plutôt d'un conglomérat de composants provenant de différents fournisseurs, etc.

3 votes

@ChrisThompson - hmm... peut-être suis-je trop vieux, mais je n'ai jamais considéré l'interface graphique comme une partie essentielle d'un système d'exploitation. Et je n'ai jamais pensé qu'un système d'exploitation sans interface graphique était simplement "un conglomérat de composants provenant de différents fournisseurs, etc". Mais peut-être que les choses ont évolué depuis que j'ai formé mon opinion sur ce qui constitue un OS :)

91voto

Chris Thompson Points 18375

Linux est un noyau, pas un système d'exploitation complet. Il existe différents systèmes de fenêtrage et des interfaces graphiques qui fonctionnent au-dessus de Linux pour fournir un fenêtrage. Généralement, X11 est le système de fenêtrage utilisé par les distros Linux.

0 votes

Question : quelle est la relation entre les environnements graphiques KDE Plasma et GNOME et X11 ? Sont-ils au même niveau, c'est-à-dire des alternatives ou sont-ils construits au-dessus de X11 ? merci

8 votes

Ils sont construits par-dessus. X11 est le serveur, tandis que KDE, Gnome, etc. sont des gestionnaires de bureau, fournissant des API de plus haut niveau, des dispositions de fenêtres communes, etc.

8 votes

X11 est la couche de bas niveau qui gère tous ces éléments et qui gère l'affichage à l'écran, etc. Gnome/KDE contrôle ensuite X11. C'est à peu près tout à un haut niveau et en ignorant un milliard et un détail.

63voto

gokcehan Points 4210

Wayland mérite également d'être mentionné car il est souvent considéré comme un "futur tueur de X11".

Notez également qu'Android et certains autres systèmes d'exploitation mobiles n'incluent pas X11 bien qu'ils aient un noyau Linux, donc en ce sens X11 n'est pas natif de tous les systèmes Linux.

Le fait d'être multiplateforme n'a rien à voir avec le fait d'être natif. Cocoa a également été porté sur d'autres plateformes par l'intermédiaire de GNUStep mais il est toujours natif de OS X / macOS.

2 votes

Le diagramme d'architecture de haut niveau pour Wayland est le même que celui de X, sauf que le "Compositeur" et le "Serveur" du diagramme de X sont fusionnés dans le diagramme de Wayland. Ce qui manque, c'est une explication plausible de la raison pour laquelle cette intégration n'a pas pu être réalisée dans X.

1 votes

Eh bien, je dirais qu'il n'est pas facile de changer la conception fondamentale d'une base de code vieille de plus de 20 ans. Notez également qu'un autre problème avec X11 est que la plupart de ses fonctionnalités, comme le rendu des polices, ne sont pas utilisées aujourd'hui. De plus, X11 sera toujours nécessaire dans les serveurs et les superordinateurs, la transparence du réseau est tout simplement trop bonne pour être abandonnée.

4 votes

@gokcehan wayland n'omet pas la transparence du réseau, c'est un mythe. Elle n'est pas implémentée mais comme beaucoup d'autres choses à Wayland. wayland.freedesktop.org/faq.html#heading_toc_j_8 blog.martin-graesslin.com/blog/2011/08/ etc.

26voto

nibot Points 5057

Strictement parlant, l'API de Linux se compose de ses appels de système . Ce sont toutes les fonctions du noyau qui peuvent être appelées par un programme en mode utilisateur (non noyau). Il s'agit d'une interface de très bas niveau qui permet aux programmes de faire des choses comme ouvrir et lire des fichiers. Voir http://en.wikipedia.org/wiki/System_call pour une introduction générale.

Un vrai système Linux aura également une "pile" entière d'autres logiciels fonctionnant sur lui, afin de fournir une interface utilisateur graphique et d'autres fonctionnalités. Chaque élément de cette pile offrira sa propre API.

5 votes

Cette réponse a été écrite lorsque la question était "Quelle est l'API native de Linux ?". (depuis lors, "GUI" a été inséré dans la question).

1 votes

C'est toujours la bonne réponse à ce qui est maintenant une question incohérente parce qu'aucun des systèmes qui se situent au-dessus de Linux, y compris GNU et X11, n'est "natif" dans aucun sens significatif.

21voto

Matt Points 161

Pour aider ce qui a déjà été mentionné, il y a une très bonne vue d'ensemble de la pile graphique Linux sur ce blog : http://blog.mecheye.net/2012/06/the-linux-graphics-stack/

Cela explique X11/Wayland etc. et comment tout cela s'imbrique. En plus de ce qui a déjà été mentionné, je pense que cela vaut la peine d'ajouter quelques informations sur les API suivantes que vous pouvez utiliser pour les graphiques sous Linux :

Mesa - "Mesa est beaucoup de choses, mais l'une des principales choses qu'il fournit et pour laquelle il est le plus célèbre est son implémentation d'OpenGL. Il s'agit d'une implémentation open-source de l'API OpenGL."

Le Caire - "cairo est une bibliothèque de dessin utilisée soit par des applications comme Firefox directement, soit par l'intermédiaire de bibliothèques comme GTK+, pour dessiner des formes vectorielles."

DRM (Direct Rendering Manager) - C'est ce que je comprends le moins, mais il s'agit en fait des pilotes du noyau qui vous permettent d'écrire des graphiques directement dans le framebuffer sans passer par X.

0 votes

habrahabr.ru/post/148954 - traduction (en russe) de ce message si quelqu'un en a besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X