Legion is an object-based system organized by classes and metaclasses (classes of classes). Every part of Legion, including classes and metaclasses, is represented by a Legion object. You manipulate these parts by controlling their representative objects. Objects are automatically assigned system-level names called Legion Object Identifiers ( LOIDs) but LOIDs are impractical at best to use. Instead, Legion allows you to assign string names to any Legion objects and to organize those names according to your own preferences. New Legion systems include the basic outlines of context space but you can arrange your space as you wish. You can run programs, use far-flung resources, and take advantage of Legion's other features from your context space.
You will probably spend a great deal of time working in context space, so it is important to understand the initial geography of your system's context space and how to negotiate that space. A typical newly installed system provides some starter contexts and context names to allow you access to commonly used objects. See Contents of a typical new Legion system context space , below, shows some of the default contexts and context names of a newly installed Legion system's context space. (Note that your context space may not look like this.)
Think of the different levels of context space as directories and sub-directories. Each of the contexts in See Contents of a typical new Legion system context space can hold sets of sub-contexts, just as Unix directories hold sets of subdirectories. Context names are organized in contexts, just as file names are organized in directories. 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 BootstrapHost in the system shown in See Contents of a typical new Legion system context space 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.
You can control your context space from the Context Manager, discussed in section See An introduction to Legion context space starting on See An introduction to Legion context space . Or, you can work from the command line by using context-related command tools, discussed in section See Working in context space starting on See Working in context space .
A new system contains default names for the basic objects, such as the bootstrap host and vault. These objects are in the /hosts , /vaults , /impl , and /class contexts (shown in See Contents of a typical new Legion system context space ). The /hosts context contains names of the host objects currently in your system. A new system will have two context names, BootstrapHost and the DNS name of the bootstrap host. 1 Both of these names point to the bootstrap host object, which represents the bootstrap host. The /vaults context contains names of the vault objects currently in your system. A new system contains only one context name, BootstrapVault , which points to the bootstrap vault object. (See See Host and vault objects for more information on hosts and vaults.) The /impl context contains the names of implementation objects. A new /class context contains context names for all of the initial Legion object classes, such as AuthenticationObjectClass and BasicFileClass . 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.
Note, however, that the context space illustrated in See Contents of a typical new Legion system context space does not reflect this hierarchy. This is a key feature of context space: the physical location and organization of Legion objects is unrelated to any user's context space. The objects named in a /host 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 host objects: you can organize your contexts as you wish.