Pre-postlude: I wrote the following when I could not understand why some thought that CPS was not the entire answer. Subsequently I talked with Chip who gave me an iron-clad reason. It takes a few minutes to sort of understand continuations but at least a day’s hard work to convince yourself that continuations are indeed a valid replacement for the call-return paradigm. Chip needs to explain capability propagation rules to those unfamiliar with CPS.
Regarding Chip Morningstar’s observations on the Granovetter Diagram and the common pattern of X calling Y in order to get from Y, a capability to Z. Chip observes that the initial conditions seem not to match the initial Granovetter pattern, nor any other of the commonly accepted patterns of how capabilities get around.
Prepositions: If is B is a capability to interact with b then in this note we say that “B is a capability for b.”. This avoids the confusing constructs such as “I send a capability to P to Q.”.
Adopting CPS (Continuation Passing Style), as Chip suggests, here is how I tell the story so as to conform to Granovetter’s insight:
Looking CloserIn Keykos Y is most likely a node (capability page) and the code defining its behavior is in the kernel and the call-return events are all one atomic operation; the continuation never actually exists. Generally X is not in a position to know that Y is a node however, merely that it behaves enough like a node.