<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Sea of Memes</title>
<link>http://sea-of-memes.net/index.html</link>
<description>Sea of Memes</description>
<dc:language>en-us</dc:language>
<dc:creator>mgoodfel@free-the-memes.net</dc:creator>
<admin:errorReportsTo rdf:resource="mailto:bugs@free-the-memes.net"/>
<sy:updatePeriod>daily</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2005-01-01T12:00+00:00</sy:updateBase>
<dc:rights>Copyright 2005</dc:rights>
<dc:date>2007-10-26T10:18:31-07:00</dc:date>
<item>
<dc:date>2007-10-25T17:25:00-07:00</dc:date>
<title></title>
<dc:subject></dc:subject>
<guid isPermaLink="true">http://sea-of-memes.net/blogArchive/2007-Oct.html#2007-10-25-05-25</guid>
<link>http://sea-of-memes.net/blogArchive/2007-Oct.html#2007-10-25-05-25</link>
<description>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...</description><content:encoded><![CDATA[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....

]]></content:encoded>
</item>
<item>
<dc:date>2007-10-22T00:15:00-07:00</dc:date>
<title></title>
<dc:subject></dc:subject>
<guid isPermaLink="true">http://sea-of-memes.net/blogArchive/2007-Oct.html#2007-10-22-12-15</guid>
<link>http://sea-of-memes.net/blogArchive/2007-Oct.html#2007-10-22-12-15</link>
<description>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...</description><content:encoded><![CDATA[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.
<p>
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:
<ul>
<li>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.
<p>
<li>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".
<p>
<li>
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.
<p>
<li>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.
</ul>
<p>
Written inside the VM, there needs to be a <i>shared-object database</i>.  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 <i>plenum</i>.  I like the first definition 
<a href="http://en.wiktionary.org/wiki/plenum">here</a>, 
"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.

<p>
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.
<p>
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 <i>aether</i>, taking the 
third definition <a href="http://en.wiktionary.org/wiki/aether">here</a>, 
"An elastic substance once thought to fill all space, and to allow for the transmission of light."
<p>
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 <i>nadir</i>.  I'll have to see
how that sits with me as I go.  I'm not sure I like it.
<p>

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 <i>figment</i>.  (Although browsing the thesaurus, I see "firmament" and "welkin",
which look interesting.)
<p>
I guess I can stand to call a character in the world
an <i>avatar</i>, 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.
<p>
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 <a href="http://sea-of-memes.net/bsp/downloads/index.html">downloads</a> section.
<p>
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.  
<p>
I will have to think some more about that.

]]></content:encoded>
</item>
<item>
<dc:date>2007-09-29T22:25:00-07:00</dc:date>
<title></title>
<dc:subject></dc:subject>
<guid isPermaLink="true">http://sea-of-memes.net/blogArchive/2007-Sep.html#2007-09-29-10-25</guid>
<link>http://sea-of-memes.net/blogArchive/2007-Sep.html#2007-09-29-10-25</link>
<description>For practically my entire programming career, since the first time I played with a computer
in 1971, I have been fascinated by computer games and...</description><content:encoded><![CDATA[For practically my entire programming career, since the first time I played with a computer
in 1971, I have been fascinated by computer games and computer graphics.  Unfortunately, I've
never been involved with a commercial project that involved either.  At various times when I haven't had a job, I've taken stabs at doing something in that direction.  And every time, 
after a few months, having only scratched the surface, I put it away again as an impractical 
waste of time.
<p>
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....
<p>
So what do I want to do?
<p>
Start with a virtual shared world like <a href="http://secondlife.com/">Second Life.</a>  The
key thing for me is that users can add their own content, and nearly all of the world has
been built by users.
<p>
However, I'd like to make the infrastructure peer-to-peer, so that it scales without adding
additional central servers.
<p>
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.
<p>
Adding voice support would be nice.
<p>
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.
<p>
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.
<p>
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.
<p>
The <a href="http://sea-of-memes.net/bsp/downloads/index.html">Downloads</a> 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.


]]></content:encoded>
</item>
</channel>
</rss>
