Skip to main content

Que savons-nous vraiment du comportement des packages sur le registre npm ?

Écrit par
How much do you really know about the npm package registry

22 avril 2019

0 minutes de lecture

Dans le rapport State of Open Source Security 2019, nous avons présenté l’évolution de la croissance des dépôts de packages par langage au cours des dernières années. Comme nous l’avons montré, npm arrive chaque année largement en tête.

Au moment de la rédaction de cet article, npm comptait plus de 960 000 packages et avait enregistré l’ajout de plus de 250 000 packages rien qu’en 2018.

Dans ce contexte, vous êtes-vous demandé ce que vous saviez du comportement des packages dans l’écosystème npm ? Combien de packages sont liés entre eux ?

Partons à la découverte du plus grand registre de packages open source actuel !

Dans leurs travaux de recherche récemment publiés, K. Vaidya, Ruturaj & De Carli, Lorenzo & Davidson, Drew & Rastogi, Vaibhav. (2019). Security Issues in Language-based Sofware [sic] Ecosystems, les auteurs étudient les attaques de sécurité visant les dépôts de langages open source tels que npm et PyPI, en s’intéressant principalement aux packages malveillants et à la façon dont ils sont influencés par les caractéristiques propres à chaque écosystème de langage.

J’ai trouvé cette étude très intéressante et j’ai eu envie de transformer certaines de ses données en questions à poser sur un espace public comme Twitter, afin d’évaluer la perception qu’ont les développeurs JavaScript de l’écosystème npm en matière de santé des packages et de liens entre eux.

Idées reçues sur les packages du registre npm

À partir de cet article de recherche, j’ai extrait des données correspondant aux questions suivantes, pour les soumettre à un sondage général :

  1. Quel pourcentage des packages npm n’ont ni dépendances ni dépendants ?

  2. Quelle est la profondeur moyenne d’une chaîne de dépendances de packages sur npm ?

  3. Combien de packages npm peut-on considérer comme *abandonnés ? (* selon un indicateur tel que l’absence de publication au cours des 12 derniers mois)

Après avoir choisi ces questions intrigantes, j’ai publié des sondages sur Twitter pour recueillir des réponses.

Les packages orphelins sur npm

Première question : Quel pourcentage des packages npm n’ont ni dépendances ni dépendants ?

959,567 ? sur npm
Quel pourcentage des packages sur #npm n’ont ni dépendances ni dépendants ?#javascript #nodejs #npmjsMerci de retweeter !

— Liran Tal (@liran_tal) 15 avril 2019

La bonne réponse : 28 % des packages npm n’ont ni dépendances ni dépendants.

Comme on peut le constater, 66 % des personnes pensent que le registre npm est un réseau très complexe de liens entre packages. Pourtant, selon l’article de recherche, seuls 28 % des packages du registre npm n’ont ni dépendances ni dépendants — une réponse choisie par seulement 7 % des personnes interrogées.

Pour le dépôt PyPI, ce chiffre atteint 36 %.

Profondeur des chaînes de dépendances sur npm

Deuxième question : Quelle est la profondeur moyenne d’une chaîne de dépendances de packages sur npm ?

#npmjs compte 961 600 packages
La profondeur moyenne d’une chaîne de dépendances de packages sur npm est de :#javascript #nodejs #npmjsMerci de retweeter !

— Liran Tal (@liran_tal) 17 avril 2019

La bonne réponse : la chaîne de dépendances de packages sur npm compte en moyenne 4,39 packages.

Le rapport révèle que la profondeur de l’arbre des dépendances, c’est-à-dire la longueur de la plus longue chaîne de dépendances, dépasse en moyenne quatre packages. À titre de comparaison, ce chiffre n’est que de 1,7 pour PyPI.

Tableau 3 comparant les graphes de dépendances des packages npm et PyPI selon le nombre de nœuds, le degré sortant moyen, la taille de l’arbre de dépendances et sa profondeur.

On peut en déduire que les développeurs JavaScript privilégient la création de petits modules de code réutilisables et les réutilisent effectivement dans différents projets.

Les packages abandonnés sur npm

Troisième question : Combien de packages npm peut-on considérer comme abandonnés ?

Un dernier sondage intéressant !
Combien de packages sur #npm peut-on considérer comme abandonnés[1] ?

[1] selon un indicateur tel que l’absence de publication au cours des 12 derniers mois. Merci de retweeter ! #javascript #nodejs #npmjs #opensource— Liran Tal (@liran_tal) 18 avril 2019

La bonne réponse : 61 % des packages npm n’ont pas été mis à jour au cours des 12 derniers mois.

Dans la continuité de recherches antérieures, cette étude définissait les packages abandonnés selon leur date de publication. Autrement dit, l’absence de publication d’une nouvelle version par un responsable de maintenance au cours des 12 derniers mois était considérée comme un signe d’abandon.

Il n’est pas facile de distinguer les packages non maintenus de ceux qui ont toutes les fonctionnalités nécessaires et ont simplement atteint un niveau de maturité ne nécessitant plus de nouvelles versions. Même si certains peuvent remettre en question cet indicateur, les chiffres sont impressionnants.

Le rapport a recensé environ 496 000 packages npm (sur quelque 801 000 à l’époque de l’étude) qui n’avaient connu aucune publication au cours des 12 derniers mois. Cela représente 61 % des packages npm, sans aucune nouvelle version.

Pour le dépôt PyPI, le chiffre est similaire : 57 % des packages n’avaient pas connu de nouvelle version au cours des 12 derniers mois.

Les packages abandonnés sont-ils moins souvent téléchargés ? Pas vraiment.

Comme le montre la suite du rapport, le nombre cumulé de téléchargements atteint des milliards dans les deux écosystèmes.

Le graphique ci-dessous répertorie 20 des packages les plus téléchargés, que nous avons considérés comme abandonnés selon les critères du rapport. Ces packages, comme wordwrap et is-object, totalisent des centaines de millions de téléchargements par an.

Graphique à barres montrant les téléchargements de packages npm abandonnés, dominés par wordwrap et lodash, avec une tendance générale à la baisse sur 20 packages.

En résumé

Avec la croissance des logiciels open source, nous pouvons nous attendre à voir davantage d’études sur les dépôts publics de packages par langage et leur sécurité.

Graphique linéaire montrant le nombre total de packages indexés sur Maven Central, npm, NuGet, PyPI et RubyGems, de janvier 2017 à janvier 2019.

L’étude se conclut ainsi :

  • Elle recommande d’améliorer les dépôts de packages et les gestionnaires de packages. Par exemple, dans le contexte des attaques par typosquattage, il est recommandé d’avertir les utilisateurs lorsqu’ils installent des packages différents de ceux qu’ils souhaitaient initialement installer.

  • La nature de ces écosystèmes laisse penser qu’ils sont « propices à l’exploitation et que le nombre d’incidents ne fera qu’augmenter à l’avenir », pour reprendre les termes du rapport.

Utilisez l’open source. Restez en sécurité.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis de capture du drapeau en regardant à la demande notre atelier virtuel d’initiation.