For hosted environments (e.g. when running Plan B on top of another operating system) the whole set of system calls from the host operating system is also available. Using any of them would make the program non portable to other architectures.
Programs can use make(2) to create a box and delete(2) to delete a box. Boxes can be copied using copy(2) and linked using link(2) (although not all boxes can be linked). Boxes have neither read() nor write() defined; vm(4) boxes can be copied instead.
A box may contain other boxes. The names for the boxes contained within a given one (maybe none) can be obtained with selectors(2).
Box metadata include several time stamps, permissions, ownership, type, and constraints. Metadata can be accessed with info(2) and changed with chinfo(2).
All these system calls use names, there is no such thing as a "box descriptor" in Plan B.
All system calls accept constraint specifiers along with names, to determine which one of the boxes with a given name is used. The constraint is specified by contatenating it to the name, separated by by a "!" character (e.g. /a/box!p98!wave)
When a constraint is given, the box used will match the constraint given by the user—those not matching will be
ignored for the purpose of the system call. Two constraints match if they match element by element. When specifying a constraint for a system call, two special names can be used as constraint elements: "%" and "*". A constraint element "*" matches any name. A constraint element "%" is used when two different boxes
are used on a single system call. It is used to request such element to be the same in both boxes, although any concrete name can match. Trailing constraint elements not specified are considered to be "*" and thus ignored. See copy(2) for several examples using constraint specifiers.
Side by side with the name space, there is a set of conversion declarations. Each declaration tells the system how to convert a box from one type to another. New
declarations can be introduced with cast(2) and later removed with uncast(2).
The Box: A replacement for files. Francisco J Ballesteros and Sergio Arevalo. HotOS-VII.
Known system limits are described in limits(2). Oh, I forgot!, another bug is that there is no limits(2).