# Introduction

ODBC and SQL are established standards. The problem is, that ODBC doesn't specify the wire protocol and for some databases no ODBC driver exists. You might use RPC, TCP/IP, or shared memory and signals to pass the request from the client to the server. So you have to use the database specific ODBC library. This library might not be available for the CPU or operating system on which the client is running.

SQL itself is also not standardised enough, so that source compatibility can not be assured for all database servers. And for some sort of servers, SQL is not even feasible (think about LDAP).

GDA tries to tackle the ODBC problem and help you with the SQL problem. It's a sort of middleware (or can be blown up to be a middleware layer) to access different data sources. It offers a high level view of data sources and has some places where you can plug in low level access to the database for special tasks.

GNOME Data Access (GDA) is defined as a set of plug-in interfaces. The level of abstraction provided by GDA makes it possible to access any kind of data source, provided that a plug-in implementing those interfaces and accessing this particular data source is written.

It offers a wrapper around the database internals, thus making it easier for programmers to make use of all the power provided by many RDBMS without even knowing about it. It comes along with a library, for both clients and servers, as a C implementation of this architecture. This level of abstraction would make possible to, at a later time, change all the internals without having to modify applications using the libraries.

Along with these libraries (and associated header files and language bindings for development), libgda includes several tools and utilities to help you with the task of developing applications based on libgda, as well as for automating some database-related tasks.

libgda is implemented for UNIX -like operating systems (including Linux), and does not depend on other libraries apart from libxml2 and Glib, which makes it a very lightweight system also ideal for applications to be run on hardware-limited systems. It was once part of the GNOME-DB project, and is still used as the basis for it, but it's been separated from it to remove all GNOME dependencies and thus allow non-GNOME applications to be developed based on it.