IRC Client Usage Share on moznet

Published on Wednesday, September 23, 2015
Tags: Instantbird, IRC, Mozilla, Thunderbird

Background

The usage share of IRC clients has always been something I’m interested in. This is partially to see how many people are using Instantbird or Mozilla Thunderbird for IRC (as I’ve written much of the IRC code for those clients). Usage share of browsers is quite a researched topic, but I’ve never come across this data for IRC. Most [1] IRC clients implement a part of the CTCP protocol which allows a client to query another client for their version. Thinking of this as a user agent is probably a good analogue. I don’t think this would imply that there is much of an issue with user agent spoofing, as there would be for web browser statistics since (as far as I know), no one uses the version response to do capability negotiation. It also is not used by servers.

Technical Bits

So how’d we do this? I wrote an extension for Instantbird which handled both the backend and the display of the results. I think that this really showcases the extensibility of Instantbird and the effort we’ve put into ensuring their are generic APIs available for developers. In particular this uses the IRC handler API and the add panel API (added by one of our GSoC students a couple of years ago.)

Anyway, at the actual protocol level, I simply send a CTCP VERSION query to each user I know of on the IRC network (based on who is in the same channels as me) and then record the responses. I tried to be nice to the network here and rate-limited myself to 1 query per second. No one complained after ~100 queries and I didn’t seem to have any fakelag issues. I then dumped the results and made a pretty(-ish) plot of this. (If you’re a network administrator reading this and think this is insane, I’d be very curious to hear a better way to do this!)

Results

In order to get some results I hooked my client up to moznet on July 23rd, 2015 and let it run on many channels (pretty much anything with more than 20 users) for a few hours [2]. I was in Europe and started early in the morning and let it run through the evening, so it should encompass some “normal” usage by Mozillians. I would expect a bit of skew in these results toward Mozilla-esque IRC clients (Instantbird, Thunderbird and ChatZilla).

Of course these numbers are just a single sampling and I have no idea how much variance there is day-to-day or over time, but I found the (un-scientific) results to be interesting!

Responses

The first thing I noticed is the large amount of information some version responses gave (in no particular order):

  • KVIrc 4.3.1 svn-6313 'Aria' 20120701 - build 2013-02-14 17:47:33 UTC - Windows 7 Ultimate (x64) Service Pack 1 (Build 7601)
  • xchat 2.8.8 Linux 3.17.4-1-ARCH [x86_64/2.90GHz/SMP]
  • HexChat 2.10.1 [x64] / Windows 7 SP1 [4.09GHz]

I don’t understand the rationale behind sharing a user’s operating system and CPU speed. Most clients responded with a simple <software> <version number>, although quite a few also include a URL.

Additionally, some bouncers respond in weird ways which might skew the results:

  • ZNC responds only if there are no clients connected OR, depending on the version, it appends itself to the client response. [3]
  • bip responds with it’s own version if no one is connected OR the version of all connected clients. [4]

Lastly, some clients just don’t respond (or respond with an empty string). The results below aren’t really a count of “users”, but a count of “clients” where some users might be counted multiple times.

Client Summary

Initially I visualized the data by plotting it two serparate ways: first by showing the count of each version response and then grouping by “client family”. The first plot had too many columns to reasonably show in this post: thus I’ve only included a plot of the client families [5]. There are two plots, the first shows a subset of the data by cutting the tail (arbitrarily including families with at least 10 users).

Note

A “client family” is counting all versions of the same client together. This was calculated by taking the text up to the first whitespace or digit and converting to lowercase:

family = version.split(/[\s\d]/)[0].toLowerCase()

Points of Note

I have to admit that I was fairly shocked by the number of IRCCloud users as I found it pretty unusable when messing with it [6]. I suspect it being an 'easy' bouncer draws many people to it. The bouncer-like software (IRCCloud, ZNC, bip) represents almost half of the users surveyed (692 / 1549 ≈ 45%)!

I'm surprised so many people are using purple as their IRC client, as the support there is really barebones. (It makes sense if you're already using Pidgin and don't want another client.) I think we've made a significant amount of improvements in Instantbird's IRC support to make it simpler for a user to get started (give it a try if you haven't!).

The last thing I'll note is that, when taken together, Instantbird, Thunderbird, and Icedove, come in as part of the top 10 (63 users, right before ChatZilla)! There's a lot of great clients out there and I'm happy to say I've helped to create one of the more popular ones (on moznet, at least!).

Let me know if I missed a great insight!

[1]"Most" is a wild accusation here. But...from the numbers I've seen, it seems like a reasonable statement.
[2]While running this I had a few users question what I was doing over private messages or in a channel. I'm shocked that clients bother their users by showing them they received a VERSION request. (Most) users just won't care! Why show that low-level of the protocol?!
[3]As corrected by DarthGandalf on IRC: "Before 1.6, ZNC version is returned iff no clients are connected. After 1.6, it's also appended to the client's response (but still one line per connected client)"
[4]Source, have I mentioned yet in this article that I hate bouncers?
[5]I stole the code to plot this from the plotting code in the extension I wrote for this. When actually using that extension, something similar to this appears as a tab and refreshes as results come in. It uses Flotr2 to do the plotting in JavaScript, I've been pretty happy with it.
[6]Although in retrospect I shouldn't be since Mozilla runs their own IRCCloud instance.