The first piece is listing the types. I have object references, such as endosjs.org, opaque tokens, such as waterken, and certificates, such as zcaps and Macaroons. Are there other categories?
Maybe opaque tokens could be divided among swiss numbers and encrypted certificate-like data? In the certificates category, Biscuit should probably be mentioned.
The next piece is listing the actual pros and cons. I'd appreciate any input you have.
I'd say among the most prominent features of certicates is a dual of pros and cons: they don't need a SPOF/bottleneck, but if you choose them because that property is important to you, it means you can't have up-to-date revocation lists. I think macaroons don't make this possible, but zcaps and Biscuits can be attenuated without communicating with anyone in the delegation chain.
When capabilities are tokens made of bits, an important cons is that you lose the confinement property.
Curiously,
Pierre Thierry
--
pie...@nothos.net 0xD9D50D8A
Le 05/03/2026 à 17:05, Alan Karp a écrit :Maybe opaque tokens could be divided among swiss numbers and encrypted certificate-like data? In the certificates category, Biscuit should probably be mentioned.
The next piece is listing the actual pros and cons. I'd appreciate any input you have.I'd say among the most prominent features of certicates is a dual of pros and cons: they don't need a SPOF/bottleneck, but if you choose them because that property is important to you, it means you can't have up-to-date revocation lists.
I think macaroons don't make this possible, but zcaps and Biscuits can be attenuated without communicating with anyone in the delegation chain.
When capabilities are tokens made of bits, an important cons is that you lose the confinement property.


--
You received this message because you are subscribed to the Google Groups "cap-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cap-talk+u...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/cap-talk/CANpA1Z1s9-D_XnF7wr1toLBPqCDWuQfPDqx2OA-ZkCrYRbOzAA%40mail.gmail.com.


