ENES

Dependencia de software

Código escrito por otra gente que tu programa necesita para funcionar.

Un árbol: mi app depende directamente de dos paquetes, que a su vez dependen de otros, así que un paquete chiquito al fondo del árbol termina también dentro de la app

Una dependencia de software es cualquier pedazo de código externo del que depende tu programa: una biblioteca de software para manejar fechas, un framework para armar páginas web, un driver para hablar con una base de datos. En vez de escribir todo desde cero, quienes desarrollan anotan los paquetes que necesitan en un archivo (package.json en JavaScript, requirements.txt o pyproject.toml en Python, go.mod en Go) y un gestor de paquetes los descarga.

Las dependencias tienen sus propias dependencias. Tu app quizás usa 20 paquetes de forma directa, pero esos traen otros, y esos otros traen más: son las dependencias transitivas, y una app web moderna suele terminar con cientos o miles. Un lockfile registra la versión exacta de cada una, para que el código que corre en la compu de un compañero y en el servidor sea exactamente el mismo.

Esto ahorra una cantidad enorme de trabajo, y también implica confiar en un montón de desconocidos. En 2016 un desarrollador borró un paquete minúsculo llamado left-pad y rompió builds en todo el mundo. En 2021 una falla en Log4j, una biblioteca de logs escondida dentro de incontables programas en Java, fue una de las vulnerabilidades más graves en años. En 2024 alguien pasó dos años ganándose la confianza del proyecto xz antes de colar una puerta trasera. Hoy los equipos usan herramientas como Dependabot para recibir alertas y actualizaciones, y fijan versiones siguiendo las reglas del versionado semántico.

Cuando las versiones chocan (el paquete A necesita la versión 1 de algo y el paquete B, la versión 2) se habla de infierno de dependencias. Mantener la lista corta y al día es parte del trabajo.

Para quedarse

Para seguir leyendo

Términos relacionados

Más de Software