libgda é composta por três camadas independentes. A camada inferior é composta pelos provedores GDA, que são servidores CORBA cuja tarefa é mapear a API específica a determinada fonte de dados ao modelo GDA. Ou seja, eles são objetos CORBA que implementam a interface CORBA GDA.
A camada do meio é a utilizada diretamente por aplicações desenvolvidas com libgda: um biblioteca que encapsula o código CORBA, escondendo toda a complexidade inerente ao CORBA da sua aplicação. Esta camada também inclui várias funções utilitárias para ajudá-lo no desenvolvimento de aplicações baseadas em GDA.
Finalmente, em cima de tudo isso estão os programas distribuídos com o restante do pacote GDA, bem como qualquer aplicação que faz uso das bibliotecas GDA.
libgda é baseado em CORBA e utiliza ORBit como implementação CORBA. Basicamente o sistema fornece um arquivo IDL como a interface para o cliente. Para cada diferente fonte de dados (ODBC, Sybase, Informix, MySQL, LDAP, ...) um servidor deve ser escrito. Este servidor é preferencialmente um biblioteca compartilhada linkada a um pequeno programa (driver) para formar um servidor CORBA independente. Desta maneira é possivel usar o servidor como uma biblioteca para o cliente, aumentando a eficiência (nem sockets nem 'context switches' são necesários, uma vez o código está rodando na mesma máquina e no mesmo espaço de memória).
A vantagem de se usar um servidor CORBA é que o servidor pode rodar em um outra máquina, balanceando a carga. Isto é possível porque ORBit é pequeno e rápido. Você pode usar o mesmo servidor de um linguagem de script que entenda CORBA e você pode fazer 'tracing' e controle de transações no servidor, sem necessidades de alterações no cliente. A desvantagem é que se tal provedor "der pau" todos os clientes são desconectados do banco de dados. Para superar este problema é possível que cada cliente requeira um nova cópia do provedor (entretanto, a API para o cliente ainda não tem esta opção).
Os outros tipos de provedores são bibliotecas compartilhadas. Estes provedores são linkados ao cliente quando o cliente requer algo do provedor. A desvantagem é que o servidor e o cliente têem que estar na mesma máquina. Mas qualquer problema com o servidor afetara somente um cliente. O custo de inicialização é comparável ao do provedor executável. A grande vantagem deste tipo de provedor é que a depuração do código do provedor é mais simples, uma vez que você não pode anexar GDA a um provedor já rodando e você pode também apanhar error durante a inicialização do servidor.
Por padrão cada provedor GDA é disponível como executável e como biblioteca compartilhada. O processo de compilação e as convenções usadas para implementar o provedor se asseguram que os executáveis e bibliotecas compartilhadas sejam compiladas e instaladas. Ou seja, provedores GDA são implementados em bibliotecas compartilhadas que são então linkadas a um pequeno programa que age exatamente como um driver para a biblioteca compartilhada.