Qu'est-ce que l'API GUI native de Linux?


441

J'espère que cela ne se présente pas comme une question stupide, mais c'est toujours quelque chose que je me suis demandé. Windows (API Win32) et OS X (Cocoa) ont leurs propres API pour gérer les fenêtres, 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 des gens dire GTK +, mais GTK + étant multi-plateforme, comment peut-il être natif?


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

33
au contraire, David, c'est une excellente enquête
amphibient

7
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'est jamais venue à l'esprit :) Les réponses sont intéressantes.
John Humphreys - w00te

10
L'API Win32 est également multiplateforme si vous incluez Wine ..
Brendan Long

2
BTW Windows a des sous-systèmes WIN32 / WIN64 qui implémentent beaucoup de la même chose pour le 'Windows Look and Feel - alias WIN32' entre autres. Ces sous-systèmes fonctionnent au-dessus du noyau NT. Les API pour ceux-ci sont différents. Par exemple C: est une abstraction WIN32, pas une chose noyau NT. Idem pour certaines fonctionnalités de fenêtrage. Windows avait également des sous-systèmes Unix disponibles (qui prennent en charge X11 dans une certaine mesure).
Preet Sangha

Réponses:


603

Sous Linux, l'interface utilisateur graphique ne fait pas partie du système d'exploitation. L'interface utilisateur graphique présente 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 de l'appareil de gérer les écrans, les claviers et les appareils pointeurs.

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

Les bibliothèques de boîtes à outils telles que GTK + (utilisées par GNOME ) et Qt (utilisées par KDE ), construites sur Xlib, sont utilisées car elles sont plus faciles à programmer. Par exemple, ils vous donnent une apparence cohérente dans toutes les applications, facilitent l'utilisation du glisser-déposer, fournissent des composants standard à un environnement de bureau moderne, etc.

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

À partir de 2013, un nouveau système de fenêtres appelé Wayland commence à devenir utilisable, et de nombreuses distributions ont déclaré qu'elles y migreraient à un moment donné, bien qu'il n'y ait toujours pas de calendrier clair. Ce système est basé sur OpenGL / ES API, ce qui signifie qu'à l'avenir OpenGL sera "l'API GUI native" sous Linux. Des travaux sont en cours pour porter GTK + et QT vers Wayland, de sorte que les applications et les systèmes de bureau courants n'auraient besoin que de modifications minimes. Les applications qui ne peuvent pas être portées seront prises en charge via un serveur X11, tout comme OS X prend en charge les applications X11 via Xquartz. Le port GTK + devrait être terminé d'ici un an , tandis que Qt 5 dispose déjà d'une prise en charge complète de Wayland.

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


95
+1. Depuis quand un système d'exploitation doit-il avoir une interface graphique, ce qui implique que si ce n'est pas le cas, ce n'est pas un système d'exploitation? Absurdité.
David Hammen

42
Même Windows n'était à l'origine qu'un programme fonctionnant sous DOS.
dan04

2
+1 @DavidHammen Je ne sais pas si cela s'adressait à moi ou pas, mais vous avez 100% raison. Ma terminologie n'était pas exactement exacte. Ce que j'aurais dû dire, c'est que ce n'est pas un système d'exploitation complet comme on pourrait généralement penser à un système d'exploitation avec tous les composants supplémentaires qui le rendent facile à utiliser, mais plutôt un conglomérat de composants de différents fournisseurs, etc.
Chris Thompson

3
@ChrisThompson - hmm ... peut-être que je suis trop vieux mais je n'ai jamais pensé à une interface graphique comme une partie centrale d'un système d'exploitation. Et je n'ai jamais pensé à un système d'exploitation sans interface graphique comme étant simplement "un conglomérat de composants provenant de différents fournisseurs, etc." Mais bon peut-être que les choses ont évolué depuis que je me suis fait une opinion sur ce qui constituait un système d'exploitation :)
George Hawkins

