A medida que la cantidad de datos en el área de ciencias de la vida y en otras áreas del conocimiento aumenta exponencialmente, surge la necesidad de estructurar y manejar sistemáticamente la información adquirida. Que los datos que manejamos sigan los principios FAIR es fundamental para la correcta manipulación de los datos y de su trazabilidad a lo largo del ciclo de vida del dato. Además, hay dos procesos fundamentales, los cuales estudiaremos en los próximos temas, que son la escalabilidad y la reproducibilidad.
Tradicionalmente, a fin de minimizar el número de pasos manuales que se llevan a cabo en un análisis, los procesos se han unido programáticamente en los denominados pipelines. Esta concatenación de procesos normalmente se estructura en archivos (scripts). Este tipo de automatización normalmente conlleva una elevada dependencia en las versiones del programario instaladas y en la arquitectura local del ordenador en el que se procesa.
Como seguramente ya os habréis dado cuenta, lenguajes de programación como Python, bash, R, etc. ejecutan lo que se denominan paquetes. Los paquetes pueden contener programas que pueden ser utilizados para poder procesar los datos a analizar. Un paquete por sí solo normalmente no tiene todo el código necesario para realizar sus funciones y necesita de otros a fin de ejecutarlas. De esta forma se reutiliza código, minimizando el tiempo de desarrollo de un paquete y creando herramientas más robustas. Para poder gestionar las dependencias que un paquete tiene sobre otros aparecieron los gestores de paquetes (apt, yum, Home Brew, pip…).
En el proceso de utilización y actualización de los paquetes nos podemos encontrar con diversas dificultades. Durante el desarrollo de un paquete es posible que una función se vea modificada, alterando los datos de entrada o salida, o eliminada en una versión más reciente del paquete. En el momento en que distintos paquetes dependen de esta función se pueden producir problemas de compatibilidad y no es suficiente saber que un paquete depende de otro sino también si depende de una versión en específico. La actualización de un paquete puede representar que otro paquete ya no funcione. Eso conllevaría la necesidad de instalar dos versiones distintas del mismo software, hecho que muchas veces no es posible. Otra problemática asociada a las versiones de los paquetes es la reproducibilidad de resultados en sistemas distintos. Dos ordenadores podrían tener instalados los mismos paquetes y sus dependencias, pero con versiones distintas, produciendo resultados diferentes. En proyectos multicéntricos a veces es necesario ejecutar los mismos procesos en cada una de las instituciones implicadas, con la seguridad de que no habrá variabilidad en los resultados debido al procesamiento de los datos.
Así, debemos controlar:
- La utilización de los mismos paquetes y de sus dependencias.
- La implementación en otros entornos computacionales evitando que la configuración local altere el resultado final.
Para mantener una configuración estable y aplicable a diferentes infraestructuras computacionales, fundamentalmente hay dos estrategias a seguir: la creación de entornos fijos y/o la creación de contenedores.