Custom attributes add user-defined annotations to the metadata. Custom attributes allow an instance of a type to be stored with any element of the metadata. This mechanism can be used to store application specific information at compile time and access it either at runtime or when another tool reads the metadata. While any user-defined type can be used as an attribute it is expected that most attributes will be instances of types whose parent is System.Attribute. The NGWS runtime predefines some attribute types and uses them to control runtime behavior. Some languages predefine attribute types to represent language features not directly represented in the VOS. Users or other tools are welcome to define and use additional attribute types.