Legion attributes provide a general mechanism that allows an object to describe itself to other objects in the system. An attribute is a tuple that contains a tag and a value; the tag is a character string, and the value contains data that vary for different tags. Attributes reside in the address space of the object that they describe, and can be accessed via object-mandatory functions (such as getAttributes()). These functions' parameters can be empty, contain a specific tag or set of tags, or contain <tag, value> pairs. The set of attribute kinds (i.e., tags) supported by an object depends on the object's type. For example, each host object contains attributes describing the architecture and system configuration of the machine it represents (e.g., <Architecture, Sparc>, <Operating System, Solaris>). Programmers can include arbitrary attribute sets in the objects that they create. During an object's lifetime its attributes can be dynamically updated or augmented to reflect changes in the object.