October 19, 2002. VNC vs. Windows Terminal Services
We regularly use two pieces of software to access Windows computers remotely. Windows Terminal Services from Microsoft (now called “Remote Desktop” in Windows XP, and also marketed by Citrix) is one of them; the other is WinVNC which is an open source project that originated at AT&T in Cambridge, England.
If you have a choice in the matter, Windows Terminal Services is much, much better, for two reasons. First, it is incredibly fast, because the wire protocol is closer to the Windows GDI layer. You can remotely access a Windows computer over a modem quite comfortably, which surprised the heck out of me. By comparison, VNC's network protocol basically consists of transmitting blocks of changed pixels across the wire. So for example when a string is written to the screen, Terminal Services won't transmit much more than the string itself, letting the client find the font and do all the rendering. VNC would have to first detect that a part of the screen had changed, and then transmit a compressed bitmap across the wire. And smooth scrolling works perfectly and feels smooth when you use Terminal Sevices, even over a slow connection. VNC just messes up the screen.
Empirically, it's a lot faster and that makes all the difference in the quality of the experience.
Second big reason. VNC for some reason does not transmit Shift+Arrow keys. The shift gets lost. OK, it's a little bug, but VNC made me notice that I frequently correct typing errors with Shift+Ctrl+Left (select previous word) and then I type over it. VNC doesn't transmit this. As a result it is incredibly painful for me to type long text messages over VNC.
Third big reason. No matter how much I play with the settings, there are too many cases where VNC forgets to transmit a particular “damaged” region of the screen to the client. The two most common cases I've found are when you right-click to get a popup menu — the menu appears on the server but is not transmitted to the client so you think something is wrong — and when you scroll in an application that uses smooth scrolling, the screen gets all messed up. It reminds me of Unix, 1987 when your friends would write messages on your tty (old-school IM) and you had to hit Ctrl+L to get Emacs to clean up the screen.
The biggest disadvantage of Windows Terminal Services is that the server has to be a Windows machine. (There are all kinds of clients.) This is not a big deal for me; our Linux machines are servers and ssh is fine. If I really had to do GUI stuff with Linux servers I would just use Exceed or something, but I haven't needed that for years. [Joel on Software]