Sea of Memes Archive
October 2007

Newest First ... Oldest FirstSeptember ...

5:25pm Thursday October 25, 2007 (link)

I've decided to call the virtual world "Sea of Memes", to go along with my personal blog, "Free The Memes." So I've revised all the headings and references in the blog below. It's no longer called "The Big Stupid Project", except in the URL's....

12:15am Monday October 22, 2007 (link)

The Sea of Memes will be a shared world where people can create new artwork, including landscapes, rooms and objects in shared world; and write software, ranging from behavior for objects and games, up to and including general purpose application software. The initial audience would be programmers who want a shared working environment, especially for the development of games.

The base layer of the Sea of Memes is a virtual machine (VM). All the higher layers will be code executing inside the VM. So will all the user-written code attached to objects in the shared world. And so will any application programs developed inside the shared world. This puts several requirements on the VM:

  • The VM should be very lean. There will be thousands of instances of the VM running at a time -- instances for each object in the shared world, as well as for any application programs. Since all of the virtual world will be implemented inside the VM, it also needs to be very efficient.

  • The VM instruction set should be very low-level and simple. First, it needs to be possible for standard programming tools such as the GNU compiler to target the VM. This would allow all the open source applications to run in the world. Second, the VM needs to be secure. The simpler the instruction set, the easier it will be to prove the implementation secure. It should be impossible for programs to break out of the VM and run native code. Call this "instruction set security".

  • The VM has to prevent viruses and malware from being written in the world. In addition to instruction set security, access to system services by programs running in the VM has to be controlled. For example, if code running in the world can read and write files in the underlying OS, a virus could be written that attacked the OS of a user running the Sea of Memes world.

  • Finally, it should be possible to implement the VM on multiple operating systems and processors. None of the code running in the VM should be OS-specific.

Written inside the VM, there needs to be a shared-object database. This will allow higher levels to publish objects for the shared world, and allow the shared world client to find all the graphics it needs to display. Since there's no central server, this will be some sort of peer to peer object caching mechanism. Since the word "object" is seriously overused in this context (a 3-d graphical "object", an item in the shared-"object" database, and a programming "object"), let's give this a name. The peer-to-peer shared-object database is called the plenum. I like the first definition here, "A space that is completely filled with matter". It's also used for cabling and airspace, but I suppose that could connote connectivity, which is OK.

The Sea of Memes client starts by displaying some "world" object, which is fetched from the plenum. That "world" object then references other shared objects which contain the landscape, rooms, characters, etc.., also fetched from the plenum. Characters have their appearance defined by plenum objects, and are controlled by the various clients running on machines around the internet. The plenum would also contain any data shared by users, as in software projects, images, music, documents, etc.

Communication between clients consists of text chat, voice chat, and updates to the position and state of world objects, including your avatar. Communicating all this through the plenum would be too slow (it's intended for long-term storage of relatively static material), so we also have a peer to peer "chat" server that allows broadcast of instant updates. Call this the aether, taking the third definition here, "An elastic substance once thought to fill all space, and to allow for the transmission of light."

In keeping with these other names, I should probably name the VM. Since it's the lowest level of the system, I could call it the nadir. I'll have to see how that sits with me as I go. I'm not sure I like it.

On top of the plenum and aether, the 3D world client displays the shared world, lets you create and move a character within the world. Applications running inside the world include program development tools, 3d artwork tools, text and voice chat. I guess I need a name for the 3D world as well, since there are a lot of them out there now. MMOG, for "Massive Multiplayer Online Game" is the generic name, but a bit cumbersome. I think I'll call the shared world the figment. (Although browsing the thesaurus, I see "firmament" and "welkin", which look interesting.)

I guess I can stand to call a character in the world an avatar, although more people seem to use "char" or "toon." One of the times I stared on this project, I wanted to call them a "doppel", for the German "doppelganger", defined as "a ghostly double or counterpart of a living person". I doubt I can make that stick though.

During my last attempt at this, I wrote a partial virtual machine, then implemented a Java compiler on top of it. Rather than do anything general, I implemented builtin methods for creating graphics. I then messed around with some demos, written in my Java, running on the VM. Those demos are all packaged together as FTM Demo 2 in my downloads section.

I'm not sure what the right approach should be this time. There's a conflict between getting the architecture right, doing the least amount of implementation (since the project is huge), getting decent performance, and keeping up my interest level in the project. I also need something to show other people, if I want any feedback on this.

I will have to think some more about that.

Newest First ... Oldest FirstSeptember ...

    Home
Personal Blog
Email Me

Blog Archives

Overview
Downloads