Set up your own Instant Messaging system

When I first started working with Microsoft Exchange, it was with the 2000 version. I thought it was nice, especially that it had an instant messaging component built in. We set it up, and the whole organization came to depend on it. But when we wanted to upgrade to Exchange 2003, we found the IM component was gone. That functionality had gone into another product, Live Communications Server. So, I started looking for alternatives.

I already had some experience playing around with jabberd, an open-source IM server that uses an open protocol, XMPP. So I started getting up to date on what was current in the Jabber world. There are several very nice implementations of servers and clients, but I finally settled on Openfire.

Openfire is open-source, written in Java so it’s cross-platform, and has lots of good features. We have it running on a Windows server, using a Microsoft SQL server for it’s backend, and integrating with Active Directory (LDAP) for authentication and roster population. Connections between Openfire and the clients are all encrypted. It’s been very stable and reliable for us.

The same folks that put out Openfire also have a client program, called Spark. We originally deployed Spark because it has some good integration with Openfire. In particular, I found out we could configure Single Sign On (SSO) between Spark and Openfire using Kerberos. In practice, that turned out to be flaky and impractical for our network setup. Spark is also Java-based, and it seems to be a little memory-hungry (usually around 50-60 MB) for our older workstations. We are still using it, but I’m currently looking for something different. I’m also considering writing one using .NET and the agsXMPP libraries.

One thing I think is great about Jabber/XMPP is how easy it is to link different systems together. In Openfire, it’s as easy as enabling server-to-server connections, and optionally specifying who can connect (all servers, some you specify, all except specified), and encryption settings. Clients on one server can then add contacts with addresses on the other server. Usually the connection between servers is only active if there’s need for it.

You can also use Openfire as a gateway to other proprietary IM systems like Yahoo and MSN. There are plugins on the server side that allow you to use your Jabber client to also chat with people on these other systems. You may lose some of the fancier bells and whistles of the third-party cilents, but sometimes it’s handier having everything in once place than having 3 or 4 different IM programs open at a time.