The Capability Concept and its Ilk

There is a cluster of concepts that have attracted “capability” to describe them. There may be some useful ones as well as the original and I will explore some of these variants.

Historically a capability was a hardware or software construct that named and conveyed authority to access some resource known to the hardware or software system. Software capability systems have had a hardware flavor in the sense that their function was much like hardware could have provided. Most of the Keykos kernel could have slipped easily into microcode.

Henry Levy, in his book Capability-Based Computer Systems, treats the history of hardware based systems back to the 1959 Rice Code-word computer.

Here are a few characteristics of capabilities that might be independent:
  1. Holder can invoke the capability.
  2. Holder can pass on the capability.
  3. Bits are concealed from holder.
  4. Knowing bits does not suffice to pass or invoke.
  5. Capability identifies a unique object.
  6. Capability conveys authority to object.
  7. Capability is only way to send message.
  8. Capability is only way to have any effect.
  9. The capability to an object is necessary and sufficient to access the object.
  10. Capability is only way to “sense the world”.
  11. A program passes or invokes a capability only by explicitly identifying it. (Each program has its own name space for capabilities.)