I listed E as in the language category. You likewise listed Endo as in the language category. In fact, both are a combo of a local dynamic ocap language (local-E, HardenedJS) and a live crypto-cap protocol (E's CapTP, ocapn)I am also inclined to include ocap-oriented UIs, first, as another implementation substrate. Due to human limitations, these usually have a different abstract access control model (petnames, transitive selective revocability as the default form of delegation). These include CapDesk, SCoopFS, The Familar (Endo's in progress UI).Above, I also failed to give enough credit to Waterken and Spritely.Waterken used Joe-E as the local language and introduced its own live crypto-cap protocol, which I would still classify as being in the CapTP family. YMMV.Spritely started with W7 and therefore Scheme as its local language, but then added builtin time travel. Spritely and Endo jointly use ocapn as the live crypto-cap protocol.A third orthogonal axis is the persistence and upgrade model.Agoric's use of Endo starts with orthogonal persistence just to ensure that all honest validators produce the same deterministic computation, independent of whether they crashed and started or they just continued. This leaves upgrade as a separate problem. Agoric does both state-based upgrade (via Exos) and relay based "Manchurian" upgrade (via async-flow). We
To view this discussion visit https://groups.google.com/d/msgid/cap-talk/CAK5yZYgR%2BGkidv8v6jMSi5%2Bk80DiOEFEGkDhzoL7SiBeEXt%2BDw%40mail.gmail.com.
To view this discussion visit https://groups.google.com/d/msgid/cap-talk/CAK-_AD57_zwLRTfQ1fa%3DtaPZJTr04ycShGMtZObNOXJJm9pRpA%40mail.gmail.com.
From Robust Composition:> Object-capability systems differ regarding concurrency control, storage management, equality, typing, and the primitiveness of messages, so we avoid these issues in our model.Thus, each of these are further dimensions of classification.
To view this discussion visit https://groups.google.com/d/msgid/cap-talk/CAK5yZYj0NvHkoe-zc5SjxZQKEyd_9JphAsmeOci9q5PHRQFbig%40mail.gmail.com.
--
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/friam/CACTLOFqf0wMY%3D_LNgDyDPGuVPYWOHPAzQfHJpZcD9aXF_VCYsg%40mail.gmail.com.
--
You received this message because you are subscribed to the Google Groups "cap-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cap-talk+u...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/cap-talk/CANpA1Z1s9-D_XnF7wr1toLBPqCDWuQfPDqx2OA-ZkCrYRbOzAA%40mail.gmail.com.
What is the purpose of this exercise?
I listed E as in the language category. You likewise listed Endo as in the language category. In fact, both are a combo of a local dynamic ocap language (local-E, HardenedJS) and a live crypto-cap protocol (E's CapTP, ocapn)
I am also inclined to include ocap-oriented UIs, first, as another implementation substrate. Due to human limitations, these usually have a different abstract access control model (petnames, transitive selective revocability as the default form of delegation). These include CapDesk, SCoopFS, The Familar (Endo's in progress UI).
Above, I also failed to give enough credit to Waterken and Spritely.Waterken used Joe-E as the local language and introduced its own live crypto-cap protocol, which I would still classify as being in the CapTP family. YMMV.
Spritely started with W7 and therefore Scheme as its local language, but then added builtin time travel. Spritely and Endo jointly use ocapn as the live crypto-cap protocol.
A third orthogonal axis is the persistence and upgrade model.
Agoric's use of Endo starts with orthogonal persistence just to ensure that all honest validators produce the same deterministic computation, independent of whether they crashed and started or they just continued. This leaves upgrade as a separate problem. Agoric does both state-based upgrade (via Exos) and relay based "Manchurian" upgrade (via async-flow). We expect that both forms of upgrade will migrate to Endo, but we do not expect non-consensus use of Endo to support orthogonal persistence. Rather, the durable state of state-based upgrade will also provide persistence.Mostly separately, Endo supports formula-based persistence and upgrade, already reflected in the Endo cap-oriented UI, the Familiar.
Plash is both a dynamic language and a command-line UI, depending on how you want to describe it.
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/friam/CAK5yZYhFv_uixWa4-etroCJvcLrX0-BwRaTiofx66M%2BrCRbdXA%40mail.gmail.com.
Sorry about replying to such an older thread... afaict the current thread mostly focuses on differences between mechanisms.I was kind of thinking there was a separate dimension in regards to what resources are actually governed by capabilities.E.g. in many of the dynamic language and static language (w7 I believe & emily) are built upon garbage collected languages, whereallocators are available ambiently. While many of the OS capabilities in Mark's list *do* consider allocation to be an attenuable resource.Then of those, the MCS branch of seL4 seems to consider beyond space, where time is also an attenuable resource. Perhaps there are systems where space (memory) and (persistent) space are considered distinctly from one another giving one ambient allocation but limits on persistent storage.As far as I know the distinction currently falls pretty uniformly across OS/Language caps with OS caps generally treating allocation as more of a resource. But I don't think it is necessarily so. We could imagine a language cap system with capability ownership requirements for allocation.
To view this discussion visit https://groups.google.com/d/msgid/cap-talk/CACTLOFo8keTb%3D20HzGAh0s5L1F-Oapz3kAa3pWbUydJhtAii5g%40mail.gmail.com.
This touches very much on something that I've been strugling with for the design of a "quota" enting-membrane for a DSL I'm working on.I used to think allocation, both for persisten and ephemeral storage is pretty much handled by the right to "ent" or graft the allocated thing somewhere into your scope.As such, in my DSL I worked on the option to merge (import) function with a freeze on merge "export" branch (that is where all the scoped variables and constants live). That basicly would result in a situation that you can't allocate anything not allocated already by the import action because you cant assign it to anything.But the more I think about it, the more I realize that the important divide isn't between being allowed to allocate or not to allocate, but between being able to allocate a few trivial small things or either be allowed to allocate countless small things, or big things. It's less about the capabity to allocate and more about how much of the storage resource you are allowed to use up.
To view this discussion visit https://groups.google.com/d/msgid/friam/CAMpet1UrcyMnOAT6GO_q92USWMisYYPEtDdn3jk1UNcFQwZqNA%40mail.gmail.com.
On Sat, Apr 4, 2026 at 8:41 AM Rob Meijer <pib...@gmail.com> wrote:This touches very much on something that I've been strugling with for the design of a "quota" enting-membrane for a DSL I'm working on.I used to think allocation, both for persisten and ephemeral storage is pretty much handled by the right to "ent" or graft the allocated thing somewhere into your scope.As such, in my DSL I worked on the option to merge (import) function with a freeze on merge "export" branch (that is where all the scoped variables and constants live). That basicly would result in a situation that you can't allocate anything not allocated already by the import action because you cant assign it to anything.But the more I think about it, the more I realize that the important divide isn't between being allowed to allocate or not to allocate, but between being able to allocate a few trivial small things or either be allowed to allocate countless small things, or big things. It's less about the capabity to allocate and more about how much of the storage resource you are allowed to use up.Yeah, indeed I probably did a poor job of conveying that, but that was basically what I meant by "attenuable resource", an allocation limit that could be subdivided. Basically how keykos spacebanks worked. In theory "TimeBanks" could work similarly, subdividing a schedule/time slice. I struggle to think of what other kinds of resources could be subdivided. Presumably I suppose you could apply the principle to battery power, bandwidth? *shrug*
To view this discussion visit https://groups.google.com/d/msgid/cap-talk/CACTLOFopmV%2BLcrWRyC02eng8%2BOdzLAOCjBXU7iFZvz0UJKWGvQ%40mail.gmail.com.
On Sat, 4 Apr 2026, 11:06 Matt Rice, <rat...@gmail.com> wrote:On Sat, Apr 4, 2026 at 8:41 AM Rob Meijer <pib...@gmail.com> wrote:This touches very much on something that I've been strugling with for the design of a "quota" enting-membrane for a DSL I'm working on.I used to think allocation, both for persisten and ephemeral storage is pretty much handled by the right to "ent" or graft the allocated thing somewhere into your scope.As such, in my DSL I worked on the option to merge (import) function with a freeze on merge "export" branch (that is where all the scoped variables and constants live). That basicly would result in a situation that you can't allocate anything not allocated already by the import action because you cant assign it to anything.But the more I think about it, the more I realize that the important divide isn't between being allowed to allocate or not to allocate, but between being able to allocate a few trivial small things or either be allowed to allocate countless small things, or big things. It's less about the capabity to allocate and more about how much of the storage resource you are allowed to use up.Yeah, indeed I probably did a poor job of conveying that, but that was basically what I meant by "attenuable resource", an allocation limit that could be subdivided. Basically how keykos spacebanks worked. In theory "TimeBanks" could work similarly, subdividing a schedule/time slice. I struggle to think of what other kinds of resources could be subdivided. Presumably I suppose you could apply the principle to battery power, bandwidth? *shrug*From your list of resources, and more so from what is missing from the list (things like entropy space), I'm getting the impression it's not the subdivision of the resource that makes these resources different, but the implied thin provisioning.In my project I'm using strict pre-alocation for entropy, and this is the most straight forward solution. But for grafting quota membranes allowing some level of overcommit makes it a bit more involved.My gut tells me that a least authority language should somehow limit how strong an overcommit is possible, but I neither know if this gut feeling is correct, or if it is, how to quantify it or express it.
To view this discussion visit https://groups.google.com/d/msgid/friam/CAMpet1U48gSt-VbYt%2BcdgbCCaztp5Lk-mJBOdXeBMjxfR0XWtg%40mail.gmail.com.