The VOS itself imposes two restrictions on names:
All comparisons are done on a byte-by-byte (i.e. case sensitive, locale-independent, also known as code-point comparison) basis. Where names are used to access built-in VES-supplied functionality (for example, the class initialization method) there is always an accompanying indication so as not to build in any set of reserved names.
CLS Rule 2: Languages must follow Annex 7 of Technical Report 15 of the Unicode Standard 3.0 (ISBN 0-201-61633-5) governing the canonicalization of identifiers, available on-line at http://www.unicode.org/unicode/reports/tr15/tr15-18.html. While the CLS allows the use of case-insensitive comparison (canonicalization KC), identifiers must be persisted in their original case (canonicalization C) so that case sensitive comparisons work as expected.
CLS Rule 3: Languages must provide an escape mechanism to reference identifiers that happen to be keywords in their own language. In addition, extender languages must provide a mechanism for defining and overriding virtual methods with names that are keywords in their language.
CLS (consumer): need not consume types that violate these rules, but must have an escape mechanism to allow access to named data that uses one of its own keywords as the name.
CLS (extender): need not create types that violate these rules. Must provide a mechanism for defining names that obey these rules but are the same as a keyword in the language. In order to override an inherited definition the VOS requires the precise encoding of the original declaration be used.
CLS (framework): must not export types that violate these rules. Should avoid the use of names that are commonly used as keywords in programming languages.