There are perceptible variations on the elevator answer to “What is a Capability?”. Some of these are distinctions without a difference, some differences are real yet insignificant, and some are significant. We try here to examine some of these differences and show, in some cases, why they are insignificant.
A capability always resides within some capability system and its function can be described only within that system. Capability systems assume some combination of hardware and software that together provide the resources necessary for application code to carry out its plans. This includes denying to other applications within the same system the ability to interfere with those plans. Other technologies, such as actors, eschew hardware and ‘provided software’ but provide crypto protocols to provide similar remote cooperation along with protection from interference with plans.
I dismiss POSIX like ‘capabilities’ without further comment which are to specific to particular operations, but not to particular operands.
Other systems deny the existence of any permissions bits but achieve the same functionality by adding code to the behavior of any object to permissions naturally apply, that returns a weakened capability to the same object.
In Keykos there is a polymorphic order on any memory object capability to return a weaker capability to the same memory object. The data byte in a start key is often used as permissions bits by the code that defines the behavior of Keykos objects that are implements as domains. In systems where there is a visible permissions field there may be a minuscule amount of shared code to turn off permissions bits.
Visibility of permissions bits is an insignificant difference.
Other systems, such as Keykos, include kernel implemented capabilities which the kernel connives to delegate directly to the hardware. Attempts to sugar the facts so as to pretend that this is all message passing have not been entirely successful. As a result there it is possible to construct memory objects which have no rescindable version. The partial solution to this conundrum is not to construct such objects.
I see this is a slightly significant difference.
I think is a significant difference.
This is practically a very significant difference.
Depending on the applications, this may be significant.
This is a significant difference.