New types – value types and reference types – are introduced into the NGWS runtime type system via type declarations expressed in metadata. Not limited to type declarations, metadata is a structured way to represent all information that the NGWS runtime uses to locate and load classes, lay out instances in memory, resolve method invocations, translate IL to native code, enforce security, and set up runtime context boundaries. Every NGWS PE/COFF image (see the File Format specification for details) carries a compact metadata binary that is emitted into the image by the NGWS runtime enabled development tool or compiler.
Each NGWS runtime enabled language will expose a language-appropriate syntax for declaring types and members and for decorating them with attributes that express what services they require of the runtime. Type imports are also handled in a language-appropriate way, and it is the development tool or compiler that consumes the metadata to expose the types that the developer sees.
In fact, the typical component or application developer will not need to be aware of the rules for emitting and consuming NGWS runtime metadata. While it may help a developer to understand the structure of metadata, the rules outlined in this section are primarily of interest to tool builders and compiler writers.