Revision 1. Last updated: 2019-12-30.
Deadlines are on the right, and colour-coded: past, future, unknown, important
- Write some rambling, vague blog posts about how it’d be nice to have our own chat system. (The AQA people call this ‘analysis’.)
(oh wait, we gotta do work, aaaa)
- Hack up some Common Lisp code that implements part of the IRC protocol, so we’ve got a bit of scaffolding to work with.
- Start specifying things in more concrete terms, justifying the design decisions we make as we go. (The AQA people call this ‘design’.)
- Things we need to specify are:
- Group chat state: #4: Designing group chat state for a new chat system, #5: Somewhat contrived schema designing for a new chat system
- This includes things like group chat permissions.
- Messages and message formatting
- This includes things like how messages are represented, dealing with media, and read/delivery receipts.
- It also includes the wire format of the c2s protocol (it’s IRC with some extensions, ssh).
- Users and user metadata
- This includes things like presence, multi-device support, and profile pictures.
Server-to-server connections and authenticity
- This includes things like how server messages are verified, and the network topology of the federation.
- i.e. “how do we make sure this message is really from server X?”
- It also includes the wire format of the s2s protocol (it’s IRC with some extensions, ssh).
- Group chat state: #4: Designing group chat state for a new chat system, #5: Somewhat contrived schema designing for a new chat system 2019-12-30
- Implement the c2s protocol specified above.
- Implement registration and login.
- Implement user-to-user messaging with single devices. (1w) 2020-01-12
...with multiple devices and synchronized read state.
- Get group chats working (I).
- Get group chats working on single servers, with only local users. (1w) 2020-01-19
- Get servers talking to each other in a federated manner.
- Get servers to connect to one another and verify the authenticity of messages.
- Get messages sent from one user on one server to another user on a different server.
- Make this work when the servers are down, as well. (1w) 2020-01-26
- Get group chats working (II).
- Get group chats working across servers, but with only one sponsoring server. (1w) 2020-02-02
- Use the Paxos stuff to agree consensus across multiple sponsoring servers.
- This bit will be fiddly, and take a while to get right.
- Once it’s working, try and break it by taking servers offline / having them fail in the middle of certain transactions / whatever.
- Trying to find some nice test suite or way of doing this that covered a lot of the failure modes would be nifty!
- Implementation deadline
- Stuff after this is intentionally left blank, to leave space for stuff.
- First draft deadline 2020-03-06
- FINAL deadline 2020-03-27