Evolution :
All client-to-server IRC protocols
in use today are descended from the protocol implemented in the
irc2.8 version of the IRC2server, and documented in RFC 1459. Since
RFC 1459 was published, the new features in the irc2.10 implementation
led to the publication of several revised protocol documents; RFC
2810, RFC 2811, RFC 2812 and RFC 2813, however these protocol changes
have not been widely adopted among other implementations. IRC 2.11
is most widely used on the IRCnet network. The IRC protocol was
extended by Microsoft in 1998 via its IRCX protocol that solves
many of the traditional problems that legacy IRC networks faced,
along with some features that most users felt were 'ahead of its
time'. Although many specifications on the IRC protocol have been
published, there is no official specification, as the protocol remains
dynamic. Virtually no clients and very few servers rely strictly
on the above RFCs as a reference.
While the client-to-server protocols are at least functionally similar,
server-to-server protocols differ widely (TS5, P10, and ND/CD are
several widely used and incompatible server protocols), 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.
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.
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.
Significant releases based on 2.8 include:
· 2.8.21+CS, developed by Comstud
· 2.8+th, Taner's patchset, which later became
· ircd-hybrid, 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, mainly for use on the IRCnet network. This development
line produced the 4 IRC RFCs released after RFC 1459, which document
this server protocol exclusively.
2.8.21+CS and ircd-hybrid continue to be used on EFnet, with ircd-ratbox
(an offshoot of ircd-hybrid) as of 2004 being the most popular.
Undernet's IRC server, ircu, is one of the few servers not descended
from irc2.8 that are based on the original ircd; it was forked from
the irc2.7 codebase.
Many modern IRC servers have been coded from scratch, such as csircd
(also from Comstud), ConferenceRoom, Microsoft Exchange Chat Service,
InspIRCd, and IRCPlus/IRCXPro. 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). |