This section needs to be updated. (January 2015)
The original IRCd was known as 'ircd', and was authored by Jarkko Oikarinen (WiZ on IRC) in 1988. He received help from a number of others, such as Markku Savela (msa on IRC), who helped with the 2.2+msa release, etc.
In its first incarnations, IRC did not have many features that are taken for granted today, such as named channels and channel operators. Channels were numbered – channel 4 and channel 57, for example – and the channel topic described the kind of conversation that took place in the channel. One holdover of this is that joining channel 0 causes a client to leave all the channels it is presently on: "CHANNEL 0" being the original command to leave the current channel.
The first major change to IRC, in version 2.5, was to add named channels – "+channels". "+channels" were later replaced with "#channels" in version 2.7, numeric channels were removed entirely and channel bans (mode +b) were implemented.
Around version 2.7, there was a small but notable disputeircu – the Undernet fork of ircd.
, which led to
irc2.8 added "&channels" (those that exist only on the current server, rather than the entire network) and "!channels" (those that are theoretically safe from suffering from the many ways that a user could exploit a channel by "riding a netsplit"), and is the baseline release from which nearly all current implementations are derived.
Around 2.8 came the concept of nick and channel delay, a system designed to help curb abusive practices such as http://www.ircd-hybrid.com/history.html.
Time stamping itself has been revised several times to fix various issues in its design. The latest versions of such protocols are:
- the TS6 protocol, which is used by EFnet, and Hybrid and Ratbox based servers amongst others
- the P10 protocol, which is used by Undernet and ircu based servers.
While the client-to-server protocols are at least functionally similar, server-to-server protocols differ widely (TS5, P10, and ND/CD server protocols are incompatible), making it very difficult to "link" two separate implementations of the IRC server. Some "bridge" servers do exist, to allow linking of, for example, 2.10 servers to TS5 servers, but these are often accompanied with restrictions of which parts of each protocol may be used, and are not widely deployed.
Significant releases based on 2.8 included:
- 2.8.21+CS, developed by Chris Behrens (Comstud)
- 2.8+th, Taner Halicioglu's patchset, which later became
- Hybrid IRCd, originally developed by Jon Lusky (Rodder) and Diane Bruce (Dianora) as 2.8/hybrid, later joined by a large development team.
- 2.9, 2.10, 2.11, ... continue the development of the original codebase,
The original code base continued to be developed mainly for use on the IRCnet network. New server-to-server protocols were introduced in version 2.10, released in 1998, and in 2.11, first released in 2004, and current as of 2007 . This daemon is used by http://www.irc.org/ftp/irc/server/ The original ircd is free software, licensed under the RFC 1459, which document this server protocol exclusively.
2.8.21+CS and Hybrid IRCd continue to be used on EFnet, with ircd-ratbox (an offshoot of ircd-hybrid) as of 2004 being the most popular.
Diagram of derivations and relations for common IRCd implementations.
More recently, several irc daemons were written from scratch, such as ithildin, InspIRCd, csircd (also written by Chris Behrens), ConferenceRoom, Microsoft Exchange Chat Service, WeIRCd, or IRCPlus/IRCXPro.
These attempts have met with mixed success, and large doses of skepticism from the existing IRC development community. With each new IRCd, a slightly different version of the IRC protocol is used, and many IRC clients and bots are forced to compromise on features or vary their implementation based on the server to which they are connected. These are often implemented for the purpose of improving usability, security, separation of powers, or ease of integration with services. Possibly one of the most common and visible differences is the inclusion or exclusion of the half-op channel operator status (which is not a requirement of the RFCs).