Brainstorming
From Entuura
This is a very old document that helped form the priorities for the earliest prototype, and the foundation of the design:
What is the minimal need that the client specified?
"Send files from border to the core using GSM cell phones."
(unspoken, but to assume) "People other than the client are not allowed
to see the data. (Including the central server.)"
What are the underlying requirements/constraints:
Files in transit through the central server are encrypted
Transmission must accommodate disconnect.
Incremental updates to reduce bandwidth
9600 baud async today, expect better and better IP over time
(thus PPP today, be ready for broadband when it comes)
Local administration impossible, but limited local status observation
Remote administration possible.
What is the maximum stretched version of that?
Nodes can contribute to a shared file store that exists
among some subset of the nodes in the community. All
readers can also write.
Multiple apps can run over the same infrastructure
with access to secure forwarding.
What is the minimum we can implement now that does not prevent us from achieving the maximum?
Node/Community naming
PKI: signing, encryption
Point to point file delivery: sender tells center where it should arrive
A payload delivery service is basic to other required things:
cert distribution
over the air update
distributed object library
But building applications in this decentralized environment needs to be nearly as easy as building them on the web, at both ends of the spectrum from rich user interfaces to simple apps. If everybody who wants to build a P2P photo-sharing app has to figure out how to handle distributing version updates, distributed storage of photos, NAT traversal, decentralized naming, peer reputation management, and so on, most of them will just give up, and the other five will build web sites instead. So we need a platform, something like a web browser, that supports a universe of constantly-changing code written by a multitude of authors, which migrates to where it's being used, and simultaneously supports individual control over what version of the code is running on your system and no-hassle updating when someone else has a change you want; that replicates your data transparently to other machines so that you don't have a single point of failure, but without allowing the owners of those other machines to spy on you or corrupt your data; that runs programs in a high-level language; that supports conflicting updates to different replicas of the data and allows a human being to resolve the conflicts; and that makes it easy for you to share particular bits of your code or data with anyone, everyone, or no one. Maybe we could even start with a web browser and add the other stuff to it. If we don't build such a platform, we will eventually lose the advantages of free software, because we will use web services instead.
