Bonobo, el sistema de componentes

La consolidación de Bonobo como una de las tecnologías más importantes del proyecto GNOME no es más que el cumplimiento de uno de los objetivos marcados inicialmente dentro de GNOME: la creación de un sistema de componentes para UNIX/Linux que permitiera el desarrollo de aplicaciones "profesionales", de gran envergadura, al estilo de lo que nos encontramos en otros sistemas operativos.

Esta consolidación se traduce, en GNOME 2.0, en que todas, absolutamente todas las aplicaciones GNOME usan Bonobo, con las ventajas que esto conlleva, como el fácil reemplazo de cada una de las partes sin afectar al resto del sistema, etc. Cuando una aplicación almacena su configuración, o cuando intenta visualizar un fichero en determinado formato, o cuando interactua con el sistema, en todos estos casos, la comunicación entre los distintos componentes del sistema se hace mediante Bonobo. Esto es algo que no es nuevo dentro del proyecto GNOME, donde desde el principio, de una u otra forma, casi todas las aplicaciones usaban CORBA (la tecnología sobre la que se basa Bonobo). La diferencia es que antes el uso era un tanto "opcional", por lo que cada aplicación lo implementaba como mejor le convenía al/los programador(es) de ese proyecto determinado. Ahora, mediante Bonobo, todas las interfaces entre las distintas aplicaciones estan claramente definidas por Bonobo, por lo que cualquier aplicación puede comunicarse con cualquier otra sin necesidad de conocer las interfaces CORBA que esa aplicación determinada usa para ello. Sólo tiene que conocer las interfaces de Bonobo, que son públicas y estan ampliamente documentadas.

Uno de los pasos más importantes que se han dado con respecto a la versión 1.4, es la separación de todas las librerías en dos partes: la parte no gráfica, perfectamente utilizable por aplicaciones totalmente ajenas a GNOME y al sistema X Window, y la parte gráfica, que esa sí que es dependiente del sistema gráfico y de GNOME. Esto está facilitando el uso de la tecnología base de GNOME en cualquier tipo de aplicación, por lo que se están empezando a ver multitud de aplicaciones/soluciones que integran, por ejemplo, entornos de servidores, donde instalar el sistema gráfico es una aberración, con entornos de oficina, donde priman las estaciones de trabajo con GNOME (o cualquier otro sistema de escritorio).

Otro punto en el que se ha puesto especial énfasis es en solucionar el problema de los "bindings" (enlaces con otros lenguajes de programación), que se estaba empezando a convertir en algo bastante problemático. Y es que, por cada librería de la plataforma GNOME, hay que escribir una versión para cada uno de los lenguajes de programación soportados (que, en el caso de GNOME, siempre han sido numerosos). Así, a partir de ahora se pretende que las aplicaciones exporten sus funcionalidades internas no a través de librerías en C que luego tengan que ser "enlazadas" a otros lenguajes, si no a través de los interfaces CORBA definidos por Bonobo, de forma que simplemente haya que añadir soporte para Bonobo en cada uno de los lenguajes soportados para que aplicaciones escritas en dichos lenguajes puedan acceder a todas esas funcionalidades exportadas por las aplicaciones. Este objetivo se está cumpliendo perfectamente, y ya podemos usar Bonobo desde lenguajes tales como C (en el que está desarrollado el propio Bonobo), C++, Guile, Perl, Python, Java.

Tambien es de destacar la fusión que han experimentado en estos últimos meses OAF (Object Activation Framework), el sistema de activación de objetos CORBA de GNOME 1.4, y el propio Bonobo. La razón para esta fusión es que no estaba muy clara la línea que separaba a ambas librerías, más bien parecía que, si bien con objetivos aparentemente distintos, en algunas cosas se solapaban la una con la otra. Así, ahora tenemos bonobo-activation, que consiste en el antiguo OAF (sistema de activación de objetos, como un DNS para objetos CORBA) junto con la parte básica del sistema de componentes, que no es más que el famoso interfaz CORBA Bonobo::Unknown. El resto de interfaces CORBA de Bonobo estan en las dos librerías de las que se compone ahora Bonobo: libbonobo (los interfaces no gráficos) y libbonoboui (los interfaces con salida gráfica, como controles, documentos compuestos, etc).