A Meta-object Protocol is used in different object-oriented systems to specify behavior of the underlying object system.
The following is a list of meta-object protocols for some other languages.
A metaobject protocol is a description of the abstract design of an object system, and of the structure and behaviour of the components of the system. These components are themselves "objects". For example, many systems provide objects called classes and other objects called instances. In some dynamic object systems classes themselves are instances, and they play a particular role of generating other instances.
The term metaobject arose from the need to refer to objects themselves in an object, rather than the things those objects are related to in the data model that a given program operates on. If one consideres the domain of object orientation to be the modeling of a program itself rather than the thing the program models, then these things called "metaobjects", e.g. classes and instances, are simply the "objects" in the program modeal, which is not to be conflated with the date model for the target domain.
A meta-object protocol can also be used in applications where reflection is needed for a system to be able to examine itself:
DKF 2009-05-14: Not really. It doesn't allow all that much flexibility in terms of the actual implementation semantics. That particular TIP allows any kind of OO system to be built, so long as it's XOTcl. It's the Henry Ford of core OO proposals. Writing a customizable MOP is very difficult; even now (having designed and implemented TclOO) I still feel I don't grasp the full space of possibilities firmly enough to be able to build a scripted customization interface for the basic semantics.
The term "protocol" implies some level of interoperability between otherwise autonomous actors. Therefore, the first principle of an object protocol for Tcl might be this:
An object should be able to use another object that has passed to it, regardless of the origin of the passed object.