2
À moins qu'une réponse ne soit un wiki communautaire, je ne changerai aucun contenu, à part améliorer la grammaire / le formatage ou ajouter des liens. Si le contenu doit être corrigé ou mis à jour, c'est la responsabilité de la personne dont la réputation est liée au contenu. Je leur ferai cependant la faveur de commenter, afin qu'ils prennent conscience que je pense que quelque chose doit être corrigé ou mis à jour.
Honest Abe

84

Linux est un noyau, pas un système d'exploitation complet. Il existe différents systèmes de fenêtrage et gui qui fonctionnent sur Linux pour fournir le fenêtrage. Généralement, X11 est le système de fenêtrage utilisé par les distributions Linux.


6
Ils sont construits 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être communes, etc.
Mark

7
X11 est la couche de bas niveau réelle qui gère tout cela et gère le dessin à l'écran, etc. (et communique avec les pilotes graphiques). Gnome / KDE contrôle alors X11. C'est à ce sujet à un niveau élevé et en ignorant un milliard et un détail.
slugonamission

3
Merci. une autre question: wikipedia explique que X11 "crée une couche d'abstraction matérielle où le logiciel est écrit pour utiliser un ensemble généralisé de commandes, permettant l'indépendance de l'appareil et la réutilisation des programmes sur n'importe quel ordinateur qui implémente X." ma question est: pourquoi X11 fournit-il une interaction matérielle (HAL), le noyau Linux devrait-il fournir cela et X11 fonctionner par-dessus le noyau? En d'autres termes, pourquoi X11 atteint-il les périphériques matériels alors que le noyau devrait être son proxy?
amphibie du

1
Je pense que dans ce cas HALest un terme mal utilisé. Ce qu'ils disent vraiment, c'est que X11 fournit un moyen indépendant du système pour afficher les fenêtres. Il existe des versions de X11 pour Darwin (Mac OS - c'est en fait plus compliqué maintenant avec Mountain Lion ...), MS Windows et Linux.
Chris Thompson

4
X11 est un protocole réseau. L'abstraction consiste à écrire des programmes sur la plate-forme A qui peuvent afficher des clients X11 (fenêtres, applications, etc.) sur la plate-forme B sur certains équipements réseau. Votre application peut s'exécuter localement, à distance, sur un serveur imbriqué, sur un serveur virtuel qui ne fait que du VNC, etc. L'abstraction matérielle (sur la plate-forme locale) est un effet secondaire de cette fonctionnalité, mais elle brouille également la ligne entre X11 et le noyau (qui fait l'abstraction matérielle sur un système Unix moyen).
Alexios

59

Wayland mérite également d'être mentionné car il est généralement désigné comme un "futur tueur X11".

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

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


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

1
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 telles que 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.
aucun

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

8
+! pour avoir mentionné le manque d'Android de X11. Android est probablement le contre-exemple le plus convaincant de l'argument selon lequel "x11 est l'interface graphique native de Linux". Démontrer que Linux peut avoir x11 ou Android car c'est une GUI "native" montre aux débutants que Linux n'est vraiment qu'un noyau et n'a pas toujours de GUI.
Trevor Boyd Smith

