Even if a system does not provide a protection kernel as powerful as those of Hydra or CAP, mechanisms are still available for implementing protection specifications given in a programming language.
The principal distinction is that the security of this protection will not be as great as that supported by a protection kernel, because the mechanism must rely on more assumptions about the operational state of the system.
A compiler can separate references for which it can certify that no protection violation could occur from those for which a violation might be possible, and it can treat them differently.
The security provided by this form of protection rests on the assumption that the code generated by the compiler will not be modified prior to or during its execution.
What, then, are the relative merits of enforcement based solely on a kernel, as opposed to enforcement provided largely by a compiler?