
IRC History by Jarkko Oikarinen - of
http://www.irc.org/history_docs/jarkko.html
======
TazeTSchnitzel
So, here's a fun historical detail.

ISO 646[0] was a 7-bit character encoding, of which ASCII is a superset. It
defined a common subset of characters that would always be available, leaving
a few codepoints for local supersets to fill in. ASCII used some of those for
punctuation, but Scandinavian character sets[1] filled them with extra
lowercase and uppercase letters with diacritics.

IRC came from Finland, so it was designed for those charsets.

But the standard for the Internet is supposed to be ASCII, so what happens
when you use those codes from ASCII that correspond to extra letters in the
Scandinavian character sets? Take a look at RFC 1459:[2]

    
    
      Because of IRC's scandanavian origin, the characters {}| are
      considered to be the lower case equivalents of the characters []\,
      respectively. This is a critical issue when determining the
      equivalence of two nicknames.
    

Cute, right? Try it, it actually works (at least on Freenode!).

[0]
[https://en.wikipedia.org/wiki/ISO/IEC_646](https://en.wikipedia.org/wiki/ISO/IEC_646)

[1]
[https://en.wikipedia.org/wiki/ISO/IEC_646#National_variants](https://en.wikipedia.org/wiki/ISO/IEC_646#National_variants)

[2] [http://tools.ietf.org/html/rfc1459](http://tools.ietf.org/html/rfc1459) §
2.3

~~~
userbinator
I wonder how they used programming languages which assign special meaning to
those characters; use ASCII and the code looks fine but string constants with
those characters will be very odd, use the local variant and the string
constants look better but the code worse.

    
    
        foo[1] = "\r\n";
        fooÄ1Å = "ÖrÖn";
    

Perhaps it's something you just get used to after a while. The standard QWERTY
keyboard has a reversed form of this "caseness" , with lowercase being []\ and
their "uppercase" shifted versions {}|.

~~~
pavlov
I was using MS-DOS back then. It had a command for changing the "code page",
which would determine the appearance of special characters. (I imagine it was
technically switching between preset character sets on the video card's
character generator.)

So when you wanted to do word processing, you would first switch to the code
page that has the Nordic characters. For programming, you'd switch to the US
code page.

I don't know how real operating systems handled it :)

~~~
dragonwriter
> I was using MS-DOS back then. It had a command for changing the "code page",
> which would determine the appearance of special characters. (I imagine it
> was technically switching between preset character sets on the video card's
> character generator.)

It still exists in Windows, for the same purpose.

[https://technet.microsoft.com/en-
us/library/cc733037.aspx](https://technet.microsoft.com/en-
us/library/cc733037.aspx)

------
Arathorn
IRC's longevity and appeal is fascinating - it seems like that the more
constrained the bandwidth of communication, the more compact the
configuration, and the more quirky and charismatic everyone's favourite
clients (be they irssi, weechat, mIRC, xchat...) the more staying power a
comms medium has. My workplace started off life ~15 years ago as a channel on
a small student IRC network - the company effectively evolved out of IRC. The
importance of IRC bots (be they eggdrops, or pircbot, or whatever) also seems
to have become core to IRC culture - a well implemented IRC bot can be an
incredibly powerful tool for glueing a community together.

All this makes it incredibly hard when considering what could come after IRC,
if anything. XMPP's MUCs just don't seem to have the same sticking power, and
meanwhile things like Slack and HipChat come along and risk hijacking all our
comms into closed silos rather than the relative openness of IRC and XMPP.

Regardless, after 15 years of addiction to IRC we're having a go at coming up
with something better that still has some of the same appeal. The project is
called Matrix.org, and the main differences to IRC are:

* Open federation; anyone can spin up a server and join in. * Conversation history (i.e. scrollback) is the main building block - a room's history is stored (partially or completely) over all the servers who are participating in a room. So there's no single point of control or failure. * Compulsory cryptographically signed message history (necessary due to the open federation) * Simple HTTP/JSON client-server API. (Server-server API is also HTTPS/JSON) * Store arbitrary structured data in the room - not just text messages. So you can use it for setting up VoIP calls; whiteboarding info; random device telemetry, or whatever. * Built-in distributed file storage (no more DCC, for better or worse) * Strong identity and end-to-end encryption (via a variant of Axolotl; currently in dev) * Support for 3rd party IDs - contact people based on their mail address, phone number, or whatever details folks chose to identify themselves by.

So if you like IRC and are interested in a fairly radical alternative, please
drop by [http://matrix.org/beta](http://matrix.org/beta) and say hi. It's in
early beta, but it's fairly usable - we have Android and iOS clients and SDKs
for python, perl, iOS, Android and an increasingly active dev community. Also,
it's not frozen yet, so now is a great chance to get involved and make sure we
get it right :)

~~~
laumars
The signed messages history and end-to-end encryption sounds interesting, but
largely from a _" how is this going to work in public rooms"_ perspective.

IRC is largely a broadcast tool in the same sense that many social networks
are. With IRC, you generally chat in open channels where anybody can join.
While encryption protects against MITM, the privacy arguments are moot given
the broadcast nature of public chat rooms. So to combine that with server-held
scrollbacks, and I'm left really curious about your intended usage / benefits
of end-to-end encryption.

So if you would you mind discussing a little more detail about that aspect of
your chat protocol, I'd certainly be very interested in reading it :)

~~~
Arathorn
So, signed-message history is purely for integrity, not privacy. The problem
is that if all your rooms are completely decentralised, how do you stop a
rogue server injecting false information about the past? All servers have a
keypair that they use to sign messages they originate, and this signature
includes pointers to the 'parent' message(s) that immediately precede them in
the conversation. Thus every message asserts the integrity of the graph of
messages in a room up to that point, and means that a rogue server can't start
censoring history, or claiming its users have privileges, or whatever in
retrospect. The full details for signing message history can be found at
[https://github.com/matrix-org/matrix-
doc/blob/master/specifi...](https://github.com/matrix-org/matrix-
doc/blob/master/specification/11_event_signing.rst).

End-to-end crypto is another matter. It can make sense both for private and
public chat rooms (if you define public rooms as ones which any member of the
public can be invited into by an existing member), as if you use perfectly
forward secrecy even a public room ends up being a secure distribution channel
for the members - each message has a unique key which can be discarded by the
clients after that message is downloaded and decrypted, meaning that the
history cannot be replayed by an attacker. However, there's obviously a
compromise between deliberately replayable history (after all, Matrix is all
about synchronised conversation history) and PFS. So we've tried to be
pragmatic and give the user a choice per-room to decide how secure the history
should be.

At one end of the spectrum, you can pick a single key for the room which never
changes - killing any PFS but meaning that any new client or device can read
infinite scrollback for the room. At the other end of the spectrum you have
pure PFS. In the middle, you have the ability to re-key the room for different
criteria - e.g. changing the key whenever the membership state of a room
changes, or applying different keys for different types of messages. This
allows clients to cache as many keys as they need in order to replay the
different classes of data (and for PFS, a client could chose to cache keys too
to allow limited re-synchronisation from the server). The actual ratchet we're
using to evolve the keys is a axolotl. All of the end-to-end crypto is
currently in development, but we're just finishing the C++ axolotl
implementation currently which will then be the reference implementation for
all the various Matrix clients out there. And all of end-to-end crypto is
optional: you can't join an encrypted room if your client doesn't do
encryption, but we don't force clients or rooms to be encrypted if their users
don't want them to be. There's a longer (high level) explanation of all this
on [http://lwn.net/Articles/634144/](http://lwn.net/Articles/634144/).

~~~
Centreal
Have you talked with Aether
([http://www.getaether.net](http://www.getaether.net)) / Burak Nehbit, about
decentralization, proof-of-work, and end-to-end encryption?

Matrix's social tools might parallel well together.

~~~
Arathorn
Interesting - this is new to me (and ironic, given Aether was a candidate name
for Matrix!). The projects seem very similar in some ways - both
python/twisted/sqlite server stacks + angular frontend. The big differences
seem to be that Aether is using AMP as its federation protocol rather than
Matrix's HTTP/JSON federated DAGs, and is focused initially on forums rather
than IM/VoIP. It's a bit strange that it advertises itself as entirely peer-
to-peer though, when seemingly it is very much a client-server model (with
server/server federation) just like Matrix, SMTP or XMPP. It's also slightly
strange that the github repo is only showing certain drops from a private repo
- I wonder why the dev isn't happening in the open. It's also hard to see what
the actual decentralisation algorithm is, beyond replication. It doesn't seem
to be using DAGs for eventual consistency or signing forum history.

In terms of anti-spam proof-of-work stuff, identity, sybil attacks and all the
good stuff mentioned at [http://blog.getaether.net/post/101566226287/a-few-
updates-ab...](http://blog.getaether.net/post/101566226287/a-few-updates-
about-aether-and-whats-next) it sounds like Aether & Matrix are at a fairly
similar point. It would be super-cool to chat to Burak and get the two
federated together (after all, Matrix is all about being glue between other
communication media) - will ping him :)

------
bemmu
IRC is awesome. The biggest downside is that when you join a channel, you
don't get to read all the previous history. In that important feature
Twitter/Slack is superior.

By the way, #startups on freenode seems to have the most HN users on it.

~~~
vertex-four
> The biggest downside is that when you join a channel, you don't get to read
> all the previous history.

In my use of it - primarily social, less technical - this is actually a huge
benefit. Whereas things I say on Facebook, on Twitter, even on Skype groups
float around forever, this doesn't happen on IRC.

Only the other people in the channel log things, and if someone else turns up,
they don't see what I've been talking about - the exact contents of my
discussions aren't floating about forever so long as people don't
intentionally distribute them.

~~~
TazeTSchnitzel
This is also one of the (original) benefits of 4chan. It's not merely
anonymous, but it is also ephemeral.

However, these days there are IRC loggers and 4chan archivers.

~~~
vertex-four
There's only IRC loggers that you can see, though - if you know (practically)
everyone in a channel at a given point in time, you're reasonably safe - not
100%, but reasonably. Which is about good enough for most things.

------
xabi
Here an old IRC addict :)

/me also was the developer of XDCC
[http://xa.bi/files/irc/xdcc.3.3.0b.irc](http://xa.bi/files/irc/xdcc.3.3.0b.irc)

Good old times!

~~~
sergers
Oh my... I love u man!.

I was a little late to the irc game... Only started at 12.... 18 years ago.

Loved mirc... Made tones of custom scripts

I loved serving and getting files using xdcc from my fansubbing days. I
dabbled in some warez, stayed strong when irc.cjb.net came under fire of
massive ddos, and jumped many nodes... Always with trusty xdcc to serve our
releases before bittorent (was hosting server since initial python torrent
server release too)

------
DiabloD3
I've been on IRC since 1991, that is 24 years. I am 31. I started when I was
7.

I can't imagine the Internet without IRC.

~~~
zippergz
What are the good irc networks and channels these days? I haven't been on in
many, many years. I used to mostly hand out on undernet.

~~~
DiabloD3
The only major network worth hanging out on anymore is freenode, and thats the
bulk of my autojoin channels.

------
vor_
The IRCv3 working group ([http://ircv3.org](http://ircv3.org)), comprising
server and client developers, continues to work on new features. The latest
update is expected to be finalized around the end of March.

~~~
lfowles
I was excited when there was talk about JSON capabilities. Hopefully it gets
included eventually. (looks like it will be back on the table in 3.3+).

[https://github.com/ircv3/ircv3-specifications/issues/55](https://github.com/ircv3/ircv3-specifications/issues/55)
[https://github.com/ircv3/ircv3-specifications/issues/57](https://github.com/ircv3/ircv3-specifications/issues/57)

~~~
nenolod
We are planning to bring some experimental JSON-based transport for 3.3 which
will allow us to eventually start transitioning to considering IRC events in
an intermediate representation. The key thing is going to be getting the
client authors to understand the benefits of this approach, as well as
providing implementation of both the extended RFC1459 payload format and the
JSON format.

The eventual end game is to have a flag day and deprecate the legacy format,
but this will probably take a few years to do.

------
api
I wrote an Irc script called TextBox as a teenager. Among other things it was
one of the first that could implement Irc bots via DCC RAW tcp connections
from the script itself, allowing you to martial armies of channel takeover
bots. Seemed cool when I was 15, and it was actually through Irc channel wars
that I learned the basics of network protocol design.

~~~
raldi
Holy shit! You're the guy who wrote _textbox.irc?!_

/me bows

(For those of you who didn't have shell accounts in 1994, this is like being
the inventor of the AK-47 and the skateboard at the same time.)

~~~
api
Lol. Yeah, those were fun times. Old school IRC was basically a non stop CTF
tournament. I wrote TextBox on a Linux 486 with kernel 0.99.15 I think, or
maybe 1.0.x, and a shell account on a Sun SparcStation via a local ISP.

[http://adam.ierymenko.name/ye_olde_source_code.html](http://adam.ierymenko.name/ye_olde_source_code.html)

That page has TextBox and also my first nontrivial c program, a nick collider.

------
slacko
I study at the University of Oulu. The university museum has the machine that
hosted the first IRC server :)

------
Raphmedia
Anyone else has the issue that every IRC channel seems dead? If I'm very
lucky, I'll find an active channel, but it will die in about a month. Perhaps
I am simply not looking in the right places.

~~~
ReidZB
There are many large Freenode channels that don't appear to be dying any time
soon, like #bash, #archlinux, ##linux, etc. (Though, just because they're
large and not dying doesn't mean they're worth hanging out in. :) )

As a tip, on Freenode, you can message the Alis bot to list channels:

    
    
        /msg alis list *linux*
    

The reply from Alis will include how many users are in channels whose names
match linux. If it has >500 users, it probably isn't going anywhere any time
soon. (You can do this for other topics that interest you, of course.)

~~~
lfowles
It seems that many subreddits also have thriving IRC communities. See:
#boardgames on Freenode, which probably has ~150 connected at any given time.
So it's not only the big channels!

------
snarfy
If I recall correctly, a few PC games used irc code as the basis of there
networking stack.

irc2 script was what really got me into programming all those years ago. At
one point I had VT100 codes spammed to the status line in order to draw blocks
on the screen for an in chat tetris game drawn in ascii. I also managed to
hack out of the sandbox the client was running in by setting the
ENCRYPT_PROGRAM feature to /bin/sh. Good times.

------
schme
Twitch chat is also running on top of IRC. You can connect to their irc
servers and use the twitch chat from your irc client. With limited
capabilities I might add (no private messages for one). More info:
[http://help.twitch.tv/customer/portal/articles/1302780-twitc...](http://help.twitch.tv/customer/portal/articles/1302780-twitch-
irc)

------
notfoss
Though there is no indication on the web page, the "Last Modified" tag says
4/29/2000, 4:45:46 PM.

I believe that should be mentioned in the title of this post. Because the
following text from the page felt misleading.

    
    
      "The first IRC server (and still running) was tolsun.oulu.fi .."

------
hernan604
Here is a _small_ list of famous projects from the common developer tools and
their corresponding contact web pages that mention IRC plus where to find help
and/or core developers of such projects.

\- Databases -

mysql
[http://dev.mysql.com/doc/refman/5.0/en/irc.html](http://dev.mysql.com/doc/refman/5.0/en/irc.html)

postgres
[http://www.postgresql.org/community/irc/](http://www.postgresql.org/community/irc/)

firebird [http://www.firebirdsql.org/en/news-
portals/](http://www.firebirdsql.org/en/news-portals/)

oracle [http://www.orafaq.com/wiki/IRC](http://www.orafaq.com/wiki/IRC) * not
oficial *

\- Virtualization -

virtualbox
[https://www.virtualbox.org/wiki/IRC](https://www.virtualbox.org/wiki/IRC)

vagrant
[https://www.vagrantup.com/support.html](https://www.vagrantup.com/support.html)

\- Languages -

ruby [https://www.ruby-lang.org/en/community/](https://www.ruby-
lang.org/en/community/)

python
[https://www.python.org/community/irc/](https://www.python.org/community/irc/)

perl [http://www.irc.perl.org/](http://www.irc.perl.org/)

go [https://golang.org/help/](https://golang.org/help/)

\- Editors -

vim [http://www.vim.org/community.php](http://www.vim.org/community.php)

emacs
[http://www.emacswiki.org/emacs/InternetRelayChat](http://www.emacswiki.org/emacs/InternetRelayChat)

\- webservers -

nginx [http://wiki.nginx.org/Community](http://wiki.nginx.org/Community)

apache
[http://httpd.apache.org/support.html](http://httpd.apache.org/support.html)

\- Linux distros -

arch
[https://wiki.archlinux.org/index.php/IRC_channel](https://wiki.archlinux.org/index.php/IRC_channel)

ubuntu
[https://wiki.ubuntu.com/IRC/ChannelList](https://wiki.ubuntu.com/IRC/ChannelList)

freebsd
[https://wiki.freebsd.org/IrcChannels](https://wiki.freebsd.org/IrcChannels)

\- Java -

hibernate [http://hibernate.org/community/](http://hibernate.org/community/)

tomcat [http://tomcat.apache.org/irc.html](http://tomcat.apache.org/irc.html)

\- Window managers -

i3 [http://i3wm.org/contact/](http://i3wm.org/contact/)

gnome
[https://wiki.gnome.org/Community/GettingInTouch/IRC](https://wiki.gnome.org/Community/GettingInTouch/IRC)

kde
[https://userbase.kde.org/IRC_Channels](https://userbase.kde.org/IRC_Channels)

fluxbox [http://fluxbox.org/help/](http://fluxbox.org/help/)

\- Broswers -

opera [http://irc.opera.com/](http://irc.opera.com/)

chromium [http://www.chromium.org/contact](http://www.chromium.org/contact)

firefox [https://wiki.mozilla.org/IRC](https://wiki.mozilla.org/IRC)

\- Image Software -

Gimp [http://www.gimp.org/irc.html](http://www.gimp.org/irc.html)

Inkscape
[https://inkscape.org/en/community/discussion/](https://inkscape.org/en/community/discussion/)

