An Open Implementation of Facebook
12 Oct 2007
Two problems widespread on today’s internet:
- Content: How do I get my stuff online for others to see and react to
- Relations: How do I keep track of friends and what they’re up to
The first problem is recently solved to some extent by the array of sites like Flickr, Youtube and Digg. It used to be you created a website and put your content there, but easy tools for the masses where missing.
Second problem has been attempted solved many times in small steps. Regular links, RSS feeds, blog comments, trackbacks and profile pages are ways to keep track of friend updates. Now Facebook attempts to solve both problems by providing storage for many types of content and a simple system for notifying friends of updates. I am hard pressed to see how social sites is really anything more than a dynamic set of good old-fashioned hyperlinks, though the dynamic aspect is a crucial one! What Facebook does well is provide developers with the network and the tools for distributing their content.
The problem with most of these approaches is that you loose control. Regardless of how open these sites are with APIs and whatnot, the fact remains that they take (or even delegate) control of your content, your relations to other people or both (I should mention Google here as well, they store quite a lot of information about you). This is not a satisfying long term solution and I would like to propose is a solution whereby the user stays in control of both content and relations.
The solution is based on existing standards where possible and centers on the idea of building basic versions of the current content storage sites, hosted and controlled by the user. On top of that is an API for controlling who can se what and when and logic is added to allow for updates to propagate through to connected people (similarly to rss feeds and trackbacks). In effect it would be an open source, distributed social network with content (dynamic hyperlinks in a way). It would need to be open source to be truly trustworthy and distributed for users to keep control of content.
In short, you get all the benefits of today’s solutions but regain control:
- You own the domain name and choose the hosting provider.
- Content is placed with someone you trust (possibly even your own server), not some arbitrary website your friends signed up with.
- You decide who can see what and when.
- You’re always up to date on your network as updates to their content propagates to your server.
The idea is to build a content management system without the presentation layer, an open backend for other systems to interact with. Looking at the relational aspect first, the backend would provide means for interacting with people (and other sites). It could revolve around the well known address book.
- I get a url from a friend for connecting with him, I’d enter it into the module for storing contacts.
- The backend sends a request to connect to the url entered, possibly with information on what kinds of data I’m interested in.
- My friend selects which data he wants to share with me (basic contact info, photos, other content, etc.)
- For notifications, one of two approaches seems appropriate:
- Whenever my friend updates content a ping is sent to each interested relation to be displayed.
- When I visit my relations page, my backend sends a request for updated information.
The updates are available as summaries with links to the relevant urls on my friend’s server. He stays in control.
As for searching and aggregating this type of content, the situation is possibly better than what we have today. Firstly, anything visible on a webpage will be indexed by the search engines just like the world is today. The system will provide a mechanism similar to the management of personal relations for handling exchange of data with other types of sites. A video site can be granted access to my videos for as long as I choose to use it. I could then be notified of activity on that site through the backend system itself or by usual email.
There are obvious, non-trivial problems with this system in terms of authorization and authentication but I hardly believe they are worse than with existing sites! Using OpenID could be part of the answer.
If any such system is to gain widespread usage, a plugin system is needed. This would primarily be to expand on the kinds of content that can be handled, secondarily how it is presented (presentation should ideally be left to another system).
Ease of Use
A major obstacle for any new technology is that the majority of potential users will find it difficult to use. It takes time to get used to new ideas. Using a computer, setting up a server, browsing the internet, all this certainly has become easier over the last 15 years but it is only recent millions of people began blogging, uploading photos and socialize online.
The proposed solution, however, is not very different from what people have come to expect from online services and it is very much possible for hosting companies to offer the system pre-configured. The important part is choice, not putting all your eggs in one (someone else’s) basket.
The above looks very much like what the Facebook Platform provides, but without being trapped in their walled garden. There’s a future in building on the outside. If nothing else, this idea sprang from the explosion in collaborative thoughts on the web and, particularly, my aversion against Facebook.