I spent a bit of time reading about Capsicum which is Unix with certain additional capability functions.
I was surprised that they found some useful capability function to add to Unix and a feasible way to do it.
I think that the following is accurate:
- There are a small fixed number of object types, mostly objects that Unix already defines.
- There are parameterizable attenuation objects that may be had.
- All the behavior of objects is defined by code in the privileged kernel.
- User mode code can be confined to acting only via capabilities.
- Most extant Unix user mode code can not function under such constraints.
- Much extant Unix user mode code can be adapted to run that way, and without changing many of the system calls that have been redefined to invoke capabilities.
- Capabilities can be passed thru classic communications channels, just as file descriptors.
- Files and pipes are accessible as capabilities.
- I think capabilities cannot reside in directories, which seems anomalous.
The ‘file descriptors’ of Unix have always felt a little bit like capabilities and gradually became more so as Unix evolved.
They become much more like capabilities in Capsicum.
It seems to me like the most significant missing feature that is expected of capability platforms is the ability to define new sorts of objects whose defining code is not in the TCB of other programs.
Nonetheless Capsicum does seem to supplant the need for Google’s NaCl and this seems strategic.
Capsicum at Gituub
Watson’s Thesis,
Object-Verb vs. Verb-Object,
Kernel Sources,
notes on docs,
cap bugs
With new cap hardware
Ben Laurie refers to this as defining ‘rights’ in a Capsicum context.