Debian y Fedora están tratando de abordar el problema de las dependencias
Las distribuciones de Linux se enfrentan al problema de las crecientes dependencias de los proyectos, si bien la cantidad de dependencias para el código Python, Perl y Ruby se mantiene dentro de límites razonables, los proyectos de JavaScript practican la división en bibliotecas muy pequeñas, a menudo realizando una función simple.
El repositorio de NPM ya tiene más de un millón de paquetes y las aplicaciones típicas se vinculan con cientos de dependencias, que a su vez tienen sus propias dependencias, lo que dificulta el mantenimiento y la distribución de paquetes tradicionales con aplicaciones JavaScript en distribuciones de Linux.
Debido al estrecho entrelazamiento de las dependencias de las bibliotecas de JavaScript, la actualización de cualquier paquete con dichas bibliotecas en una distribución puede romper otros paquetes.
Los enlaces de versiones exacerban el problema: una biblioteca puede requerir una versión de una dependencia para funcionar de manera estable y otra puede requerir otra.
Muchos proyectos requieren para funcionar las últimas versiones de las bibliotecas, que no siempre cumplen con los requisitos de estabilidad de la distribución (el desarrollo continuo se practica en el ecosistema Node.js utilizando las últimas versiones de frameworks, y la distribución necesita soporte durante varios años).
Los intentos de corregir versiones de paquetes en la distribución solo conducen a un aumento de versiones desactualizadas en el repositorio que no se han actualizado durante años. La interrupción del mantenimiento de un paquete afecta negativamente a muchos otros paquetes y genera aún más problemas.
Además, las dependencias cruzadas llevan al hecho de que muchas bibliotecas de Node.js se vuelven imposibles de desinstalar del sistema, lo que, a su vez, impide desinstalar otros programas de Node.js.
Para hacer frente a esta situación, el proyecto Fedora aprobó recientemente un plan para detener la formación predeterminada de paquetes separados con bibliotecas utilizadas en proyectos basados en Node.js.
Decidió, comenzando con Fedora 34, suministrar solo paquetes base para Node.js con un intérprete, encabezados, bibliotecas primarias, binarios y herramientas básicas de administración de paquetes (NPM, yarn).
En las aplicaciones del repositorio de Fedora que usan Node.js, se permite incrustar todas las dependencias existentes en un paquete, sin dividir y separar las bibliotecas utilizadas en paquetes separados.
La incrustación de bibliotecas permitirá deshacerse del desorden de paquetes pequeños, simplificar el mantenimiento del paquete (anteriormente, el encargado de mantenimiento pasaba más tiempo revisando y probando cientos de paquetes con bibliotecas que en el paquete principal con el programa), salvar la infraestructura de conflictos de bibliotecas y resolver problemas con la vinculación a versiones de bibliotecas (mantenedores incluirá versiones probadas y probadas en producción en el paquete).
La desventaja de la integración será la complicación del proceso de traer correcciones a las vulnerabilidades en las bibliotecas, lo que requerirá un trabajo coordinado de los mantenedores de todos los paquetes que incluyen la biblioteca vulnerable. Existe el peligro de que un paquete se olvide de actualizar una biblioteca vulnerable integrada y el paquete pase desapercibido.
Los desarrolladores de Debian también están discutiendo el cambio a un modelo similar de integración de dependencias en paquetes. Además de Node.js, la discusión toca la creación de paquetes para la plataforma Kubernetes y proyectos en los lenguajes PHP y Go, para los cuales existe una tendencia a dividirse en pequeñas dependencias. Aún no se ha tomado una decisión, pero se espera que con el tiempo el problema solo empeore y tarde o temprano el proyecto se vea obligado a hacer algo.
La interfaz web gsa (Greenbone Security Assistant) para el escáner de seguridad gvm (Greenbone Vulnerability Management) se cita como un ejemplo de los problemas que tienen los mantenedores de paquetes.
La versión enviada por Debian de gsa resultó ser incompatible con las versiones más nuevas de gvm, pero no fue posible actualizar gsa a la versión actual, ya que contiene cambios significativos y usa npm para descargar las bibliotecas Node.js necesarias.
Las bibliotecas solicitadas son demasiadas y requieren la creación de nuevos paquetes en Debian para que alguien los mantenga, ya que las reglas de Debian prohíben cargar componentes externos durante el proceso de construcción.
Fuente: https://lwn.net/