Legion is an object-based system organized by classes and metaclasses (classes of classes). All Legion classes are objects and can be assigned context names. Legion objects are organized by their classes and the classes are in turn organized into a hierarchical structures of metaclasses. The top metaclass is the LegionClass , which is responsible for every other object in the system.
Every part of Legion, such as file objects and metaclasses, is represented by a Legion object. You manipulate these parts by controlling their representative objects, which means that you must know the name of the object that you wish to use. Objects are automatically assigned system-level names called Legion Object Identifiers (LOIDs). LOIDs are impractical at best to use (see About the LOID), however, so you can assign string names to any Legion object, whether a BasicFileObject (a Legion file object) or a metaclass object, and organize the names according to your own needs.
These string names are called context names and you organize them in a hierarchy of contexts in Legion's context space. Context names are organized in sets of contexts and subcontexts, just as Unix files are organized in sets of directories and subdirectories. New Legion systems have a default context space for convenience, but you can rename and rearrange all or part of your context space as appropriate. You can run programs, use far-flung resources, and take advantage of Legion's other features through context space.
You will probably do most of your Legion work in contexts, so it is important to be familiar with the geography of your system's particular context space and to feel comfortable negotiating that space. A typical newly installed system includes a default context hierarchy and context names for commonly used objects. Figure 1, below, shows part of a newly installed Legion system's context space. (Your context space may not look like this.)
A new system provides default context paths for the key objects, such as classes and implementations. These objects are in the /hosts, /vaults, /impl, and /class contexts. For example, default class objects are listed in the /class context. The /impl context contains the names of implementation objects.
Note, however, that context space does not reflect physical space. This is a key feature of context space: Legion objects' physical location and organization is not related to context space organization. The objects named in context do not have be able to communicate with each other or even know of each other's existence. They do not even have to be the same type of objects. A context can hold multiple depths of further contexts, just as Unix directories hold sets of subdirectories.
Context path names use Unix-style slash ("/") as a default, and the examples here follow that style (e.g., the full context path name for the bootstrap host in the system shown in Figure 1 is /hosts/BootstrapHost). It is possible to change Unix-style slash to the DOS-style backslash ("\") via the primitive context manipulation routines provided by the Legion library.
Legion offers a graphical user interface as well as context-related command-line tools to run programs and manipulate Legion objects in context space. The GUI is not currently available but we hope to have a workable version in the near future. In the meantime, you can login to our vanet browser as a guest user or, if you have a vanet account, under your account name. The Legion browser shows the vanet Legion testbed context space. Once you login, you will see your home context or the /home context. You can start programs, see objects, change permissions, import and export files, etc. The browser's URL is <http://sirius.cs.virginia.edu/browser/>.