X11 is the default implementation of the graphic GUI onto unix platform. The protocol used to display application is network aware. Since 25 years all unix flavour can start a remote applications and display them onto networked display.
xterm -display hostname:0
The XDMCP protocol has started the thinclient model, where only a X server and a TCP/IP base is inclused in the thinclient, whereas all memory and CPU task are computed on the main server.
The main problem with X11 is the complexity of the implementation for the developper, and for the user experience, the non-LAN usage: there are a lot of roundtrip between the X server and the X client, making the whole unusuable on slow links (i.e. more than 50ms latency). Classical number of roundtrip for starting a classical X application is over 2000.
- Local application, latency under 0.1ms -> 1000*0.1ms makes it start in 100ms
- Remote application, latency of 40ms -> 1000*40=40000 =40s
Nowadays applications use a lot of graphics effects, requiring a composite server. this task is CPU intensive, and tries where made to extend the protocol to do it remotely, but thinclients weren't designed for that.
the VNC protocol, which came up because windows had no network capabilities for the display, is a framebuffer technology. Better on the network level, the latency doesn't influence so much on quality. but as a framebuffer techno, it displays a opened session only, and the server isn't aware of the location of the user.
NX tries to solve the problem of the X latency, by adding two proxies between the X client and the X server so it can reduce the number of roundtrip. NX has opened the X protocol on medium and large latency network, which make it usuable even on a modem connected network with roundtrip up to 500ms Up to version 3, NX was open source, based on a XFree 4 code. But the fork from XFree4to xorg was not followed by the compagny supporting the NX developement, and the version 4 won't be open sourced. The NX won't probably be updated to match further development of xorg, and will die slowly. Other actor on this technology was google which probided an NX server implementation named neatx
is the microsoft contribution to the remote access. Since 10 years, only the server was available onto windows server (NT4, 2000, and later). It's a part of the T128 ITU norm. and based on the Citrix code. The protocol is fast and is based mostly on a remote framebuffer, but the server is aware of the network part.
Since 2007 and the Antitrust action, the protocol specification are available. the RDP protocol does more than only transport the disply on another device. There is also a place for remote sound, data transport,port redirection and even a composite extention (X11 can only transport display, VNC has some chat and filetransfert capatilities)
There was a reverse engineered server for X11, named xrdp, which provided an RDP access to an X11 server but the protocol was very basic.
The FreeRDP project has implemented in 2012 an (proof-of-concept) X11 application which expose the desktop through RDP. There is still some work to do, but is very promising.
Some people want to rethink the most GUI part in linux. the networked X11 is no more adapted to the actual use of computers, and the network part is only used by a minority of users (but users starting X11 applciation through a ssh connection are common...) Wayland
This protocol has been designed by redhat to export display and devices to client, in a VDI project. the project is active and the protocol is open
This is a new proprietary protocol, developed by teradici which is implemented in vmware.
Where to go ?
IMHO, RDP will be the best way to go for providing users a remote access to a desktop. For managed workstations or VDI, PCoIP or SPICE could be the solution, but PCoIP is fully proprietary