What do people mean by capabilities and capacities? 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?
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.