Apparently, our recent articles have caused a bit of a stir. It’s been gratifying to see so many folks commenting and weighing in on what we have planned, and the metaverse in general.. One thing that’s really struck me is the enthusiasm for the reinvention of online world technology. Whether a particular commenter is focused on decentralization, player ownership, or user creativity, there’s clearly a lot of interest in new ways of doing things.

How Virtual Worlds Work1: Clients, servers, and art2: Maps 3: Object templates and instances4: Object behaviors5: Ownership

In my experience, whenever we are exploring new ways to approach old concepts, it’s important to look backwards at the ways things have been done before. A lot of these dreams aren’t new, after all. They’ve been around since the early days of online worlds. So why is it that some of them, such as decentralization, haven’t come to pass already?

The answer lies in the nitty gritty details of actual implementation. A lot of big dreams crash and burn when they meet reality – and some of our most cherished hopes for virtual worlds have pretty big technical barriers.

That’s why I am writing about how virtual worlds work today, so it’s easier to have these conversations, and all reach for those dreams together. And I’m going to try to do it with minimal technical jargon, so everyone can follow along.

This is a big topic, so today we’ll confine ourselves to just one part of the virtual world picture: what you, as the user, see.

Clients over here, servers over there

Let’s start with the simplest picture that most people have of a virtual world. You have a client over here, running on a local computer of some sort. And somewhere out in the Internet, there is a server.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/465c487c-49ce-4df5-9cf9-6d4496cf8e72/diagram-1.jpg

Diagram one: the client and the server

This picture is deeply misleading. It gives the impression there’s a nice clean divide between these two things, when that isn’t the case at all. Everything is always more complicated than you think.

You would think that a client simply displays whatever’s happening on the server side. And once upon a time, that was true: back in the text days, the server actually sent the text over the wire, and the client just plastered it on your screen. It’s similar to Stadia or Netflix today: the server sends pixels over the wire, and the client just plasters them on your screen.

But virtual worlds haven’t worked that way for a long time now.

Instead, when you get a game client, it actually comes with all the art. The client is just told which piece of art to draw where. This dates back to when we couldn’t send art over the wire because it was just too big. (Of course, these days, you have, on average, around 2500 times more bandwidth than we did back when we made Ultima Online.)

So let’s update the earlier diagram. It’s really more like this:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d34ef035-c67f-43fd-b685-827a36cf4625/diagram-2.jpg

Diagram 2: Client has data, gets updates, and draws

But it doesn’t have to work that way. Pieces of art are all just data. And something we should bear in mind as we keep going through this article (and the upcoming ones in this series), is that you can always pull data out of a box in the diagram, and once you do, it can live somewhere else.

For example, when you connect to a webpage, the art data needed to draw logos and photos and background images isn’t baked into your browser. It’s on a server too. The client gets told “draw this item!” and instead of loading it off your local hard drive, it loads it over the wire (and saves a local copy so it’s faster next time).

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2ea9ada0-af36-490f-8c8d-068bcf5111ed/diagram-3.jpg