"why write another one" is because I would rather spend time and write exactly what I need than put up with existing stuff that does quite not fit. There are always these little annoyances that stick out and that I wish I could fix. But if I were to start fixing them (assuming it's an open source client), then why not write from scratch? I also come from the network development background - I spent several years writing code for the firewall appliances, routers, load-balancers, etc - so (high-performance) protocol parsing and the client-server stuff in general is something that I feel very comfortable with.
That being said I don't actually manage to get to the writing part that often, at least not recently. I was this
close to writing an IM client few years ago. Spec'ed it out, did some UI sketching and what not, but then we had a kid and it got shelved with a lot of other stuff. In any case, I made a fairly detailed list of what I wanted in the IM client, and here it is:Must have (highest priority)
- ICQ support
- plain text messaging
- end-to-end security based on public key caching (SSH-style)
- password-protected, encrypted local configuration profiles
- simultaneous login under multiple accounts of the same service
- available, away, busy and "other" statuses
- support for new contact authorization
Need to have (high priority, this needs to be in a beta release)
- simple, convenient and good-looking UI
- contact grouping (up to two levels in hierarchy)
- easy access to the list of the accounts and their online statuses
- full Unicode support
Nice to have (post-1.0 releases, most important - first)
- tracking contact’s status history (away/busy)
- contact notifications (away/offline -> available, etc)
- meta-contacts (merging 2+ contacts into a single UI entity)
- tabbed chat windows, consecutive message grouping
- modest UI skinning support
- visual nudging
- support for invisibility mode
- AIM, Yahoo, MSN support
- Jabber support
- local contact discovery using Bonjour
- group chat
- some form of file sharing or file exchange
- support for blacklisting contacts
These are features typically found in IM clients and that are essentially a result of IM vendors' evolution. These are either a fancy-schmancy stuff or they should be a part of a specialized application. Therefore they should be kept out of the Instant Messaging client.
- rich-text-format (pretty formatted) messaging
- graphical smiles and sounds
- buddy icons
- elaborate support for statuses other than available, away and busy
- multi-level contact grouping (not sure about this one actually)
- audio and video conferencing
- remote desktop access
To this list I would now also add chat continuity
, which is probably THE most useful and natural feature to be missing from most of IM clients. That's it.
Pidgin / Miranda do not fit the bill - both in the security/privacy (OTR is a bit unorthodox, I would rather have more conventional encryption architecture) and in the UI/usability departments. Meebo is a no go for privacy reasons, though I have to say it is a nice proggy. Adium is very close, but it's Mac.
If you or anyone else has any thoughts on the list, I'd be curious to hear them. I realize, for example, that the privacy aspect does not matter much to a vast majority of IM users, and that ICQ is not the most popular IM medium... but this is not meant to be a commercial product (or at least not a highly profitable one).