Brainstorming

From Entuura

Jump to: navigation, search

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.
Community