"Etre multiplateforme n'a rien à voir avec le fait d'être natif" est un excellent point. J'ai utilisé ce modèle très fréquemment au cours de mes années de portage multiplateforme. Plus particulièrement, dans les années 90, j'ai vendu un framework qui vous permettait de compiler de manière croisée du code écrit dans le framework Metrowerks PowerPlant en utilisant MFC sous le capot. (Avant que quelqu'un ne se moque, une fois que vous êtes en dessous des macros, MFC est tout à fait raisonnable.) J'ai également eu plusieurs tâches de portage où l'API Win32 ou Mac Toolbox était la spécification par rapport à laquelle nous avons compilé, réimplémentée si nécessaire sur les autres plates-formes .
Andy Dent

23

À proprement parler, l'API de Linux se compose de ses appels 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 qui s'exécutent dessus, afin de fournir une interface utilisateur graphique et d'autres fonctionnalités. Chaque élément de cette pile offrira sa propre API.


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

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

20

Pour aider à ce qui a déjà été mentionné, il y a un très bon aperçu 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'emboîte. En plus de ce qui a déjà été mentionné, je pense qu'il vaut la peine d'ajouter un peu 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 pour lesquelles il est le plus célèbre est son implémentation OpenGL. C'est une implémentation open-source de l'API OpenGL."

Le Caire - "le Caire est une bibliothèque de dessins utilisée soit par des applications comme Firefox directement, soit par le biais de bibliothèques comme GTK +, pour dessiner des formes vectorielles."

DRM (Direct Rendering Manager) - Je comprends le moins mais c'est essentiellement les pilotes du noyau qui vous permettent d'écrire des graphiques directement dans framebuffer sans passer par X


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


5

XWindows est probablement le plus proche de ce que l'on pourrait appeler «natif» :)


3
est-ce la même chose que x11?
DavidColson

1
Mais si vous l'utilisez directement, vous verrez que ce n'est pas tout à fait une API GUI ... Linux n'a tout simplement pas 1 API GUI native. Mais presque toutes ces API GUI (au moins celles courantes sur Linux de bureau aujourd'hui) s'exécutent au-dessus de X. Si vous commencez à écrire une application en utilisant du vieux X ordinaire aujourd'hui, cela semblera totalement hors de propos sur n'importe quelle distribution moderne, donc je dire que l'interface graphique native dépend de la distribution - gtk / gnome pour ubuntu, kde pour les autres.
Axel

1

La chose la plus proche de Win32 sous Linux serait la libc, car vous mentionnez non seulement l'interface utilisateur, mais les événements et "autres choses liées au système d'exploitation"


5
libc (la bibliothèque standard C) est une interface avec les appels système du système d'exploitation. C'est ce dernier (appels système OS) sous Linux qui se traduit en gros par Win32 sous Windows. Vous ne pouvez pas vraiment (ou pas du tout?) Programmer pour les versions actuelles de Windows sans à un certain niveau utiliser l'API Win32, mais vous pouvez programmer pour Windows et Linux sans utiliser la bibliothèque C standard du compilateur respectif, simplement en dupliquant le direct- code to-syscalls. Ce n'est pas recommandé, et cela rend votre code complètement non portable sur d'autres systèmes d'exploitation, mais c'est possible.
un CVn

L'interface utilisateur ne fait pas partie de libc - tant que vous ne pensez pas à printf / scanf et autres comme étant une interface utilisateur ... libc n'est que la bibliothèque standard C. Et ce n'est pas vraiment une interface avec les appels système OS non plus. Il fournit des fonctions pour les E / S de fichiers, la gestion de la mémoire, le traitement des chaînes, etc. et utilise en interne les appels système. Pour effectuer des appels système comme ioctlvous, vous devez inclure quelque chose de sys/.
Axel

La question ne spécifiait pas toujours "GUI".
jv110

Vous parlez peut-être Xlibpas libc.
i486

1

Les opérations graphiques du noyau linux se trouvent dans /include/linux/fb.h en tant que struct fb_ops. Finalement, c'est ce que les modules complémentaires comme X11, Wayland ou DRM semblent référencer. Comme ces opérations ne concernent que les cartes vidéo, et non les terminaux vectoriels ou matriciels ou les terminaux orientés tty, leur utilité en tant qu'interface graphique est limitée; ce n'est pas tout à fait vrai que vous avez besoin de ces modules complémentaires pour obtenir une sortie graphique si cela ne vous dérange pas d'utiliser un assembleur pour contourner syscall si nécessaire.


0

L'interface graphique est une abstraction de haut niveau des capacités, donc presque tout, du serveur XOrg à OpenGL, est porté sur plusieurs plates-formes, y compris pour la plate-forme Windows. Mais si par API GUI vous voulez dire API graphique * nix, vous vous promenez peut-être dans "Infrastructure de rendu direct".


0

Wayland

Comme vous pourriez l'entendre, Wayland est le choix vedette de nombreuses distributions de nos jours, car son protocole est plus simple que le X.

Trousses à outils de Wayland

Les boîtes à outils ou bibliothèques gui que wayland suggère sont:

  • QT 5
  • GTK +
  • LSD
  • Désordre
  • EFL

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.