\chapter{Users}
\hypertarget{md_home_2simon_2workspace_2post-scarcity_2docs_2_users}{}\label{md_home_2simon_2workspace_2post-scarcity_2docs_2_users}\index{Users@{Users}}
\label{md_home_2simon_2workspace_2post-scarcity_2docs_2_users_autotoc_md158}%
\Hypertarget{md_home_2simon_2workspace_2post-scarcity_2docs_2_users_autotoc_md158}%
 I\textquotesingle{}m not yet sure what sort of objects users are. They may just be lists, interned in a special namespace such as {\itshape system.\+users}. They may be special purpose \href{Vector-space.html}{\texttt{ vector space}} objects (although I don\textquotesingle{}t see why, apart from to get a special tag, which might be useful).

Every user object must contain credentials, and the credentials must be readable by system only; the credentials are either a hashed password or a cryptographic public key. The user object must also have an identifying name, and probably other identifying information. But it\textquotesingle{}s not necessarily the case that every user on the system needs to be able to see the names of every other user on the system, so the identifying information (or the user object itself) may have \href{Access-control.html}{\texttt{ access control}} lists.

There is a problem here with the principle of \href{Immutability.html}{\texttt{ immutability}}; if an access control list on an object {\itshape foo} contains a pointer to my user object so that I can read {\itshape foo}, and I change my password, then the immutability rule says that a new copy of the {\itshape system.\+users} namespace is created with a new copy of my user object. This new user object isn\textquotesingle{}t on any access control list so by changing my password I actually can\textquotesingle{}t read anything.

This means that what we put on access control lists is not user objects, but symbols (usernames) which are bound in {\itshape system.\+users} to user objects; the user object then needs a back-\/pointer to that username. A user group then becomes a list not of user objects but of interned user names. 