Connais pas Yahoo, mais je sais que je préfère ICQ à MSN, même si en vieillissant il est devenu moins convivial.
IRC est le plus vieux, et de mon point de vue d´Unixien paresseux, le meilleur. La plupart des clients modernes sont en effet bourrés de trucs et d´astuces, et une bonne partie sont programmables. Le meilleur, je pense, est mIRC sous Windows, qui est vraiment impressionnant au niveau de son langage intérieur ( gestion des sockets, des dll, etc... un vrai langage de programmation) et avec lequel on peut facilement faire des petits serveurs.
Il existe également Jabber que je préfererai aux autres... sous Tiger. Contrairement à AIM, MSN ou Yahoo, il est libre. Il est extrèmement moderne, multi-serveurs et extensible.
Multi-serveurs : pas de pannes généralisées comme on a à en supporter avec MSN, pas de serveur qui se tape des petites crises de " Nan ton message passera pas" comme avec AIM : chaque serveur à sa règle, et tous communiquent entre eux. Mieux, comme le protocole est extensible et libre ( j´explique " extensible" par la suite), tu peux développer N´IMPORTE QUOI qui l´utilise.
- Euh, oué, mais moi je m´en fous, je suis un utilisateur, qu´est-ce que ça m´apporte ?
Bin personne ne t´empêche de monter ton propre serveur, ou d´en installer un tout fait, dans l´enceinte de ton collège/lycée. Il servira alors de messagerie privée... tout en étant configurable pour envoyer certains ( sur autorisations) messages à l´extérieur.
Personne, et là c´est encore mieux, ne t´empêche de faire ce qu´on appelle une " passerelle" ou un " transport", du protocole Jabber vers, paaaar exemple, le protocole MSN... et là c´est tout bon ! Ca marche, le serveur qui fait office de transport se connecte au serveur MSN et te permet de parler à tes contacts avec un seul compte ! J´avais trouvé msn.develog.com ( Fr) comme serveur, mais il doit en exister d´autres
Maintenant, extensible. Que signifie-ce ? Que le protocole est en fait un modèle, sur lequel chacun peut rajouter sa brique en suivant quelques règles pour le bon fonctionnement. Par exemple si je suis un génie de l´informatique, avec MSN ou AIM je ne peux pas foutre mes extensions comme ça : ce sont les serveurs qui me disent " Nonon, je peux pas supporter ça, c´est pas prévu". Je suis obligé de faire en sorte que les deux personnes qui veulent utiliser mon extension entrent en connexion directe. Ce qui est plus pénible parce que ça oblige chacune d´entre elle à avoir un programme serveur/client. Toi tu le sais pas, mais à programmer, c´est assez pénible. Enfin la façon que j´ai trouvée de le faire l´est. Enfin bref 
Avec un protocole extensible... le serveur s´en fout ! Les clients incompatibles s´en foutent ! Chaque client envoie un certain code, qui se présente comme du code HTML, avec des balises du genre ( si je me souviens bien)
< Message>
< Destinataire>Pingwin@jabber.org</Destinataire>
< Corps>Salut ! !</Corps>
< Machin> Mange des pommes ! </Machin>
< /Message>
Et le client qui reçoit regarde chaque balise < Machin> ou autres et, si il est programmé pour ça, lit ce qu´il y´a dedans ( ici " Mange des pommes ! " ) . Sinon, il laisse tomber, ni message d´erreur ni rien. Le client, restant sans réponse, concluera que l´action < Machin> est inconnue du destinataire, et c´est tout.