
|
Newest First ... Oldest First
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:
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.
Now I'm on disability due to my health and bored out of my mind. I'm going to take another stab at this. It's either that, or create another character on World of Warcraft.... So what do I want to do? Start with a virtual shared world like Second Life. The key thing for me is that users can add their own content, and nearly all of the world has been built by users. However, I'd like to make the infrastructure peer-to-peer, so that it scales without adding additional central servers. Adding new art in-world is key, but it's not really where I'd like to go. Second Life has a scripting language which players can use to define behavior of objects. I'd like to support a real programming language via a virtual machine. Players should be able to open a full range of applications and programming tools in world, and share development with other players. Adding voice support would be nice. Finally, there's the problem of viruses inside the world. If the world supports arbitrary programs, it has to do something about security, or else viruses could spread from objects to players, etc. and crash the world. I really regard the current model of computer security in Windows, Mac and Linux to be completely obsolete. I have some ideas along those lines that I want to explore. Doing little demo programs that try to prove my point about security would be useless. The current approach is just too entrenched for anyone to change it even if I had a brilliant example of how it should be done. However, each new environment creates an opportunity for new approaches. A shared world oriented around software development would be that opportunity. This is all of course impossible for one person, or even twenty. Perhaps I will find some variation or subset of the total project that's actually achievable. The Downloads page has a couple of programs written during my previous attempts. The Overview section is currently empty, but will have design notes as I proceed. |
|