IRC / Real-Time Chat Systems

Many projects offer real-time chat rooms using Internet Relay Chat (IRC), forums where users and developers can ask each other questions and get instant responses. IRC has been around for a long time, and its primarily text-based interface and command language can look old-fashioned — but don't be fooled: the number of people using IRC continues to grow[36], and it is a key communications forum for many open source projects. It's generally the only place where developers can meet in a shared space for real-time conversation on a regular basis.

If you've never used IRC before, don't be daunted. It's not hard; although there isn't space in this book for an IRC primer, http://irchelp.org/ is a good guide to IRC usage and administration, and in particular see the tutorial at http://www.irchelp.org/irchelp/irctutorial.html. While in theory your project could run its own IRC servers, it is generally not worth the hassle. Instead, just do what everyone else does: host your project's IRC channels[38] at Freenode (https://freenode.net/). Freenode gives you the control you need to administer your project's IRC channels, while sparing you the not-insignificant trouble of maintaining an IRC server yourself.

The first thing to do is choose a channel name. The most obvious choice is the name of your project — if that's available at Freenode, then use it. If not, try to choose something as close to your project's name, and as easy to remember, as possible. Advertise the channel's availabity from your project's web site, so a visitor with a quick question will see it right away.[39]. If your project's channel gets too noisy, you can divide into multiple channels, for example one for installation problems, another for usage questions, another for development chat, etc (the section called “Handling Growth” discusses when and how to divide into multiple channels). But when your project is young, there should only be one channel, with everyone talking together. Later, as the user-to-developer ratio increases, separate channels may become necessary.

In each channel, set the channel topic.[40],which is a brief message each user sees when they first enter the channel. It gives quick guidance to newcomers, and pointers to further information. For example:

The Apache™ SubversionŽ version control system
(http://subversion.apache.org/) | Don't ask to ask;
just ask your question!  | Read the book:
http://www.svnbook.org/ | No one here? Try
http://subversion.apache.org/mailing-lists#users-ml
| FAQ: http://subversion.apache.org/faq | Subversion
1.9.9, 1.10.3, and 1.11.0 released

That's terse, but it tells newcomers what they need to know. It says exactly what the channel is for, gives the project home page (in case someone wanders into the channel without having first been to the project web site), gives a pointer to some documentation, and gives recent release news.

IRC Bots

Many technically-oriented IRC channels have a non-human member, a so-called bot, that is capable of storing and regurgitating information in response to specific commands. Typically, the bot is addressed just like any other member of the channel, that is, the commands are delivered by "speaking to" the bot. For example:

<kfogel> wayita: learn diff-cmd =
         http://subversion.apache.org/faq.html#diff-cmd
<wayita> Thanks!

That told the bot, who is logged into the channel as wayita, to remember a certain URL as the answer to the query "diff-cmd" (wayita responded, confirming with a "Thanks!"). Now we can address wayita, asking the bot to tell another user about diff-cmd:

<kfogel> wayita: tell jrandom about diff-cmd
<wayita> jrandom: http://subversion.apache.org/faq.html#diff-cmd

The same thing can be accomplished via a convenient shorthand:

<kfogel> !a jrandom diff-cmd
<wayita> jrandom: http://subversion.apache.org/faq.html#diff-cmd

The exact command set and behaviors differ from bot to bot (unfortunately, the diversity of IRC bot command languages seems to be rivaled only by the diversity of wiki syntaxes). The above example happens to use wayita (http://repos.borg.ch/svn/wayita/trunk/), of which there is usually an instance running in #svn at Freenode, but there are many other IRC bots available. Note that no special server privileges are required to run a bot. A bot is just like any other user joining a channel.

If your channel tends to get the same questions over and over, I highly recommend setting up a bot. Only a small percentage of channel users will acquire the expertise needed to manipulate the bot, but those users will answer a disproportionately high percentage of questions, because the bot enables them to respond so much more efficiently.

Commit Notifications in IRC

You can also configure a bot to watch your project's version control repository and broadcast commit activity to the relevant IRC channels. Though of somewhat less technical utility than commit emails, since observers might or might not be around when a commit notice pops up in IRC, this technique is of immense social utility. People get the sense of being part of something alive and active, and feel that they can see progress being made right before their eyes. And because the notifications appear in a shared space, people in the chat room will often react in real time, reviewing the commit and commenting on it on the spot. The technical details of setting this up are beyond the scope of this book, but it's usually worth the effort. This service used to be provided in an easy-to-use way by the much-missed http://cia.vc/, which shut down in 2011, but several replacements are available: Notifico (https://n.tkte.ch/), Irker (http://www.catb.org/esr/irker/), and KGB (https://kgb.alioth.debian.org/). Also, many of the major hosting sites, e.g., GitHub, make this functionality pretty easy to set up — the key phrase to search for is "IRC hook", if you want to learn more.

Archiving IRC

Although it is possible to publicly archive everything that happens in an IRC channel, it's not necessarily expected. IRC conversations are nominally public, but many people think of them as informal and ephemeral conversations. Users may be careless with grammar, and often express opinions (for example, about other software or other programmers) that they wouldn't want preserved forever in a searchable online archive. Of course, there will sometimes be excerpts that get quoted elsewhere, and that's fine. But indiscriminate public logging may make some users uneasy. If you do archive everything, make sure you state so clearly in the channel topic, and give a URL to the archive.



[38] An IRC channel is a single "chat room" — a shared space in which people can "talk" to each other using text. A given IRC server usually hosts many different channels. When a user connects to the server, she chooses which of those channels to join, or her client software remembers and auto-joins them for her. To speak to a particular person in an IRC channel, it is standard to address them by their username (nickname or nick), so they can pick out your inquiry from the other conversation in the room; see http://www.rants.org/2013/01/09/the-irc-curmudgeon/ for more on this practice.

[39] In fact, you can even offer an IRC chat portal right on your web site. See https://webchat.freenode.net/ — from the dropdown menu in the upper left corner, choose "Add webchat to your site" and follow the instructions.

[40] To set a channel topic, use the /topic command. All commands in IRC start with "/".