The CLS and the Design Guidelines

David’s recent blog made it clear to me that we are not being clear on the distinction between the CLS and the Design guidelines. Although they were developed at the same time, they are developed for very different purposes. In david’s comments Andy is right – The 3-letter mnemonics thing is just part of the Design Guidelines, not part of the CLS. FxCop enforces the Design Guidelines which includes things such as naming conventions for publicly exposed identifiers etc. Another way to look at this is that the CLS is a normative (binding) part of the CLI Specification whereas the Design Guidelines are a normative (informative, non-binding) part of the spec.

From the intro to the Design Guidelines document

Relationship to the Common Language Specification

Targeting the common language specification (CLS) is an excellent way to ensure cross language interoperation. The CLS defines a set of programmatically verifiable rules that governs the interoperation of types authored in different programming languages. Although the CLS encourages good library design, it does not enforce it.

The CLS is a set of rules to be used by managed class library designers to guarantee that their APIs will be callable across a wide range of programming languages.