In the process of learning to do certain things in GUI programming (e.g., reserving space on the screen for an application), I have to learn more about the Window Manager, usually X11 on Linux (I'm not sure whether there even are distro's, which use anything else than X11, although I heard about Wayland, which is not yet implemented in any.)
I'm quite new to programming, and impatient; so I'm just diving into it. Now I am reading the ICCCM, with the hope to learn more. This document however aims at a public that knows (way) more than me. So I came across some information, and I would love to get some clarifications.
Section 2 of the ICCCM quotes:
Note that all data transferred between an owner and a requestor must usually go by means of the server in a X Version 11 environment. A client cannot assume that another client can open the same files or even communicate directly. The other client may be talking to the server by means of a completely different networking mechanism (for example, one client might be DECnet and the other TCP/IP). Thus, passing indirect references to data (such as file names, host names and port numbers, and so on) is permitted only if both clients specifically agree.
As far as I understand, X Window Manager is built on Top of X Server (thanks Wikipedia). In the quote above: it says the client can communicate with the server using DECnet or TCP/IP. So far I thought that "server" was a figure of speech, now I am doubting: is X server a server as in a "web server"? How should I understand its function/definition?
Then, there often are references to X11, Xorg, X Server and/or X Window Manager. It gets confusing: is X11 a bundle including Xorg and X Window Manager? If so, is there anything else in this X11 bundle?
X also needs mouse or keyboard or any other kind of input: is this part of X Server's functions too? Is X Window Manager strictly looking after the display only?
Finally, the quote here above also mentions client communicating or not with each other: this reminded me of D-Bus, which I've used a bit for learning purposes. With D-Bus you can also trigger window events. That gets me a bit confused as to how programs should communicate with one another: *what difference is there between programs interacting using X Server or using D-Bus? *
It's a shame this information remains somehow obscure, it makes it harder to learn, but hopefully you can bring some light on this :) Thanks.