In a previous post I had briefly gone over the “history of IRC” as I know it. I’m going to expand on this a bit as I’ve come to understand it a bit more while reading through documentation. (Hopefully it won’t sound too much like a rant, as it is all driving me crazy!)
So there’s the original specification (RFC 1459) in May 1993; this was expanded and replaced by four different specifications (RFC 2810, 2811, 2812, 2813) in April 2000. Seems pretty straightforward, right?
Well, kind of…there’s also the DCC/CTCP specifications, which is a separate protocol embedded/hidden within the IRC protocol (e.g. they’re sent as IRC messages and parsed specially by clients, the server sees them as normal messages). DCC/CTCP is used to send files as well as other particular messages (ACTION commands for roleplaying, SED for encrypting conversations, VERSION to get client information, etc.). Anyway, this gets a bit more complicated — it starts with the DCC specification. This was replaced/updated by the CTCP specification (which fully includes the DCC specification) in 1994. An “updated” CTCP specification was released in February 1997. There’s also a CTCP/2 specification from October 1998, which was meant to reformulate a lot of the previous three versions. And finally, there’s the DCC2 specification (two parts: connection negotiation and file transfers) from April 2004.
But wait! I lied…that’s not really the end of DCC/CTCP, there’s also a bunch of extensions to it: Turbo DCC, XDCC (eXtended DCC) in 1993, DCC Whiteboard, and a few other variations of this: RDCC (Reverse DCC), SDD (Secure DCC), DCC Voice, etc. Wikipedia has a good summary.
Something else to note about the whole DCC/CTCP mess…parts of it just don’t have any documentation. There’s none at all for SED (at least that I’ve found, I’d love to be proved wrong) and very little (really just a mention) for DCC Voice.
So, we’re about halfway through now. There’s a bunch of extensions to the IRC protocol specifications that add new commands to the actual protocol.
Originally IRC had no authentication ability except the PASS command, which very few servers seem to use, a variety of mechanisms have replaced this, including SASL authentication (both PLAIN and BLOWFISH methods, although BLOWFISH isn’t documented); and SASL itself is covered by at least four RFCs in this situation. There also seems to be a method called “Auth” which I haven’t been able to pin down, as well as Ident (which is a more general protocol authentication method I haven’t looked into yet).
This includes a few that generally add a way by which servers are able to tell their clients exactly what a server supports. The first of these was RPL_ISUPPORT, which was defined as a draft specification in January 2004, and updated in January of 2005.
A similar concept was defined as IRC Capabilities in March 2005.
IRCX, a Microsoft extension to IRC used (at one point) for some of it’s instant messaging products exists as a draft from June 1998.
To fill in some of the missing features of IRC, services were created (Wikipedia has a good summary again). This commonly includes ChanServ, NickServ, OperServ, and MemoServ. Not too hard, but different server packages include different services (or even the same services that behave differently), one of more common ones is Anope, however (plus they have awesome documentation, so they get a link).
There was an attempt to standardize how to interact with services called IRC+, which included three specifications: conference control protocol, identity protocol and subscriptions protocol. I don’t believe this are supported widely (if at all).
Finally this brings us to the IRC URL scheme of which there are a few versions. A draft from August 1996 defines the original irc: URL scheme. This was updated/replaced by another draft which defines irc: and ircs: URL schemes.
As of right now that’s all that I’ve found…an awful lot. Plus it’s not all compatible with each other (and sometimes out right contradicts each other). Often newer specifications say not to support older specifications, but who knows what servers/clients you’ll end up talking to! It’s difficult to know what’s used in practice, especially since there’s an awful lot of IRC servers out there. Anyway, if someone does know of another specification, etc. that I missed please let me know!