[cap-talk] Hybrid Cap Systems redux

Sandro Magi naasking at higherlogics.com
Tue Feb 19 09:36:56 EST 2008


Jonathan S. Shapiro wrote:
> Sandro: you have my concern backwards. My concern is that real-world
> capability systems need to scale to terabytes of data. This exceeds
> 32-bit spaces by a very large margin, and it exceeds available core
> working set even on 64-bit system.
> 
> While I agree that GC "works", I believe that many of the GC-based
> approaches will be pragmatic failures when they are forced to switch
> from memory-GC to disk-GC.

I haven't read much on disk-based GC, but I found this after a cursory 
search:
http://www.memorymanagement.org/bib/printezis96.html

There are a number of ways I can see to address more than 32-bits on 
32-bit machines. Assuming a domain is the unit of persistence, all 
cross-domain pointers are made "fat", like the capability descriptors in 
EROS, and a simple pre-deref check can ensure that the target object is 
in-memory first. If it's not, the runtime's object faulting logic is 
invoked.

> This is complete nonsense. Proof carrying code does not alter the safety
> of the code. You still have the problem of generating the proofs, and
> you simply aren't going to do that for C.

Proofs are a separable concern. Analyses already exist for inferring 
safety properties of C subsets, and while I doubt an analysis will ever 
encompass all of C, we may get to a point where a safety can be ensured 
for a sufficiently broad C subset of C to compile many programs. For the 
unknown accesses, there are runtime checks or user-provided proofs. All 
you really need for capability systems is memory safety in a domain.

While proof techniques are still very onerous, they are getting 
significant attention and I expect they may be usable more mere mortals 
within 10 years.

> Two problems here:
> 
>   1. C is unsafe, therefore these safety checks violate C semantics (and
>      do so in practice, not just on paper).

They don't prevent the ability to write allocators, do pointer 
arithmetic, etc. They use static analysis combined with runtime checks 
to ensure that memory errors are prevented. An erroneous memory access 
does not have a defined semantics.

>   2. It is a continuing source of wonder to me that people think it is
>      good to induce failure in working C programs by adding checks that
>      cause perfectly good programs to fail.

I'm not sure what failures you're referring to. LLVM's SAFECode project 
does not induce C programs to fail. Quote the opposite, previously 
failing programs no longer fail since out of bound memory accesses are 
now safe!

Sandro


More information about the cap-talk mailing list