A while ago pgf and I started this endless discussion about how the centralisation of the Internet in some key services seems to be stifling some of the giddiness of the old days (by old I mean the nineties). We don't necessarily agree on all of this, specially since there is usually beer involved in such discussions, but here is my spin over it.
These days the preferred Internet spots for random nonsensical group discussion seem to be Reddit/4chan (or argh Facebook/G+). Back in the day (for me) this was mostly IRC, over several servers (FreeNode, some local servers, etc) and some specialised web boards.
The good (or bad) thing about IRC was that the variety of servers/channels led to all sorts of behaviours, some places were serious while other were explicitly intended for fooling around.
- Interaction was real time. Most channels did not keep logs, and even if they did, nobody would show up to comment something said 12 hours ago.
- Since everyone could create their own channel, everyone did, and operators were in on the fun. Voice/Ban dynamics made for some pretty amusing episodes (check bash.org).
- Most servers supported registered nicknames that only you could use. Some servers enforced their use, others did not. It was common for users to switch nicknames for a prank or just as a joke.
How do current services fill into this view? Well:
- Reddit seems to favour (2), but not (1). You need an account for commenting (3).
- 4chan is mostly real time (1), but only a set of known channels exist (2), anonymous posts are common (3) but you can play around with your name, and there is also a lightweight form of identification
- Facebook is not real time oriented (1) all interactions are stored. There are lots of group dynamics (2). You are always identified with your profile info (3) also they are strict about user naming/information.
- We can probably describe Google+ in the same terms as Facebook
- Twitter sometimes seems real time (1) even if is was not intended. Group discussion can only occur over #hashtags (2). An account is required to use the service (3).
- XMPP chat rooms supported (1) and (2). I am not sure about (3), as far as recall servers allowed the use of nicknames to conceal the user JID, but nicknames were unique per room (I may be wrong here).
So pgf supported that we are missing some kind of service that offers real time group chat. I am going to focus on text chat here, but you can poke pgf directly for ideas on audio.
Among the both of us, we defined the requirements for this mythic system as, more or less the following:
- Real time chat, with no server side history.
- Easy to create separate chats, as in click and done
- Decentralised, because we can :D
You'll notice that there is nothing in those requirements about identification/nicknames/etc that is because we never actually agreed on those.
From this discussion I created a hacky group chat, called chan42, that works over websockets using JSON messages. Since I could never agree on a solution for user identification I tried to fit them all in:
- Server provided session identicons to distinguish between users. These did not work across sessions they were just intended to prevent impersonation.
- Client side nicknames. These are non unique, client chosen nicknames, mostly for fun and games.
- Server nicknames (I call these handles). These should be unique nicknames enforced by the server. So far I only experimented with this for random nicknames.
This resulted in some fun moments with people playing with nicknames and being assigned hilarious server handles. It sounds awkward to allow users to set any nickname without checking for duplicates, but I actually find it reasonable to have a group discussion in a room where all participants are unidentifiable - TLDR; uniqueness is not important.
So far I only use (3.) for random funny server handles, but the following should also be possible (FYI this is not supported, but can be future work for someone with some free time :D):
- The handle could have special meaning, e.g. it could indicate that the client was authenticated with some know identity
- For example @fb/briangriffin could mean the user was authenticated with facebook account briangriffin.
- Same could be valid for other identity providers @tw/briangriffin could be twitter and @gh/briangriffin github.
- In these examples I used the @ symbol to express
handle is verified identity from
All this identity mumbo jumbo brings in some extra complexity, in how do we explain users what is going on, and what everything means. I’ll happily offer praise and beer to any designer/interaction expert that can merge all this into a coherent interface concept. Technically thins could work like this:
- If a user is not authenticated through any special means (facebook/twitter/ or even user:password) then he is assigned a unique session id. This id only lasts until the user disconnects and is used to generate the user identicon.
- If the user has authenticated to the server (facebook/twitter/etc) then the server identifies the user using handle.
- Nicknames are completely independent of the previous points - they are a client side feature - it is important to help the user understand this though.
By distributed I mean being a disjoint bunch of chatrooms hosted by however wants to host them. Without a common infrastructure or oversight.
While IRC was fully distributed, I feel it fell short on this area because each network was not only one chat room but also one identity (i.e. nickserv). Also support in clients for multiple servers was not exactly stellar.
From the technical standpoint XMPP MUC got the distributed part right. You could connect to a chatroom in any server. But it suffered from other issues. Hosting a XMPP server was a hard job. Also client support for MUC was sometimes poor.
All other services gain no benefit from being truly distributed, since they get profit from steering users to their chat services - to gather revenue.