Why do we distribute objects anyway? Bill Frantz (frantz@communities.com)
Tue, 27 Oct 1998 15:30:40 -0800

The question has been raised, why do we use distributed objects in place of defining an asynchronous message protocol and being done with it. Since E distributed objects are built on top of a asynchronous messaging protocol (IP), it is obvious that anything you can do in E you can do with asynchronous messages. I expect the answer to this question also applies to arguments about E's security, so I will try to think thru my fingers here.

Let's take a simple application. Alice has a dynamic variable on her machine. She wants to give Bob and Carol the privilege of reading the current value of that variable.

In E she gives each of them a sturdy reference to an different object on her machine which will return the current value of the variable when it is invoked, and she is done. (Each gets a separate object so they can be individually revoked.) Simplicity has the win for E here.

With async messages, she needs to define a protocol to read the value. She also needs to set up authentication so she doesn't let just anybody read the value. Assume she takes the approach of the E run time. She sets up an authenticated connection between herself and her callers (Bob and Carol). She makes a different big random number for each of them and gives one to Bob and another to Carol and tells them to authenticate their requests with that number.

Now Bob and Carol know that when they want to read Alice's variable, they first check that they are talking to Alice and the send a message that looks like:

<random-number> <read>

Alice will ensure that the random number is correct and return a message which looks like:

<current-value>

If Alice decides she no longer wants to make the current value available to Bob, but wants to continue to make it available to Carol, she has to revoke access.

In E, she had to plan ahead, and build a revoke operation into the object she gave Bob. If she didn't plan ahead, she has to hack her E runtime to do the same thing that she does in the async message case below.

In the async message case, Alice makes it so that the big number she gave to Bob is no longer recognized as authenticating a request for the current value. If she is feeling nice, she will return a "request rejected" response to Bob's request. If she is feeling more like the IETF, she will just ignore his request. The request rejected response is similar to the effect of a space bank delete object operation in KeyKOS.

It seems like E has saved Alice a bunch of detail work at the cost of having to build a specific "revoke" operation into her objects. She also gets the benefit of having others check the security of the protocol.

Have I missed anything?