¿Qué es una biblioteca (o «library») en una distribución GNU/Linux?

Las bibliotecas son una de las partes más esenciales del software, y es una palabra que posiblemente hayas visto en tu gestor de paquetes. ¿En qué consisten realmente?

Unos libros en una estantería

En raras ocasiones, en GNU/Linux te encontrarás mensajes de error o de advertencia que hacen referencia a palabras como biblioteca o library. También en español se le suele llamar librería, y aunque desde el punto de vista pragmático se refiere al mismo concepto, algunas personas cuestionan este nombre porque la traducción correcta de library es biblioteca. Sin embargo, una pregunta más importante independientemente del nombre es: ¿qué es esto? En este post voy a tratar de definirlo en conceptos simples y sin dar mucha vuelta.

¿Qué es una biblioteca de software?

Una biblioteca de software es una pieza de software que aunque ofrece funcionalidad, igual que la que puedes encontrarte en un programa tradicional, no puede ser clasificado como programa porque como tal no lo puedes lanzar haciendo doble clic sobre su icono o escribiendo un comando de terminal.

El rol de la biblioteca es proporcionar servicios que puedan ser usados por otras piezas de software. Estos servicios a menudo se corresponden con código que es ejecutado por el ordenador a petición de un programa o de otra biblioteca. De este modo, la biblioteca recibe lo que se podría denominar una petición de servicio para que haga una operación, y eso hará que nuestro ordenador procese cierto código máquina proporcionado por la biblioteca para generar un resultado del servicio.

Por poner un ejemplo, en cualquier distribución GNU/Linux podemos identificar varios editores fotográficos, como son GIMP, Inkscape o Krita. Sin embargo, la realidad es que ninguno de estos programas que menciono sabe cómo transformar los ceros y unos que hay dentro de una foto de tipo JPEG en los colores que luego se ven por pantalla. En su lugar, usan los servicios de una biblioteca de manipulación de imágenes JPEG. Esta biblioteca puede ser, por ejemplo, libjpeg.

libjpeg es una biblioteca experta en el manejo de imágenes JPEG. Sabe cómo transformar esos unos y ceros en píxeles, y sabe cómo volver a codificar píxeles para crear una foto nueva. Sin embargo, no puedes interactuar directamente con una biblioteca. No hay un icono para abrir libjpeg, ni tampoco puedes simplemente escribir en la terminal de tu sistema operativo el comando libjpeg para interactuar con este software.

¿Por qué existen las bibliotecas de software?

Puede ser visto desde fuera como poco educado que un programa se aproveche de las funciones de otro para hacer su trabajo. Sin embargo, en realidad esta situación no sólo es ventajosa sino que por evolución hemos llegado a ella. Existen varias razones por las cuales las bibliotecas de software tienen aceptación y se suelen utilizar para distribuir software.

Una de las ventajas es que permite reducir el tamaño de un programa. Si cada programa del mercado tuviese que incorporar su propio descodificador de imágenes JPEG, por ejemplo, los paquetes de software ocuparían más espacio de almacenamiento debido a que cada programa tiene que incluir sus propias instrucciones de procesador para que el ordenador pueda hacer esas tareas. Hoy en día no es un problema tan grande como antes, pero cuando los ordenadores tenían discos duros más pequeños sí que era de agradecer. Incluso hoy en día, en algunas placas de computación y otro tipo de microordenadores, suele ser importante medir para qué se usa cada byte de almacenamiento.

Por otra parte, que la comunidad centre sus esfuerzos en una biblioteca común que sólo sepa hacer bien una cosa pero que la haga bien, facilita que las mejoras que se incorporen a las bibliotecas estén disponibles a la vez para todos los programas que usen sus servicios, algo que hace que todos los programas se beneficien a la vez. Imagina que un día se inventa un algoritmo nuevo que es capaz de decodificar imágenes JPEG mucho más rápido. Si hay que enseñarle ese algoritmo a cada programa, tendríamos programas descompensados que serían más lentos. Si se hace esa mejora en la biblioteca, todos los programas que usen sus servicios pueden verse favorecidos a la vez.

También está el tema de la seguridad. A veces los procedimientos de cálculo que ejecutan los programas pueden ser arriesgados, y un programa malicioso puede aprovecharse de ciertos errores de computación en algunos de estos programas para hacer cosas inapropiadas. Es más sano corregir el error una vez y que todos los programas que dependan de ella se vean beneficiados a la vez, a tener que arreglar por separado cada programa, puesto que algunos no se actualizarán tan deprisa y podría suponer un riesgo de seguridad a los usuarios.

¿Por qué a veces las bibliotecas de software dan problemas?

Las bibliotecas de software no siempre funcionan bien. En ocasiones, puede ocurrir que un servicio se presta diferente en la versión 1.0 de una biblioteca, que en la versión 2.0 de la misma biblioteca. Si un programa ha determinado que necesita la versión 1.0, pero otro programa necesita usar la versión 2.0, será complicado satisfacer ambas demandas sin instalar a la vez ambas versiones.

Soluciones como AppImage buscan precisamente solucionar estos problemas haciendo que cada paquete de software traiga consigo mismo una copia separada de la biblioteca, a costa de perder las ventajas para el usuario final. Los programas que se distribuyen como AppImage pesan más, y si se instalan varios puede ocurrir que ocupen más espacio. Sin embargo, resulta útil para solucionar este tipo de problemas por lo que al final del día, dado el tamaño de los medios de almacenamiento típicos de la actualidad, no se considera un problema.

Flatpak y Snap resuelven este problema de forma más limpia, permitiendo que múltiples versiones de una misma biblioteca estén instaladas a la vez en el ordenador pero en lugares separados, y utilizando un sofisticado sistema de resolución para que un programa indique de forma exacta qué versión de una biblioteca necesita que le proporcione servicios.

Autor: Dani

De todas las cosas que hace en internet, Dani también es el editor de nosgustalinux.es y del canal de YouTube, youtube.com/nosgustalinux. Ahora que Dani vuelve a ser usuario de GNU/Linux, invierte más tiempo en solucionar problemas con su ordenador y se dedica a compartirlos en nosgustalinux.es.