Metaobject protocol is contrary to Bertrand Meyer's open/closed principle, which holds that software object systems should be "open for extension" but "closed for modification". This principle effectively draws a distinction between "extending" an object by adding to it, and "modifying" an object by redefining it, proposing that the former is a desirable quality (""objects should be extensible to meet the requirements of future use cases""), while the latter is undesirable (""objects should provide a stable interface not subject to summary revision""). Metaobject protocol, by contrast, transparently exposes the internal composition of objects and the entire object system in terms of the system itself. In practice, this means that programmers may use objects to redefine themselves, possibly in quite complex ways.