# Notes on Mauthe et al, Usenix'26
## General
Doesn't mention several systems that clearly should be mentioned (all directly cite at least one of the 9 publications they use as the root of their graph). Specifically:
* KeyKOS: cites [58} & other Hydra paper, 171 cites according to GS
* Angel: cites [76]
* Mungi: cites [11,58} & SOSP version of [96], 194 cites according to GS
This is reflective of an unstated & unmotivated HW bias -- this is clearly not written by OS people.
Most evident in C12, which cannot be satisfied by software implementations. However, this criterion based on a fundamental misconception. Clearly, the cap AC must be implemented somewhere, and that somewhere has full access to everything ("ambient authority"). Somehow the authors imply that doing this in hardware doesn't matter, but doing it in software does. If given the choice between an unverified HW implementation and a verified SW implementation, I know what I'd choose!
In terms of SW implementations, they seem to prefer sparseness-protected user-level caps (which is sort-of understandable given their HW bias, in that these are more like tagged caps in behaving like normal data). I used to think similarly 20 years ago. But given the massive privilege amplification you get from covert channels (leaking a few dozen bits gives you full access to an object) I don't think these constitute a defensible approach these days.
## Specific comments on their criteria:
### Composability C4
This requires that in order for A to delegate O to B, A needs access to B, and claims that this "can be used for implementing separation of duties, strong encapsulation, and highly privileged applications that follow [POLA]". They also claim that seL4 doesn't have that property.
I challenge this on multiple levels.
For one, seL4 clearly provides this functionality: If A has a cap to B's Cspace, it can insert the cap to O there, which is exactly what I understand this definition to require.
However, using this delegation method clearly violates POLA. Why does A need control over B to delegate a cap? seL4 (like many others, incl EROS IIRC, which by the way they claim does satisfy C4) has a better mechanism: A can send a cap over IPC (an Endpoint), as long as A has Grant right on the EP, and B can receive that right, without giving A any rights over B itself. That looks much more like POLA to me. And it certainly provides better encapsulation.
### Policy-controlled delegation C8
EROS is the only system the credit with this, all others, incl seL4, do not, according to the paper.
seL4's formally verified information-flow control explicitly disproves this assessment.
### Protection domain tracing C9
Maintaining "centralized mapping of subjects to their respective protection domains."
I'm not exactly sure what this means; they claim it's satisfied for.few systems (EROS being one of them, seL4 not).
In seL4, Cap tables (Cspaces) are kept in the kernel, pointed to by thread control blocks, is that not centralised and mapped from subjects? Maybe it comes down what Subjects are? Strictly speaking, I'd say it's Cspaces themselves, as they define access. If you think it should be active entities, then it's threads, but they point directly to Cspaces. According to C10 (Minimal Subject Unit) they claim seL4 subjects are "processes", which would mean address spaces (VSpaces). You could argue that there's no direct reference from a VSPace to a CSpace, but it's the thread that invokes the cap, so I really don't understand what this is to mean.
### Single-level store C11
That's simply a policy that should be implemented on top, I don't see the relevance of this.
### Ringless system design C12
Discussed above, misconception on what the TCB is
### Persistence C13
Again, this is orthogonal to caps (and suspect Shap agrees, given that Coyotos went away from this).
### Explicit revocation C14
Again, I have no clue in which way seL4 doesn't satisfy that, it clearly has targeted revocation
### Exclusive access C15
This, again, seems a hardware-focussed view that is pretty meaningless for a software implementation of capabilities, where you can use standard locking strategies or OS mechanisms to synchronise access. In any case, it seems obvious that this can be implemented by revoking all other caps to an object, resulting in exclusive ownership.
So, I doubt that this is a property that needs to be inherent in the cap system, but in any case is something that can be achieved in seL4.
### Cooperative access C16
I'm not exactly sure what it means to be able to "designate only" vs operate on an object.
seL4 has caps with no rights that "designate" an object. But it seems the intent is more what we get when we encapsulate data into a server (that has exclusive access) and invoke that server via a protected procedure call (IPC).
## Taxonomy
I'm not sure how useful this distinction of "ticket cap", "Ocap" and "IPC cap" systems is, but I'm definite that seL4 is clearly misclassified. They write:
"These [IPC cap] systems stand out because the objects they consider - IPC and RPC channels - are their defining features. By their very design to focus on IPC protection, they are hybrid capability systems, i.e., they mix capability-based access control for IPC with other forms of access control for everything else."
Putting seL4 into that category is simply nonsense, as all resources are cap controlled, even kernel memory (which goes much further than any other system I know of).