Started in 1989 by eight well known companies(ie Sun, 3COM, HP etc) , the Object Management Group(OMG) was formed to promote the usage and programming of distributed objects. Unlike other bodies, such as the International Standards Organization(ISO), that are formed to mandate standards, the OMG was formed to bring many different groups(companies) together. It does not enforce standards of any sort. Anyone may, if they wish, use or not use any documents produced by the OMG. Since its inceptions, the OMG consortium has grown to about eight hundred members, excluding the most prominent Microsoft. To assure that OMG documents do not follow any specific proprietary implementation and that the nomenclature is general enough, the OMG initially produced a document called Object Management Architecture Guide(OMA Guide) in 1990.
The OMA describes a general frame work in which all future OMG documents abide by. The OMA uses two models called the Core Object Model and the OMG Reference Model to describe how objects can interact with each other in a transparent way. . The Core Object Model of OMG describes and defines such things as Objects, Object identifiers(OIDs), Object Types, Interface Signatures, Interface Types, Operations, Attributes, Inheritance, and Type Lattices. The OMG Reference Model discusses the elements necessary to support the Core Object Model. The Reference Model is broken into several components such as a description of ORBs(Object Request Brokers), Services, Horizontal and Vertical Facilities, and Application Objects.
In 1991, the OMG released the first specifications of the Common Object Request Broker Architecture (CORBA). In the CORBA document, the abstract components discussed in the OMA where more solidified by specifying their interfaces and descriptions of the methods(operations) on these interfaces(i.e. ORB). To assure that the specification was implementation neutral, OMG defined all the specification of all objects and there interfaces in terms of an Interface Definition Language called the CORBA IDL. The initial 1991 CORBA (1.1) specification discusses how CORBA IDL would translate into the specific language C. These IDL to C language mappings assured that anyone who needed to access or implement an interface in C would do so in a standard manner. It may seem unusual that OMG defined an Object Oriented Model on a non-Object Oriented(OO) language such as C. OMG choose to perform the mapping to the most used, developed, standardized, stable language at the time(the C programming language).
In 1994, the OMG released the CORBA 2.0 specifications which included the C++ language mapping. In the CORBA 2.0, OMG introduced protocols for interoperability between ORBs from different vendors. They specified a general protocol between ORBs called the General Inter-ORB Protocol(GIOP). The GIOP defines the strict layout of data and messages(alignment,byte order, and sequence) sent between ORBs using a connection oriented communication protocol. The layout of data used in GIOP uses the OMG specification called Common Data Representation(CDR). The first concrete instance of GIOP, also given in CORBA 2.0, was the Internet Inter-ORB Protocol(IIOP). The IIOP uses the connection oriented TCP protocol. Almost all ORB vendors currently use IIOP. In CORBA 2.1 and below, all ORB vendors had to implement an Object Adapter(OA) called the BOA(Basic Object Adapter). As BOA was never completely specified with a standard CORBA IDL, many vendors implemented the BOA in many different ways. Since OAs are only found in servers, programmers could not write a standard portable code for object servers. In CORBA 2.2, the specification for the Portable Object Adapter(POA) was introduced to fix this short coming. The CORBA 2.3 specification(1999) fixes many problems that existed in the POA and makes the BOA deprecated. Servers written using POA are completely portable between any vendor that is CORBA 2.3 compliant. But BOA servers are vendor specific. As POA is more versatile than the BOA, it is very likely that vendors will keep supporting there private implementations of BOA by using special wrappers placed around an inner core POA.