[MUD-Dev] distributed objects

F. Randall Farmer randy at communities.com
Mon Feb 14 10:33:13 New Zealand Daylight Time 2000

Hey! Something I know something about! :-) I'm going to be terse in my reply,
based on the senior level of postings to this list. If I'm being TOO terse
for this audience, just let me know and I'll explain in more detail.

At 04:09 PM 2/14/00 +1100, Kevin Littlejohn wrote:
>Hey all,

>Ok, we were discussing the other day the whole 'objects interrelating' thing.
>My original thought was that each object was an entity unto itself - the "pure"
>object view, where nothing is changed in an object except by asking the
>object to change it, and each object itself is master of it's own domain.
>Interestingly enough, that's the first precept of the writings at
>www.erights.org, regarding caps systems over distributed objects.

Since E was originally developed by Electric Communities/Communities.com as
the core of our distributed object system, it shouldn't be a surprise that
this topic is of great interest. :-)

>Phil's comment on that was that it's impossible to construct a decent fight
>system, for instance, under that setup, because you can never guarantee that
>an object has actually decremented it's hit points when it's been asked to.

That depends on what you mean by "guarantee." How about a warrantee?

What you need is a contract. :-)

The damageable object provides a contract that it will apply damage
appropriately according to some "convention" agreed to in the contract.

There are two interesting forms of warrantee, either context-verified
"Aren't you supposed to be dead? Get lost!" or third party
"inspection" warrantee (signed component.)

I like the latter for distributed objects. You
just include signed code for "AD&D addition 4 combat library, v3.05 signed
by EGG Systems, Ltd" into your object and then you can use it on
battle-server contexts accepting those certificates.

>The solution he had to this was a 'mediator' setup, tied into the caps system,
>which I kinda like.  Basically as follows:

>...[A capability exchange system consisting of "keys" described...]..

>How would you guarantee that a remote object is behaving the way it claims
>to be behaving?

You can't, but does it matter? The degenerate case is that a remote
system _goes off the net_ and therefore can't fulfill it's contracts.
Objects must be coded to deal with this eventuality. [It's not as hard
as it seems.]

But, I know what you are thinking about: Cheating. Read on...

>does that mean that multi-user games are ever and anon going to have
>to store all data server-side, and perform all manipulations there likewise?

In a system of interacting distributed objects, each object is trusted
to hold only the state that the object can be trusted with. (Huh?)

If you can't trust remotely hosted Armor objects or Bodies with their
own hit-points, don't trust them! Keep that in the World or somewhere
else. Perhaps with a universal hit point registry. Wherever.
You probably CAN trust a remotely hosted Body to keep it's own
Name, Image, Macros, etc.

Last year Communities.com built and alpha tested a 100% distributed
3D graphical object system which had signed resources (media, behavior)
where each participant used "Agency" software which was both client
and server at the same time. The avatar for the user was locally
hosted and you (via URL) could visit another persons locally hosted
"turf". Objects carried had their resources validated upon arrival
according to certification requirements set by the turf owner/host.
Though it was not combat oriented, that test demonstrated that such
a system is workable and has the desired properties.

There were some problems with the prototype, though. The nastiest
one was connections: You've got 12 people all "hosting" their own
objects. That means 12 connections for each person, one each to the
other folks. We worked out an alternative approach, but you can see
what taking a naive approach can lead to. :-)

Ask yourself this question: What happens if I leave a VASE that I
host at your TURF, which you host. Then I take my machine off-line.
[This is a puzzle for the readership. There are several answers.]

>One alternative would be to enforce the keys thing above by migrating
>object data to the server where the object relinquishes control over it - so
>in the degenerate case, all objects carry their own data, but when they
>choose to participate in a context, they relinquish control of their data
>not only by handing the keys over, but by handing the data over as well.

YUCK! Don't go there! :-)

Where you are using "keys", most people I know use the word "capabilities." :-)


F. Randall Farmer                "Home pages are passe', everybody's
Communities.com                  building a palace" - Time Magazine
Cofounder and VP Services        http://www.communities.com
randy at communities.com            

MUD-Dev maillist  -  MUD-Dev at kanga.nu

More information about the MUD-Dev mailing list