← Volver a los artículos

Gnome: Desarrollo de aplicaciones. El punto de partida

Artículo Desarrollo Gnome

En esta serie de artículos abordamos el desarrollo de aplicaciones para Gnome usando Vala como lenguaje de programación.

Gnome es un entorno de escritorio libre y de código abierto popular en distribuciones Linux como Ubuntu, Fedora y Debian. Su desarrollo comenzó en 1997 como una alternativa completamente libre a otros entornos de escritorio de la época, y desde entonces es mantenido por la GNOME Foundation con la colaboración de una amplia comunidad de voluntarios y empresas. Está construido principalmente con el kit de herramientas GTK y sigue una filosofía de diseño centrada en la simplicidad, la accesibilidad y la facilidad de uso.

Más allá de ser solo un entorno visual, Gnome incluye un extenso conjunto de tecnologías subyacentes, como el gestor de ventanas Mutter y el protocolo de visualización Wayland, además de herramientas para desarrolladores, extensiones para personalizar la experiencia y APIs para la integración de aplicaciones. Es el entorno de escritorio predeterminado en muchas de las distribuciones Linux más usadas, lo que lo convierte en una de las interfaces gráficas más influyentes del ecosistema del software libre, priorizando siempre principios como la libertad del usuario, la privacidad y la colaboración abierta en su desarrollo.

Desarrollar aplicaciones para Gnome generalmente implica usar el lenguaje Vala (aunque también son comunes C, Python o JavaScript/GJS) junto con el kit de herramientas GTK, que proporciona los widgets y componentes visuales necesarios para construir interfaces gráficas. El entorno de desarrollo suele apoyarse en GBuilder, el IDE oficial de Gnome, que facilita la creación, depuración y empaquetado de aplicaciones, además de integrarse con Flatpak, el formato estándar para distribuir apps de forma aislada y compatible con distintas distribuciones Linux. GNOME también ofrece una amplia documentación a través de la Gnome Human Interface Guidelines (HIG https://developer.gnome.org/hig/), que define pautas de diseño para asegurar que las aplicaciones mantengan una experiencia de usuario consistente, accesible y alineada con la filosofía del proyecto, así como APIs y bibliotecas (como libadwaita) para implementar componentes modernos de interfaz adaptados al estilo visual actual de Gnome.

Builder


Builder es el editor oficial para la construcción de aplicaciones para Gnome. Si estás empezando en el desarrollo de aplicaciones para Gnome es una buena opción empezar con Builder ya que nos va crear tanto la estructura con los ficheros básicos que necesitamos para hacer funcionar nuestra aplicación, instalar las dependencias y la integración con flatpak.

¿Qué lenguaje de programación usar?


Como hemos visto anteriormente Gnome permite usar varios lenguajes de programación que van desde C (lenguaje original en el que se desarrollo Gtk, Glib, GObject, etc...), js (Gjs), python, C++, C#, Java, Rust... en definitiva la elección del lenguaje de programación depende más del programador que del programa, pero hay que tener en cuenta que su elección podrá influir en el rendimiento y soporte ya que muchos de estos lenguajes usan bindings de las librerías originales de C.

Para esta serie de artículos vamos a usar Vala. Vala es un lenguaje moderno creado específicamente para el desarrollo en el entorno de Gnome. Si tenemos que hacer una comparación Vala es a C lo que TypeScript es a JavaScript, esto quiere decir que Vala no compila directamente a un binario si no que genera código nativo en C y compila en los ficheros en C. Esto lo veremos mas adelante cuando hablemos de Meson y Ninja.

¿Qué libs vamos a necesitar y que nos ofrece cada una?


Aunque existen una amplia gama de librería que se pueden usar dentro de una aplicación, que dependerá de su objetivo o finalidad para la que es programada, nos vamos a centrar en las son comunes para cualquier aplicación desarrollada para Gnome.

Gtk (Gimp toolkit)


Está quizás es una de las librearías mas polémicas en el desarrollo ya que el cambio de la versión 2 a la versión 3 hizo que las aplicación que estaban desarrolladas con la versión 2 no pudieran ser actualizadas a la versión 3 y necesitasen ser escritas de nuevo. Actualmente está en su versión 4 que es la que vamos a usar en esta serie de artículos y ya viene preparada para su uso con Wayland; podemos hablar un poco de wayland mas adelante, ya que es relevante para algunos aspectos del desarrollo como puede ser la colocación de ventanas en la pantalla, pero por ahora para el lector que no tenga mucha idea de que esto podemos decir que es un HAL (Hardware abstraction layer. Nos permite interactuar con el ratón, la pantalla, el teclado, etc...).

Esta librería se encarga del aspecto grafico y de las ventanas. Ventanas, listados, botones, tabs, menús, etc... todo la ui para el usuario se gestiona con gtk, existe una lib avanzada de gtk que es libadwaita que, podríamos decir que es una colección de widgets avanzados basados en gtk. 

https://valadoc.org/gtk4/Gtk.html

GLib


Una librería de propósito general que en un principio estaba dentro de GTK pero que con el tiempo se separó para poder usarla en aplicaciones que no necesitan ui gráfica. Se encarga de los tipos, memoria o cache entre otras cosas. 

https://valadoc.org/glib-2.0/GLib.html

Gio


Esta librería proporciona los mecanismos de entrada/salida como redes/conexiones, lectura/escritura de ficheros, control del ciclo de vida de la aplicación o gestión de configuraciones (Gsettings). Gio funciona como librería independiente pero forma parte de Glib.

https://valadoc.org/gio-2.0/index.htm

Estás serías las básicas para desarrollar una aplicación básica para Gnome. Es probable que hablemos de otras a lo largo de esta serie de artículos que explicaremos lo que hacen si es necesario para entender el contexto en el que se usan.

Otras herramientas para el desarrollo de aplicaciones con Gnome


Para el desarrollo de aplicaciones para Gnome vamos a necesitar otras herramientas como pueden ser Meson y Ninja que nos van a ayudar a resolver la dependencias, configurar la construcción de la aplicación (por ejemplo ficheros de traducción, instalación, recursos, ficheros de código, flags de compilación, etc... Iremos viendo en detalle más adelante que podemos hacer con esto y para que son necesarias pero por ahora con una una idea general y entender que papel juegan en el desarrollo de estas aplicaciones es suficiente.

Meson


Meson es un sistema moderno de construcción de software diseñado para ser rápido, sencillo y multiplataforma. En el ecosistema de GNOME desempeña un papel fundamental, ya que es la herramienta estándar para configurar, compilar e instalar la mayoría de sus aplicaciones y bibliotecas. Gracias a su sintaxis clara y a su integración con herramientas como Ninja, Meson simplifica la gestión de dependencias, las pruebas y la generación de paquetes, facilitando tanto el desarrollo como el mantenimiento de las aplicaciones de Gnome en diferentes sistemas operativos.

Ninja    


Ninja es una herramienta de compilación diseñada para ejecutar las tareas de construcción definidas por un sistema como Meson. En el desarrollo de aplicaciones Gnome con Vala, Ninja no se encarga de configurar el proyecto, sino de compilar el código fuente, enlazar las bibliotecas y generar el ejecutable siguiendo las instrucciones generadas por Meson. Esta combinación permite realizar compilaciones incrementales, agilizando el ciclo de desarrollo, pruebas y depuración de aplicaciones escritas en Vala para el entorno Gnome.


En el próximo artículo empezaremos a abordar la estructura de ficheros y directorios de una aplicación para Gnome.
Gnome: Desarrollo de aplicaciones. Estructura de ficheros