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. Because of this it may
be possible to use Oscar in Gaim to sign on to ICQ; however, I don't recommend it, since
there are many features that icqlib provides that libfaim does not (for ICQ, at least).
In the future an effort may be made to add the ICQ idiosyncrasies of Oscar to libfaim, but
because icqlib works well, there isn't pressing need, which means that it will take a back
seat to other features that people would like to see (like file transfer in most of the
protocols).
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.
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() - 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).