Protocols
ICQ
The ICQ protocol was originally developed by Mirabilis, Inc., which was later bought by AOL. Although the protocol was never open, there have been several groups which have attempted to reverse-engineer it. Most of them are cooperating now, sharing the information they've obtained about it. Gaim is able to use ICQ thanks to icqlib, which has taken most of the information gathered and put it into a library.
ICQ is based on both UDP and TCP. The connection with the server is UDP, and messages such as who's online are sent via UDP. When you have a conversation with someone, you connect to them using TCP, and messages are sent directly. It is possible to send messages through the server in cases where direct TCP connections aren't possible. Direct TCP connections are also established for file transfers and chats.
ICQ99 was the last official ICQ client to use the UDP-based protocol. Starting with ICQ2000, the official ICQ client uses a modified version of Oscar. It is now possible (and recommended) to use Oscar to connect to the ICQ network instead of ICQ/libicq. In fact, we recommend this so strongly that we've stopped officially distributing the protocol plugin for ICQ.
IRC
IRC is one of the oldest communication systems; RFC 1459, which documents the protocol, makes reference to its initial design work starting in 1989. Depsite being standardized in an RFC, several IRC servers deviate slightly from the specification, though generally only enough to irk IRC client developers.
IRC is a TCP-based protocol, and is completely text-based. It's possible to use a standard telnet client as an IRC client if you know the protocol well enough. IRC historically has been used mainly for chat rooms, while AIM and ICQ have been primarily for one-on-one messaging; however, while AIM and ICQ both provide group chats, IRC also provides private messages. IRC was not designed with a "buddy list" concept in mind, though; people are able to change their username while they are connected to the server, which makes having a buddy list difficult. However, because IRC is used mainly for chat rooms, if you want to know if someone is available, it's usually as easy as just joining a chat room they frequent. Often users will also modify their username to indicate state - warmenhoven might change his nick (username) to warmenhoven_Asleep to indicate that he's connected but not present.
Jabber
Jabber is the coolest IM system on the planet (it says so on the Jabber.org website). Originally designed by Jeremie Miller, Jabber has grown to be the largest and most successful Open Source IM System available. The Jabber servers and source code are available for download, as are clients for nearly every OS. Gaim can act as a Jabber client thanks to libxode and libjabber, which are Open Source and provided by Jabber.
Jabber usernames are reminiscent of email addresses: a typical Jabber username would be warmenhoven@jabber.org or robflynn@jabber.com. Jabber also lets you connect using the same username multiple times, using what they term a "resource". A resource is an arbitrary string, often seen appended to your username, e.g. warmenhoven@jabber.org/Gaim (Gaim in this case being the resource), which lets the server keep track of how many times that username is signed on.
The Jabber protocol is TCP-based and XML-encoded. Because it is based in XML, it is the most extensible IM system available. Users form one TCP connection to the server in the duration of the session. Passwords can be encoded in a variety of different ways; however, currently Gaim only allows plain text (i.e. no encryption of passwords). All communication is routed through the Jabber servers. It is possible to talk to a user that is connected to a different server than you are, assuming both servers allow it.
Jabber also has what they call a "transport". A transport is a way of connecting to another IM service, such as AIM or ICQ. In order to use a transport, you "subscribe" to it, which is sort of like adding it to your buddy list, except you must also provide a valid username and password (e.g. if you were subscribing to the AIM transport, you would tell it your AIM username and the password for that account). Once you have subscribed to a transport, it will sign onto that service using the specified username, and you can talk to people using that service - their username would be ewarmenhoven@aim.jabber.org, for example. The username they would see is the one you subscribed to the transport with. Currently in Gaim, you cannot subscribe to a transport - however, if you subscribe to a transport using a different client, Gaim can make use of it.
MSN
The MSN protocol was originally published by Microsoft as an IETF draft. It has since been "embraced and extended" to the point that it had to be reverse engineered to work. Some documentation on this effort is available here.
Napster
Ahh, Napster. The music sharing network that started it all. Gaim does not support sharing files over Napster. With that out of the way, what does Gaim support? Instant messages and buddy list notification. We are not aware of anyone that actually uses this... but it does work. You can get a free Napster Server from http://opennap.sourceforge.net/. They distribute Windows binaries. I'm not sure if it compiles in Linux.
Novell
GroupWise Messenger is a cross-platform instant messaging system designed for the corporate marketplace. It leverages Novell eDirectory for user authentication, user searching, and system administration. Conversations are secured using SSL encryption between the client and server. The protocol supports two-way conversations, multi-way conversations, presence information/updates for contacts, contact properties (based on attributes in the directory), custom status messages, auto replies, and privacy management.
Oscar
Oscar is the official AIM protocol created by AOL, and all official AIM clients use Oscar. Oscar is a closed protocol, unlike TOC; AOL has never released any specifications on Oscar, which means that all of our knowledge about Oscar comes from reverse engineering. The libfaim authors have been working on this for nearly three years. Gaim first featured the ability to use libfaim in 0.9.7, though it was never worked on enough to be usable; it wasn't until 0.9.16 when it was somewhat usable, and 0.9.20 when it was able to be used without special compilation options. Oscar is now the protocol that most Gaim users use (as witnessed by the outcries on Slashdot when it stops working).
Oscar is a TCP-based protocol. It is binary, which means that commands are stored in integers rather than in character strings. This makes it considerably easier to extend the protocol when you want to add new features. For any successful signon, there are at least three connections made: first to the Authorizor, which validates your username and password; then to the BOS (Basic Oscar Service), the main connection to which and from which you send and receive messages; and ChatNav (Chat Navigation), which allows you to create and join chat rooms. In addition, each chat room that you join is another TCP connection. Finally, each file transfer and direct connection you make is another TCP connection, but these never pass through AOL. There are two ways of sending your password, XOR-based and MD5-based; libfaim currently uses the MD5 authentication. All messages are routed through AOL, except for direct connections.
Because Oscar is not an open protocol, Gaim doesn't support a lot of the features that it offers. It does, however, support all of the features that TOC offers, as well as several that TOC does not offer (including the ability to get users' away messages, and searching for users by email address). Also, AOL has a habit of blocking unofficial clients from connecting using Oscar, which means that occasionally Gaim does get blocked. However, Gaim itself has never been targeted to be blocked - it has always just been incidental while AOL blocked another service (Odigo and Jabber come to mind).
There is some documentation of the Oscar protocol here and here.
Sametime
Support for Lotus Sametime in Gaim is available via an optional add-on package from the Meanwhile project, at http://meanwhile.sourceforge.net.
A Sametime (nee Virtual Places) client uses a binary protocol built around a single TCP connection to a Sametime server, communicating in what is known as the Master protocol. Communication between clients is facilitated by a number of services. Services provide functionality such as messaging, conferencing, presence subscription, server-side storage of settings, and a user directory. Each service requires the client to handle a different sub-protocol over one or more Channels.
Sametime communities must be explicitly connected. If two communities are not explicitly connected, there is no way for a user on one community to communicate with a user of another community.
The Sametime protocol was originally published in draft form to the IETF as part of the IMPP working group. The "houri-draft" has long since expired, but was mostly a correct reference to the Master protocol and some sub-protocols. A copy is available here.
The Meanwhile project is not a product of IBM or Lotus, and is therefore neither endorsed nor supported by either.
TOC
TOC was created by AOL to allow unofficial clients to connect to the AIM service. TOC was originally used by TiK, an AIM client written in tcl/Tk. Gaim was one of the first clients to make use of the protocol - if it hadn't been for TOC, Gaim wouldn't exist.
TOC is a TCP-based protocol. It is ASCII-based, but uses a 6-byte binary header for length information. There is usually only one connection made in a normal session; however, a connection is made for every file transfer that takes place, but these are direct connections, and so never go through AOL. Passwords are sent using a weak encryption algorithm. All messages are routed through AOL, except for when a direct connection is requested - however there are no TOC clients that support direct IMs (that I know of).
Because TOC is not the official AIM protocol, and no official client has ever used TOC (with the exception of TiK), in addition to not keeping up with the official protocol in terms of functionality, TOC's usability has actually deteriorated since it was released. It does not support new features that official clients support, including the ability to request a file transfer (it can accept a request made by an official client though), and the ability to view users' away messages without relying on an auto-reply. It has also lost capabilities, such as searching for users by email address.
Yahoo!
This section has not yet been written.
Zephyr
Zephyr, or more completely the Project Athena Zephyr notification system, is an IM system designed by MIT. It is founded on basic Unix principles - simple applications that do one thing very well. A normal Zephyr client installation normally consists of eight or nine clients - each which serve a different purpose (one for receiving messages, one for sending them, one for searching for online users, etc.). Gaim attempts to integrate the functionality of several of these clients (most of which are console-based) into one GUI client. Zephyr is based on a library that is distributed in the Zephyr source, which is what Gaim uses to connect to the Zephyr service.
Zephyr is a UDP-based protocol, and in order to keep messages reliable, it has a "host manager". Every machine that acts as either a client or a server for Zephyr must be running one and only one instance of the Zephyr host manager (zhm). Gaim does not provide this, so in order to use Zephyr in Gaim, you must make sure that zhm is properly set up and configured first. The Zephyr library gets your username from getuid() or your Kerberos name - meaning that the username and password you tell Gaim are ignored. It also means that you can only use Gaim to connect to Zephyr once (you actually can connect to it multiple times, but the more often you connect, the more of a drain on server resources you are).