The Interface Definition Language (IDL) defined by OMG is a language for describing the interfaces of software objects. According to the CORBA 2.0 specification ``an interface is a description of the set of possible operations a client may request of an object'' [10]. An interface does not specify the internal data-representation or executable code used to implement an object. In practice, an IDL interface specification may also contain declarations of types, exceptions and constants. In order to facilitate re-use and extensibility of classes, IDL supports multiple inheritance among interface definitions. IDL is independent of programming languages, and may be used to describe objects implemented using a variety of programming languages, compilers or operating systems.
The IDL specification for an object is used to automatically generate ``stub'' and ``skeleton'' programs for the object. The stub provides an interface for other client objects to request services from the object via an ORB. The stub performs tasks such as converting parameters and returned values into a form which allows them to be transmitted via the ORB. The skeleton acts as an interface between an object in its server role and the ORB. IDL specifications can also be used to generate header files in a variety of programming languages, including C++ and Smalltalk, on which implementations can then be based.
In addition, the information represented by the IDL specification for any objects connected to an ORB is compiled and stored in the Interface Repository service which the ORB must provide. The interface repository can be examined by objects on the ORB in order to ascertain what other objects are connected to the ORB and what interfaces they provide. This allows an object to request services from other objects on the ORB without having prior knowledge of the other objects or their interfaces.