Homepage
PeerBook is a new form of social network.
The system has three main goals:
- To emulate Facebook functionality
- To be constructed in a completely decentralised fashion
- To ensure that the user has sole control over who has access to his or her personal data
The basic idea is this: A user downloads a small (Java) program, runs it, and then has access via their web browser to a local web server acting as a gateway onto the PeerBook network. Once they’ve created a profile in much the same way as they would on Facebook, the profile is encrypted and then stored on the distributed storage network made up of all currently-online PeerBook instances.
All data is replicated to ensure that it is still available even if several copies are deleted, or if the PeerBook instance storing that copy goes offline. If this does happen, the network ‘heals’ itself – the file is copied to a new replica server(s).
A much easier approach would be to have the user store their own data locally on their own machine (I *believe* this is the approach proposed by the Diaspora project, but it is hard to be sure from what they have written). However, this means that the storage device must stay connected to the internet all the time in order for the user’s friends to view the user’s profile or post on their Wall. It might also mean that the user would have to keep the device physically on their person in case they ever wanted to log into the network from somewhere other than their home.
So far the system supports: Wall posting, personal information storage in profiles, friend addition/removal, and private message communication.
I plan to spend the summer of 2010 redesigning some of the system to support other core Facebook functionality – image storage, groups, events, etc. I also want to provide a PeerBook API to third-party developers so that it could eventually be as extensible as Facebook is now.
Although Java is a solid language will this not limit the ability to have collaberative developers in the future. Would a language like C# not give you more flexibility (and dare one say it longevity)?
Sounds like an interesting concept. I’d like to get involved in some way with this project so if you need anything let me know.
Sweeeeeeeeeeeeeet.
Hi,
Will this use functionality available in jabber perhaps? I think there is avahi.org as well.
Anyway, good idea. Best of luck.
Well I think you’re working on a good idea, but isn’t diaspora really what you want your idea to be? Yes, they’re vague about exact implementations, because they’ve only just got started; you could probably provide real useful help by collaborating with them.
Looks interesting. Let me know when I can start using it.
hi!
i would like to try your program but I canĀ“t find the “download” button
Personal data store is the way to go.
You need to abstract the storage from the wider system.
Not sure it needs to be always on, or not … both are viable options … leading to slightly different workflows (push vs pull vs notify)
Some great notes here: http://www.w3.org/DesignIssues/CloudStorage.html
So it’s a kind of freenet type thing with social networking bolted on?
How will it handle propagating changes to profile data throughout the network?
For example, I’m assuming when you want to view a friend’s profile it finds the nearest publically available node and requests the profile from it (if not found, it’ll then iterate through that node’s neighbours, and that node’s neighbour’s neighbours until it’s found it).
When it finally finds the friend’s profile data, how will it know it’s the most recent version? Would it have to keep searching until it’s found multiple instances of profile and compare the dates or content? Or will it just grab the first found instance and assume it’s most recent? How do you verify it’s actually valid data and not faked?
Would love to hear your ideas.
Hi all – I am Ben Birt, the PeerBook developer. Thank you very much for showing interest in my project! I will try to respond to your comments as best I can -
DaveK: I did actually email the Diaspora team, explaining that I had already produced an implementation of a p2p social network. They didn’t respond.
rafa: I have as yet not decided to release the first implementation of the PeerBook project – this may happen in the future, however it would only ever be used as a reference; there are issues I discovered during implementation that I intend to fix with the design of the next version.
Melvin Carvalho: I would agree except that then the user must keep their personal data store available at all times (otherwise their profile data would be unavailable to friends when the store was turned off). The way I have designed the system means that all data is available at all times by moving it around the currently online PeerBook instances, using encryption to provide data security.
Will: Yes, I suppose it could be described as that. Firstly, let me explain the difference between structured and unstructured p2p networks. An unstructured p2p network is something like Gnutella, in which a search isn’t always guaranteed to find a result (but usually uses the ‘flooding’ search technique that you describe). A structured p2p network is one in which a lookup of a data object will always find that object (as long as it existed in the first place). This is done through some well-defined rule. PeerBook uses as its underlying p2p layer a structured p2p protocol called Chord ( http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29 ), which provides lookup functionality that takes a maximum of log N hops (movements across the network), where N is the number of nodes in the network (for computer scientists this is O(log n) lookup). Secondly, regarding finding the correct version of a profile, I envisage keeping a high degree of consistency across replicas of each profile so that at any one time each profile is the most recent copy. Finally, your question about data verification is very interesting. There are two facets to this verification. The first is that the PeerBook protocol uses a Byzantine fault-tolerance scheme ( http://en.wikipedia.org/wiki/Byzantine_fault_tolerance ). This essentially means that the system can handle some number of malicious nodes attempting to fake data by using a voting system. The second facet of verification is that each piece of data is signed with the profile owner’s private key – if the signature does not match the data, it is clearly faked.
I hope I have answered (most) of your questions satisfactorily – if anyone has any more, or if I have not explained myself correctly, please don’t hesitate to ask away.
Ben
This was actually done before but it wasn’t web based. It was called Grouper. Users would create groups. Each group would have a limit on members. Inside this group the users would be allowed to share files between themselves. This program was great and did work (blog about peerbook said something like this had never been successful). The good thing about Grouper was the limit on members, it made it more personal, people had to work to stay in the group and this usually meant sharing a certain amount.
Apparently (don’t quote me) because Grouper streamed music off someone else’s computer it wasn’t illegal. I’m guessing it’s like listening to your friends music through their stereo.
Grouper was bought by Sony, who changed the name to Crackle and converted it to some video website, which failed. So Grouper is no more.
I hope you can take some features from Grouper as it was an excellent idea. And if you do, DON’T SELL TO SONY.
Thanks
Mmm well thanks for deleting my comment. I think I had some useful ideas there, but kids will be kids I guess.
Prompt failings
@Peter
Sorry Peter, comments must first be approved by an Admin. This should probably be made clearer on the comment form.
Ben, have you seen this announcement : http://status.net/2010/06/28/federated-social-web-summit-2010-announced ?
I think that your project should be compatible with other incoming decentralized solutions to be another alternative. Everyone will be allowed to choose his preferred tool to access his social network. A great era is coming ^^
@jp.fox
I hadn’t heard about that, it seems pretty cool! I am designing the next version of PeerBook so that it will have a fairly rich API allowing arbitrary plugins to allow this kind of interconnection with other social networks – some of which I hope to write myself. Obviously the security model of the other social network would have to be considered when creating such a plugin, but as long as the end-user is made aware of what they are doing it should work very well.