Messiah is a proof-of-concept application for Calvin, a distributed
trust system. For more about Messiah, click
here.
File sharing can be broken into two problems:
- Identifying the file a user wants to download. This requires
mapping some end-user-visible key to a machine-relevant value such
as a content hash.
- Distributing this file to the user's machine.
Freenet solves the second problem directly and provides two primitives
that can be used to solve the first problem. One primitive allows
anyone to set the value for a key (KSK). This leads to anarchy,
because anyone can alter the key->value mapping. To avoid this
anarchy, Freenet allows any individual user to become the authority
for a given key->value mapping (SSK). This leads to a world of many
small dictatorships.
What Freenet does not provide is a primitive that makes it easy for
users to arrive at a value collaboratively. We believe that this
primitive is essential in order to advance the state of file sharing.
To implement this primitive we designed a system with the follow
characteristics:
- Fully distributed: Calvin works with any freenet-style p2p
system. Calvin provides the same levels of cryptography, scalability
and anonymity as the underlying transport.
- Proactive agent. Calvin works automatically to build and improve
your file collection.
- Incorporates user feedback. Calvin uses your ratings and your
friends' ratings to fetch higher quality files and eliminate
garbage.
Applications built with Calvin use this collaborative key->value
mapping primitive to find the highest-quality data for a given key
available in the network.
The algorithm at the heart of Calvin is useful for applications which
map an end-user-visible concept of an "asset" to a content-addressible
"resource". Music sharing, for example, is particularly
straightfoward: the asset is an id in the FreeDB music categorization
system. The resource is the Freenet content hash key (CHK) of some
encoding of that music.
In addition to music sharing, Calvin has wide applicability to other
problems where collective resource categorization is desirable:
- web caching. maps URL assets to MIME-encoded resources. using
Freenet, this can help prevent web pages from becoming unavailable due
to server overload, censorship or natural disaster.
- Slashdot-style weblog. asset -> resource mappings can be hierarchical; in this
system, topics, articles, and comments all participate as assets
and resources.
- distributed web page annotation