<p>A comment in <code>capability.h</code> says</p>

<blockquote>
<pre><code>// The Task currently holding this Capability.  This task has
// exclusive access to the contents of this Capability (apart from
// returning_tasks_hd/returning_tasks_tl).
</code></pre>
</blockquote>

<p>This looks to be an access control mechanism.</p>

<p>In the security literature, the word <em>capability</em> is used to refer to a way of controlling access.  The dominant usage is as a reference to an object that encapsulates authority such that denying access to the object denies access to that authority but there are others as explained at <a href="http://www.cs.umd.edu/~jkatz/security/downloads/capability-myths.pdf" rel="nofollow">"Capability Myths Demolished"</a></p>

<blockquote>
  <p>We know of no security mechanisms outside  of the
  object-capability model that have described themselves
  using the word capability except for “POSIX
  capabilities”, “Netscape capabilities”, and “split
  capabilities” [14]. POSIX capabilities are not generally 
  described as “capability-based security”. The
  “Netscape capabilities” extensions to Java were fairly
  short-lived and have not been presented in the research
  literature as a capability system. Moreover, both
  “POSIX capabilities” and “Netscape capabilities” have
  never been presented as security mechanisms that can
  stand on their own, instead only serving as an extension 
  to existing security systems. The split capabilities
  model is explicitly presented in contrast to the pure
  capability model [14].</p>
</blockquote>

<p>The Haskell usage is not an object-capability model.  The pointer from a task to a capability would have to go the other way, and probably be proxied through a revokable wrapper to qualify as a capability in the sense explained above.</p>

CC BY-SA 3.0
2012-04-24T08:14:45.170Z
2012-05-19T16:25:07.087Z
2012-05-19T16:25:07.087Z
Mike Samuel
<p>Someone made a casual remark to me about the terminology of capabilities and capacities, in the context of threads, processors and runtime systems, particularly their theoretical modelling.</p>

<p>For example, in Haskell, an OS thread that is started to schedule work for a single logical processor (hardware thread) is called a capability. Where does this terminology come from? I'm not sure what it really means.</p>

<p>The person who made the casual remark thought that there is also the related concept of capacities, but neither of us are sure.</p>

<p>Anyone know about this? Or have any references for me?</p>

CC BY-SA 3.0
2011-12-20T14:37:05.257Z
I think that you are talking about the GHC terminology “capability,” which has nothing to do with “capacity” as far as I know.  In my opinion, the question is complicated in an unnecessary way because you are mixing two unrelated terms.
Tsuyoshi Ito
CC BY-SA 3.0
2011-12-20T15:09:06.753Z
Yeah, I know that it is a term used in GHC. I say that in the question. I want to know where it came from -- is it from the literature in which case does it have a formal definition, or is it just a random word that they appropriated? If so, what were they trying to say that thread wouldn't? My colleague thinks that he has seen a related term capacity in the literature, but can't remember where.
Steve Swiss
CC BY-SA 3.0
2011-12-20T17:23:06.747Z
Why don't you ask the Haskell people?
Raphael
CC BY-SA 3.0
2011-12-20T23:11:29.257Z
You only mention Haskell in the question.  Do not confuse a language with one of its implementations.
Tsuyoshi Ito
CC BY-SA 3.0
2011-12-20T23:32:48.020Z
getNumCapabilities is a standard function in the language that is Concurrent Haskell. Therefore, capabilities are a term used in the language Concurrent Haskell. I have said nothing about any implementations at all, until someone brought up GHC. Why do you think that I have?
Steve Swiss
CC BY-SA 3.0
2011-12-21T13:26:24.917Z
You thought that the term “capability” is something universal to Haskell.  I claimed in my first comment that it is a GHC-specific terminology.  You responded, “Yeah, I know that it is a term used in GHC. I say that in the question.”  You are completely missing the point because you are confusing Haskell with GHC.
Tsuyoshi Ito
<reference-request><pl.programming-languages><dc.parallel-comp><terminology>
What do people mean by capabilities and capacities?
Steve Swiss
# What do people mean by capabilities and capacities?

(Asked by: username_0 on 2011-12-20)

Someone made a casual remark to me about the terminology of capabilities and capacities, in the context of threads, processors and runtime systems, particularly their theoretical modelling.

For example, in Haskell, an OS thread that is started to schedule work for a single logical processor (hardware thread) is called a capability. Where does this terminology come from? I'm not sure what it really means.

The person who made the casual remark thought that there is also the related concept of capacities, but neither of us are sure.

Anyone know about this? Or have any references for me?

**Tags:** reference-request, pl.programming-languages, dc.parallel-comp, terminology

> **Comments:**
> **username_1**: I think that you are talking about the GHC terminology “capability,” which has nothing to do with “capacity” as far as I know.  In my opinion, the question is complicated in an unnecessary way because you are mixing two unrelated terms.  
> **username_0**: Yeah, I know that it is a term used in GHC. I say that in the question. I want to know where it came from -- is it from the literature in which case does it have a formal definition, or is it just a random word that they appropriated? If so, what were they trying to say that thread wouldn't? My colleague thinks that he has seen a related term capacity in the literature, but can't remember where.  
> **username_2**: Why don't you ask the Haskell people?  
> **username_1**: You only mention Haskell in the question.  Do not confuse a language with one of its implementations.  
> **username_0**: getNumCapabilities is a standard function in the language that is Concurrent Haskell. Therefore, capabilities are a term used in the language Concurrent Haskell. I have said nothing about any implementations at all, until someone brought up GHC. Why do you think that I have?  
> **username_1**: You thought that the term “capability” is something universal to Haskell.  I claimed in my first comment that it is a GHC-specific terminology.  You responded, “Yeah, I know that it is a term used in GHC. I say that in the question.”  You are completely missing the point because you are confusing Haskell with GHC.  

---

## 1 answers

### Answer by username_3 on 2012-04-24. Score: 1

A comment in capability.h says

// The Task currently holding this Capability.  This task has
// exclusive access to the contents of this Capability (apart from
// returning_tasks_hd/returning_tasks_tl).


This looks to be an access control mechanism.
In the security literature, the word capability is used to refer to a way of controlling access.  The dominant usage is as a reference to an object that encapsulates authority such that denying access to the object denies access to that authority but there are others as explained at "Capability Myths Demolished"

We know of no security mechanisms outside  of the
  object-capability model that have described themselves
  using the word capability except for “POSIX
  capabilities”, “Netscape capabilities”, and “split
  capabilities” [14]. POSIX capabilities are not generally 
  described as “capability-based security”. The
  “Netscape capabilities” extensions to Java were fairly
  short-lived and have not been presented in the research
  literature as a capability system. Moreover, both
  “POSIX capabilities” and “Netscape capabilities” have
  never been presented as security mechanisms that can
  stand on their own, instead only serving as an extension 
  to existing security systems. The split capabilities
  model is explicitly presented in contrast to the pure
  capability model [14].

The Haskell usage is not an object-capability model.  The pointer from a task to a capability would have to go the other way, and probably be proxied through a revokable wrapper to qualify as a capability in the sense explained above.


---

