J'espère que cela ne semble pas être une question stupide, mais c'est toujours quelque chose que je me suis demandé. Windows (API Win32) et OS X (Cocoa) disposent de leurs propres API pour gérer les fenêtres, les événements et d’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 + étant multi-plateforme, comment peut-il être natif?
Sous Linux, l’interface utilisateur graphique ne fait pas partie du système d’exploitation. L’interface utilisateur graphique utilisée sur la plupart des bureaux Linux est fournie par un logiciel appelé le X Window System , qui définit un moyen de gérer les écrans, les claviers et les dispositifs de pointeur indépendamment du périphérique.
X Window définit un protocole réseau pour la communication, et tout programme qui sait "parler" de ce protocole peut l'utiliser. Il existe une bibliothèque C appelée Xlib qui facilite l’utilisation de ce protocole. Xlib est donc une sorte de l’API native de l’interface graphique. 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 simples programmer avec. Par exemple, ils vous donnent une apparence cohérente entre les applications, facilitent l'utilisation du glisser-déposer, fournissent des composants standard à un environnement de bureau moderne, etc.
La manière dont X dessine à 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 du noyau. La communication peut s'effectuer par accès direct à la mémoire ou par 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être appelé Wayland commence à être utilisable, et de nombreuses distributions ont annoncé qu’elles migreraient à un moment donné, bien qu’il n’existe toujours pas de calendrier clair. Ce système est basé sur l'API OpenGL/ES, ce qui signifie qu'à l'avenir, OpenGL sera "l'API d'interface graphique native" sous Linux. Des travaux sont en cours pour porter GTK + et QT sur Wayland, de sorte que les applications courantes et les systèmes de bureau courants ne nécessiteraient que peu de modifications. Les applications qui ne peuvent pas être portées seront prises en charge via un serveur X11, un peu comme OS X prend en charge les applications X11 via Xquartz. Le port GTK + devrait devrait être terminé d’ici un an , alors que Qt 5 dispose déjà du support Wayland complet.
Pour compliquer encore les choses, Ubuntu a annoncé le développement d'un nouveau système appelé Mir en raison des problèmes qu’ils perçoivent avec Wayland. Ce système de fenêtre est également basé sur l’API OpenGL/ES.
Linux est un noyau, pas un système d'exploitation complet. Il existe différents systèmes de fenêtrage et interfaces graphiques basés sur Linux pour fournir le fenêtrage. Typiquement X11 est le système de fenêtrage utilisé par les distributions Linux.
Wayland mérite également d’être mentionné, car il est généralement qualifié de "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. En ce sens, X11 n'est pas natif sur 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 plates-formes via GNUStep mais il est toujours natif sous OS X/macOS.
Strictement parlant, l’API de Linux consiste en ses appels système. Ce sont toutes les fonctions du noyau pouvant être appelées par un programme en mode utilisateur (non noyau). C'est 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 de logiciels s'exécutant sur celui-ci, afin de fournir une interface utilisateur graphique et d'autres fonctionnalités. Chaque élément de cette pile proposera sa propre API.
Pour aider à ce qui a déjà été mentionné, il existe un très bon aperçu de la pile graphique Linux sur ce blog: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
Ceci explique X11/Wayland, etc., et comment tout cela s’agence. En plus de ce qui a déjà été mentionné, je pense que cela vaut la peine d'ajouter quelques mots sur les API suivantes que vous pouvez utiliser pour les graphiques sous Linux:
Mesa - "Mesa, c'est beaucoup de choses, mais l'une des choses les plus importantes qui y sont rendues est sa mise en oeuvre OpenGL. C'est une implémentation open source de l'API OpenGL."
Cairo - "cairo est une bibliothèque de dessins utilisée soit par des applications telles que Firefox directement, soit par des bibliothèques telles que GTK +, pour dessiner des formes vectorielles."
DRM (Direct Rendering Manager) - C'est ce que je comprends le moins, mais c’est essentiellement les pilotes du noyau qui vous permettent d’écrire des graphiques directement dans le framebuffer sans passer par X
Je suppose que la question s'apparente davantage à "Qu'est-ce que l'API d'interface graphique native de Linux"?.
Dans la plupart des cas, X (ou X11) sera utilisé pour cela: http://en.wikipedia.org/wiki/X_Window_System .
Vous pouvez trouver la documentation de l'API ici
XWindows est probablement le plus proche de ce qu'on pourrait appeler «natif» :)
La chose la plus proche de Win32 sous Linux serait la libc, car vous mentionnez non seulement l'interface utilisateur, mais aussi les événements et "d'autres éléments OS".
L'interface utilisateur graphique est une abstraction de haut niveau des capacités, de sorte que presque tout, du serveur XOrg à OpenGL, est porté sur plusieurs plates-formes, y compris pour la plate-forme Windows. Mais si, par API graphique, vous entendez une API graphique * nix, alors vous pourriez vous promener dans "Infrastructure de rendu direct".
Les opérations graphiques du noyau Linux se trouvent dans /include/linux/fb.h en tant que struct fb_ops. C'est finalement ce que les add-ons tels que X11, Wayland ou DRM semblent faire référence. Étant donné que ces opérations ne concernent que les cartes vidéo, et non les périphériques terminaux vectoriels ou matriciels ou orientés au format terminal, leur utilité en tant qu'interface graphique est limitée. ce n'est tout simplement pas tout à fait vrai que vous avez besoin de ces add-ons pour obtenir une sortie graphique si vous ne craignez pas d'utiliser un assembleur pour contourner syscall si nécessaire.