Distributed Relay Chat, DRC for short, is an attempt at a fully-distributed, low-maintenance chat network platform. Its target audience includes, but is not limited to, IRC network administrators.
After having administered an IRC network for a couple of years, I'd started to tinker with writing IRC bots and simple clients. The combination of these experiences was enough to realise a few things:
(Stuff goes here when I think of it but haven't put it anywhere proper!)
In-channel registration
Multi-location signon
Application protocols not implemented network-wide
Premises:
Solution:
SARC stands for Self-Aware Relay Chat.
Some time in early 2006, after having spent a few years administering an IRC network, I thought that it would be awesome if it were possible to have an almost-zero-maintenance chat network which also had true redundancy.
Anybody who has spent a significant amount of time on an IRC network will know what a netsplit is - when a connection between servers dies for some reason, leaving part of the network isolated. These can be inconvenient on many level - for the users who miss messages, for the users who end up with several hundred “part” messages in their chat windows, for the administrators who have to be on the ball to route around the problem.
IRC is based fundamentally on a minimum spanning tree topology, and this means the network is inherently hierarchical and while the network is distributed, there is no redundancy and bottlenecks can exist higher up in the hierarchy. This means it is possible for the failure of a single node or a single connection to significantly impact the operation of the network. Yes, most IRC daemons are capable of re-connecting themselves to the network, but this almost always requires more tweaking by the administrators to get a sensible network map. Because there is only one route between any two nodes on an IRC network, the network map must be micromanaged to be as efficient as possible.
This means that to maintain a usable network, nodes must be running on very high availability servers, and even then if that node does fail the network can fall apart (root nodes of IRC networks are important Denial of Service targets).
The aim of SARC in this area is a network with multiple redundancy, which is “self-healing”, requiring no human intervention in repairing the network. Multiple redundant links prevent the network from being affected by node failures or connection failures - the Internet would literally have to split in half to break the network. Since one link failing doesn't stop a node being reachable, it's possible to give the network a certain amount of intelligence for identifying where faults lie, avoiding particular connections, etc.
Services are an important part of large chat networks. They allow users to mask their real identity and protect their network identity from misuse. However, all implementations of IRC services at the moment are single-instance affairs - they are generally a pseudo-server with pseudo-users for interaction with real users. If the services are disabled in some way, this can lead to chaos on a large network, with people using the identity of others, stealing channels, etc. The alternative is stopping anything significant happening while the services are away, which is a major inconvenience for all concerned.
SARC aims to provide a completely distributed services system which is not in any way impaired by loss of nodes.