There are many systems today which require self-assembling networks of cooperating computer units: Signal, Telegram, WhatsApp, Jami communications applications, or BitTorrent file-sharing service, or Ethereum distributed crpytocurrency ledger, or Mastodon and Bluesky social networks, are examples. These depend more or less on centralized resources. Of efforts to produce completely free open-source, open-protocol, fully federated systems, two efforts which stand out leverage much of the development that has gone into the other systems: GNUnet and Jami.
These stand at opposite ends of a spectrum with respect to the underlying autonomous network topology: Jami uses a fundamentally linear network, while GNUnet uses a completely ad-hoc network. Typically a distributed hash table is implemented on top of these networks to provide logarithmic-time look-up, e.g. a Kademlia protocol variant.
Here we develop an intermediate type of network: using a global fractal topology the network demands small and constant resource from each node, and has intrinsic logarithmic look-up time without need for another network layer. The upshot is a low-level network layer (sits on top of TCP in the network stack) which makes implementation of modern higher layers, functions and applications such as those mentioned above much simpler.
Points to note:
In general, a network of splat size S (a hard, pre-defined network parameter) containing N nodes (variable, unbounded) will have a fractal depth D=⎡lnSN⎤, longest path (time for discovery) 2D-1 = ⎣(N-1)lnS2⎦, and every node in the network would need resources to track exactly S other nodes (independent of N).
For example,
The main selling-point for the new protocol is that higher-level protocols are much easier to implement directly on top of Splat, without adding more layers of complexity. For example
This can be implemented directly within the topology, instead of needing another layer, e.g. Kademlia.
There are many routes equal to the minimum length between any two nodes in the network, so packet streams can be broken across paths and mingled more randomly with packets of other streams, without increasing path lengths.
Most nodes will be connected to S other nodes, so if one goes missing there will still be enough links in the network for the network to sustain itself, possibly after some self-reconfiguration.
The project is destined to produce three outcomes
This has not been started. Work will begin when the developments outlined below are in a much more advanced state.
A version which can build-out (but not collapse-in) a splat network is available (soon in the GIT repository). It is implemented in Rust.
The next stages are
The animation above is the result of the current effort. It is implemented in Rust, but not currently in a state suitable for general release.
The next stages are
This will appear here once work commences on this part of the project.
This is currently work in progress.
this work is licensed under CC BY-SA 4.0