Now, it's not very often that I write long posts on random internet topics, but this is today's exception, because there's something that's really been annoying me lately.
If you look at the Web, it seems to generally work quite well - it's only partially centralised, and most of that is at the networking layer rather than the actual HTTP layer, where there is no requirement to rely on any central third party. We've had the freedom to host and create for several years now, and it's done wonders for the Web, with what is quite possibly the most diverse thing in the history of humanity being easily accessible and easy to contribute to.
For years now, we've been hearing about how we're going to take the step from simple 2D web pages to the '3D web'. First there was the fantastic flop that was VRML; a combination of obscurity, inflexibility and speed meant it was neglected and used by only a select few sites. Since then, we've had the massive explosion in home bandwidth and thus MMO games, and perhaps the most interesting thing to emerge from all of this is Second Life.
For those of you who have been living under a rock for a few years now, Second Life is a rough equivalent of what many people predicted the "future internet" would look like. It's an interactive, open 3D world, with its own scripting language, fully customisable objects, and quite a few other things.
All in all, it sounds quite good. However, it does suffer from what I see as a few fundamental design flaws, the first and foremost being that it is a single, contiguous world. In other words, it emulates the real world (in perhaps a similar vein to Stephenson's Metaverse, although obviously they differ in other ways). My issue with this is that the real world doesn't translate so well to the internet environment (and also has several design flaws itself, but that's a discussion for another time).
One of the many consequences of this (apart from making server-spanning more difficult) is that there has to be some central system (in this case, Linden Labs) which manages everything, thus reducing the one key advantage of the internet: that anyone with a server can simply hook up and host.
Even Linden's open-sourcing of the client and server won't help this problem, and so I believe a different solution has to be found, one which is more sustainable, and internet-friendly. I feel the key is to nick those parts of the web that worked so well - there's no need to change them.
Firstly, get rid of the one solid virtual surface. Do what websites do, and split the 'virtual universe' into discrete spaces, each of which can be hosted on its own server. We can use URIs to identify these spaces - hostnames give the server, paths the particular world it hosts, and even anchors for specific points in the world. Obviously we wouldn't use HTTP, but using identifiers like "3d.aeracode.org/gallery" would both mean we could use existing infrastructure to locate servers (no need for another central registry) as well as play on users' familiarity with these types of addresses.
Then, steal hyperlinks. Since we already have a set of canonical identifiers, we can link people to other worlds; perhaps have objects you can click on, portals you can work on, or other similar analogous objects (perhaps even 'load point' like areas, where you're transparently moved to a different world).
Of course, to make all this work, we need some way to define worlds and objects within them. This is a matter best left up to discussion; whether to go for an easily-readable XML-ish format, or an efficient binary format (or perhaps gzipped XML), would take a bit of debating. Throw in a scripting language for interactivity as well - we can learn from LSL and JavaScript, both of which are good for different reasons.
This is not as easy as it may first sound, if you've not tried these sorts of issues before; unlike (most) websites and VRML, I'm proposing a system that users all interact with at once, within the same instance. Synchronisation issues, security issues, and similar obstacles all present themselves; in my previous attempt at a quick-and-dirty MMO engine I came across more obstacles than I can describe here. However, the game industry has been tacking these for years, and so they're not insurmountable.
We also have the issue of identity. The OpenID movement is a great example of what needs to be done here, although I don't feel it could just be used directly, as it's very much biased towards website services. Still, follow the same method of OpenID (and of my previous discussion) by using URIs as identifiers. Identity servers should also act as a kind of data and preferences store for the users, much like IMAP with email, so they can set their avatar/email/'bookmarks'/etc. only once and have it appear on whichever client they use.
Finally, there's the issue of 2D versus 3D. Everyone thinks that these sorts of environments should be 3D, and while that's certainly true for the vast majority of devices, there's something to be said about having a 2D world protocol as well, with the growing popularity of low-power devices like mobile phones, UMPCs, Internet Tablets, and general cheap, small hardware.
There are many more issues that can be tackled, and it's quite a massive thing. I have bits of code scattered over my code folders with ideas and half-hearted implementation attempts at all this (of course), and it's somewhat unlikely all this will ever come into fruition - but, hey, it's a nice idea. Perhaps one day I can do webworld designing alongside, or in lieu of, website designing...