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?
Réponses:
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.
la source
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.
la source
HAL
est 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.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.
la source
À 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.
la source
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
la source
Je suppose que la question ressemble plus à "Qu'est-ce que l'API GUI native de Linux".
Dans la plupart des cas, X (alias X11) sera utilisé pour cela: http://en.wikipedia.org/wiki/X_Window_System .
Vous pouvez trouver la documentation API ici
la source
XWindows est probablement le plus proche de ce que l'on pourrait appeler «natif» :)
la source
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"
la source
ioctl
vous, vous devez inclure quelque chose desys/
.Xlib
paslibc
.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.
la source
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".
la source
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:
la source
Pour paraphraser la question d'origine:
Q. Quel est l'équivalent Linux des interfaces de programmation d'application Microsoft et Apple?
A. «L'API du noyau Linux». https://www.kernel.org/doc/htmldocs/kernel-api
la source