Create a modular daemon which will form the basis of several components of the project, including the multicast media server, router daemon and the stratum 0 servers.
Create a websockets module for the Librestack Daemon, based on librestack/gladd code.
Create a module for the Librestack Daemon to add IPv6 multicast support.
Add static tunneling support to librecast library for pre-configured static endpoints.
Add endpoint discovery and autoconfiguration to multicast tunneling.
Add encryption support to librecast C library messaging. This is not a substitute for end-to-end encryption which will be used in many applications, but can be used where E2EE is not required.
Add encryption support to librecast storage C library. This encrypts data stored on disk.
Authentication of users using public/private key encryption. This is authentication only (who is this), not authorisation (what can this user do). Authorisation (ACLs) is a separate task. Add authentication support to librecast library using PSK verification.
This task will review and expand the storage capabilities
This milestone adds Paxos consensus based replication (over multicast). This is essentially a thin wrapper for LMDB which will allow full speed reads, and slower synchronous, verified writes to multiple nodes.
This milestone adds asynchronous write capability to the previous milestone.
Develop simulation software to aim in testing new multicast routing protocols and setups. We need to be able to quickly test new protocols against various network configurations and at large scale. Simulating this in software is the only feasible/cost-effective way of doing this.
Protocol Independent Multicast (PIM), which is the IP Multicast in use today, depends on unicast routing tables. This is a huge hinderance to multicast development. This milestone is to develop a unicast-independent multicast routing protocol.
Develop multicast router daemon with transitional tunneling support, based on Librecast libraries.
Set up Statum 0 Server, which is a variant of the Librecast Routing Daemon. This will provide a public facing service for anyone wanting to join a the Librecast multicast backbone.
Basic media server, which can providing WebRTC signalling support for setup of a WebRTC session.
Media Server with WebRTC endpoint termination.
Proof-of-Concept video streaming application with WebRTC streaming support.
Minimum viable product video streaming application with WebRTC streaming support.
Translate application interface into at least one language other than English to demonstrate multi-lingual capabilities of front-end.
Add multicast server federation support to media server.
Add multicast live chat messaging to media server.
Private direct-messages between chat users
Add end-to-end encryption (browser to browser) for chat messages
User Authentication (web application)
Ensure web interface passes W3C and WCAG testing.
Server support for ActivityPub
Integrate with Peertube via ActivityPub
Integrate with Mastodon via ActivityPub
Integrate with Matrix
Visual reports and stats on what is actually happening behind the scenes. To a user of the system, there's no indication that multicast is in use. Lets expose the workings in debug mode - useful for debugging and demos to show what multicast is actually doing.
Record and replay live-streams.
Add FEC error correction codes to improve reliability.
Add NACK capability along with message loggin and replay to improve reliability
Reliable, ordered message delivery.
Add the capability to queue messages when the recipient is offline, or networking is down. This, combined with the previous three milestones brings us to full MQ capabilities, like ZeroMQ.
WebRTC (V9) has support for simulcasting. ie. splitting the video stream into multiple quality channels. On the media server we can split these onto separate multicast channels, allowing the receiver full control over their quality stream.
Flow control can be handled in multicast by multiplexing UDP packets across multiple channels. This milestone adds this functionality into the librecast library so that applications don't need to manage this themselves.
Expand the IoT Updater Daemon (iotupd) into a full multicast webserver. This will provide a full demo of the multicast web server concept, allowing any static web content to be send over multicast.
Add authorisation (ACLs) to Librestack Daemon, similar to PAM ACLs.