This is a followup to Invert the Web where I wrote:
Today I go to a web site and give it some output of my brain. The web site takes my content and in exchange it gives me a URL so I and other people can get to the content again. What should happen instead is that I make some content and give that URL to some websites so they can get to the content.
In typical me fashion that wasn’t very clear. Here I shall try to make parts of it more clear and other parts more muddy. Let’s expand the above.
Today when I publish a photo or make a tweet the mechanism goes something like this:
- I suck the photo off my camera, do whatever tweaking I like to it, and then upload a copy of it to some photo site (e.g. Flickr). My photo then gets a URL somewhere in Flickr’s URLspace and I can tell people about that URL, or people can browse Flickr and stumble upon my photo. If things go my way and I play the game right, the photo might even show up on Explore.
- I go to http://twitter.com/ or use an app like Twitterrific and type up my tweet. The content is transmitted to and stored on Twitter’s servers and gets a permalink in their URLspace.
What I would prefer is something like this, where the URL becomes a more Universal Resource Locator:
- I suck the photo off the camera and store it in my own personal URLspace, getting a URL that links to the content. I then give that URL to Flickr and whatever other services provide a nice URI for browsing photos. People can still browser Flickr and stumble upon my photo and the photo may still show up in Explore. And lots of other places too.
- I write my tweet and store it in my own personal URLspace. I use the returned URL and give it to Twitter, Pownce, Jaiku, Facebook, MySpace, iChat and a variety of other “status” related services.
At this stage of the conversation the first objection is usually, “Not everyone can host their own content.” Indeed this is true. It’s also true, though, that not everyone keeps all their money in their wallet, under the mattress or in a mason jar in a hole in the back yard. They use banks. And those banks provide a variety of services to provide incentives for people to deposit their money with them. So we could have banks for content.
Another objection is “I don’t want to do that two step publishing dance just to get something on Flickr.” Me neither, that’s why we have computers to automate the parts of processes which are fully describable. POSTting something in the content bank and then PUTting the returned URL to Flickr is fully describable.
Why would you want a bank for content? What would the benefits be?
- All content remains yours, held in trust by the bank, forever.
- If a presentation service goes out of business, your risk or loss is more manageable.
- Any publication of content can be immediately rescinded by changing access policies on the URL (modulo whatever caching policies you’ve chosen).
- You can (in theory) have access policies or capabilities statements on all your URLs.
- Anything which can be captured by a MIME type can be stored in the bank.
- You can host your own bank if you want: It’s just HTTP.
- You can publish your content to multiple places by reference instead of copy. When you make changes, you don’t need to worry about going round to several different presentation services.
- You have the option of maintaining several content accounts for all your various internet personas.
- Banks could differentiate themselves by providing different levels of service: different ways of managing access control, service level agreements, data sharding and redundancy. Some people might opt for free content accounts in exchange for allowing some or all of their content to be anonymously mined for targeted advertising purposes or market research.
- A suitably well featured bank could provide persistent and versioned storage for all your stuff, ever. Kind of like a github for everything, not just code.
And what about places like Flickr or Twitter, what we might call presentation services? What could they gain?
- They don’t need to worry about storage quite as much.
- They can concentrate specifically on the UI of their service, distinguishing themselves through innovations in that area.
These ideas are the latest synthesis of a variety of things which have proven to be important on the internet:
- Separation of concerns. The presentation services worry about presentation and banks worry about storage.
- Cool URIs.
- Data ownership and portability. It’s always yours.
- MIME. Lots of different types of content.
- Stupid Network. Put the smarts where the smarts need to be and nowhere else.
- The awesomeness of REST, or more accurately HTTP, and the open web it/they allow.
- Using content by reference rather than copy (c.f. Xanadu, Transclusion, Purple Numbers).
It would probably be possible to prototype a content bank in TiddlyWeb or CouchDB or some kind of interface to S3. My own first work related to such things was closet from which TiddlyWeb got a few ideas.