Dist.ribut.us lite
Rather than full p2p, a system for distributing trust between federated servers. It fails many of the goals of the full dist.ribut.us design, most notably meta-data protection via onion routing. But it is much easier to build and could provide the necessary foundation to build the full system.
Federation Problem
In a federated server system, individual servers can gain power over the whole system. To prevent this, the rules need to be enforced and users should not be associated with an individual server.
Design
Gateway
A gateway is a service that talks to many servers to make sure the system is honest. Gateway software should be light weight and simple enough that a moderately sophisticated user can setup their own gateway. It handles the eigentrust calculation (or maybe just validates it) and handles the web-of-trust issues.
Server
The servers hold data and facilitate connections. Most communication is user-to-user over WebRTC.
Storage
Data is a simple Key/Value store. Though it's a little more than that because the key needs to have enough data to locate a server, a database and a bucket.
I need a way to swap out the backing medium. In some cases Bolt will be easiest, in others, blob services like S3 will be better.
Static
A resource where the key is the hash of the data.
Permissions
Permissions are placed on a bucket. UserIDs are written to the bucket with a permissions level. Data is written key/val. Both are prefixed with a header byte.
Services and Applications
A service run on a server, an application runs on a client. As much logic should be pushed to the application level as possible. Services and applications must be open source.
Client Binary
The client binary is an application intended to run on the client system. It allows protected access to the clipboard, file system and other resources generally protected from a browser. It also runs an instance of a gateway.
I can get a version of this running on desktops easily, mobile is a bit more tricky. Android should not be a stretch, but other mobile platforms may be a challenge.
Users
A user is a signing key at it's heart. Finding a usability pattern for this is going to be tricky.
Communication Security
TLS isn't going to fully cover this because many users will be running small personal servers off non-fixed IP addresses.
Community
Censure
Servers can censure each other, which is used in an eigentrust pattern. Gateways keep a log of the servers they trust and update them as that trust changes.
Open Source
All applications and services must be open source. A server running closed source or modified code should be censured by the community
Forgetful
Services should not spy on users, should not retain any information other than that requested by the user.
Profits
User based advertising is strictly forbidden. It is acceptable to run either blind or contextual advertising. Blind advertising being a rotation of advertisements that do not take the user into account at all. Contextual advertising being based on the current context, but with no individual data being taken into account at all. For instance, when a user performs a search, the server can choose to display an advertisement based on the search terms. Or if a user is viewing an image with meta data, advertising based on the meta data is acceptable. But the association between the user and the context must be ephemeral.
Better would be for users to pay for access to federated servers. This is a divergence from the norm, but perhaps with mom-and-pop servers where the users actually know the administrators, this could be established.
Personal Setup
RasPi
I should get a version built that can be setup on a RasPi easily. A 1TB external drive is cheap.
AWS
I should offer an image
Target Applications
Chat
This is the 'hello world' of distributed applications. Establish a chat log and allow users to append to it based on cryptographic permissions.
Ha! this is actually a good use for a sort-of-blockchain. The head of a chat contains the most recent additions and a block reference. When the chat gets too long, the history is written to a static block.
It may make sense to write the block in 2 parts, a header and the data. The header contains the 'next' link, time span and a bloom filter for words in the text.
Chat can also do a direct file send over webRTC.
File Sync
Allow users to sync their files between devices. This is a bit more complex and requires the client binary.
Speakeasy
A basic social network.
- Posts
- Direct Messaging
- Media uploads
Media Player
Designed for personal use. User puts their media files on something like a RasPi drive and they can stream the media. A per-user record