Analyse à grande échelle de la gestion des versions sémantiques dans NPM
Author
Venue
Mining Software Repositories (MSR) 2023
Abstract
Le référentiel de paquets NPM contient plus de deux millions de paquets et génère des dizaines de milliards de téléchargements par semaine. Presque toutes les applications JavaScript utilisent le gestionnaire de paquets NPM pour installer des paquets à partir du référentiel NPM. NPM s'appuie sur un schéma de « versionnement sémantique » (« semver ») pour maintenir un écosystème sain, dans lequel les corrections de bogues sont transmises de manière fiable aux paquets en aval aussi rapidement que possible, tandis que les modifications importantes nécessitent une intervention manuelle de la part des responsables de maintenance des paquets en aval. Afin de comprendre comment les développeurs utilisent semver, nous avons constitué un ensemble de données contenant toutes les versions de tous les paquets sur NPM et analysé le flux des mises à jour à travers l’écosystème. Nous avons développé un résolveur de dépendances « voyageur dans le temps » pour NPM, qui nous permet de déterminer précisément quelles versions de chaque dépendance auraient été résolues à différents moments. Nous avons segmenté notre analyse pour permettre une analyse directe des mises à jour liées à la sécurité (celles qui introduisent ou corrigent des vulnérabilités) par rapport au reste de l’écosystème. Nous constatons que lorsque les développeurs utilisent correctement Semver, les mises à jour critiques telles que les correctifs de sécurité peuvent se propager assez rapidement vers les dépendances en aval dans la majorité des cas (90,09 %), mais cela ne se produit pas toujours, en raison de l’utilisation imparfaite par les développeurs des contraintes de version Semver et des incréments de numéro de version Semver. Nos conclusions ont des implications tant pour les développeurs que pour les chercheurs. Nous mettons notre infrastructure et notre ensemble de données à la disposition du public sous une licence open source.
