Como previsto pela OMG, existe atualmente uma grande variedade de produtos que obedecem à especificação CORBA, entretanto, devido à grande flexibilidade permitida, as implementações de cada ORB diferem, refletindo as soluções peculiares de cada fabricante, não só pela utilização de diferentes mecanismos para a obtenção das mesmas funcionalidades preconizadas, como também através do acréscimo de novas funções, consideradas importantes para o seu usuário final. Este fato corresponde às decisões técnicas relativas, por exemplo, ao tempo despendido por uma requisição, ao escopo abrangido por uma ORB ( uma única aplicação ou todo o ambiente envolvido por uma empresa com conexões internacionais, por exemplo ), aos níveis de segurança e ao uso de determinados protocolos. Essa diversidade é possível pelo fato da CORBA ter bem definidas as interfaces da ORB, não se preocupando com a forma com que serão fornecidas. A referência de objeto, por exemplo, que compõe um poderoso mecanismo nessa arquitetura, originou várias formas de implementação, tornando complexo a utilização de uma referência desenvolvida para uma ORB por outra. Outros fatores podem, também, motivar a divisão de um ambiente em ORBs diferentes, tais como: segurança, criação de ambientes para desenvolvimento e gerenciamento, tempo de vida dos objetos utilizados, sua proximidade ou não com os clientes, etc.
Dessa necessidade surge o conceito de interoperabilidade, que é definido como: "A habilidade de um cliente numa ORB A invocar uma operação, definida em IDL, num objeto numa ORB B, onde ORB A e ORB B são desenvolvidas independentemente".
A interoperabilidade está basicamente associada com uma mudança transparente de domínio. Considera-se domínio como um escopo em que certas características e/ou regras comuns são preservadas. Há uma tendência de que esses domínios sejam, basicamente, de cunho administrativo (nomes, grupos, gerenciamento de recursos, segurança,etc) e/ou tecnológico (protocolos, sintaxes, redes, etc), sendo que os mesmos não correspondem, necessariamente, aos limites de uma ORB instalada.
Domínios possibilitam o particionamento de um escopo em grupos de objetos que tenham características em comum. Um determinado objeto pode, portanto, fazer parte de mais de um domínio, desde que satisfaça a todos os seus requisitos. Considera-se o limite de um domínio como o limite de um escopo no qual uma determinada característica tem algum significado. Como exemplos de domínios, podemos citar os escopos: de uma referência de objetos; de uma sintaxe de transferência de mensagens; de um endereço; de uma mensagem de rede; de uma política de segurança; de um identificador de tipos; de um serviço de transações qualquer; etc. Interoperabilidade só será possível através de uma perfeita conexão de domínios.
O problema básico de se conseguir interoperabilidade pode ser traduzido em como fazer para que um objeto Y, na ORB B, apareça como um objeto X, na ORB A, de maneira que esta última seja capaz de utilizar X da mesma forma que faria com um objeto qualquer que fosse, de fato, implementado por ela. Além disso, todas as funcionalidades fornecidas pela ORB B devem ser acessíveis pela ORB A através de X. Com isso, uma requisição em X deve ser transformada numa requisição em Y e, para tanto, devemos ser capazes de criar X através da passagem de Y para a ORB A. O objeto X será, então, um representante de Y na ORB A, recebendo a denominação de proxy de Y.
Durante a conversão da requisição pode ser necessário o mapeamento de outros domínios, além do definido pela referência de objeto. Múltiplos domínios podem estar sendo ultrapassados simultaneamente e cada conversão será igualmente necessária para o completo entendimento pela ORB destino. Uma forma de se conseguir interação entre duas ORBs é através de um Interceptador. Esse mecanismo possibilita que uma invocação iniciada numa ORB seja atendida por um objeto em outra ORB. Logicamente um Interceptador é posicionado entre os dois domínios que tem por objetivo unir.
O mecanismo de interceptação pode ser: