Un gestionnaire de paquets, c’est quoi ?

Un gestionnaire de paquets, c’est quoi ? A quoi ça sert ? Avantages et défauts.
Philippe.jpg
Philippe AUBERTIN, Javaman aigriMis à jour le 19 Août 2019
AXOPEN_Blog_GestionnairePaquet.jpg

Dans le monde du développement, il y a de ces outils indispensables qui nous facilitent la vie et dont on ne pourrait plus jamais se passer... j’ai nommé : le gestionnaire de paquets ! Vous avez dit paquet ? Mais, qu’est-ce qu’un paquet ?

Les paquets et leurs problématiques

Avant de définir ce qu’est un gestionnaire de paquets, prenons le temps de comprendre ce qu’est un paquet et quelles sont les difficultés qu’ils engendrent.

Un paquet, c’est quoi ?

Lorsque vous créez un projet de développement d’application, vous ne créez en réalité pas tout le projet dans ses moindres détails (oui, nous sommes des développeurs, nous sommes partisans du moindre effort :) ). Vous faites appel bien souvent à des fonctions existantes et et des composants réutilisables appelés des librairies.

Pour faire très simple, un paquet est composé d’une librairie (ensemble de fonctionnalités qui ont déjà été développé par une quelqu’un (code source ou binaire) que vous pouvez utiliser dans votre application) et de ses dépendances.

Le cycle de vie des librairies se compose généralement de 3 digits : les versions majeures, les versions mineures, et les correctifs de bug. Mais attention, chaque librairie dispose d’un cycle projet qui lui est propre.

Enjeux & problématiques des paquets

Vous avez téléchargé vos paquets, vos librairies, et vous créez votre projet, c’est génial ! Puis le temps passe, et c’est là que les ennuis commencent...

En effet, les librairies que vous utilisez ne sont pas inscrites dans le marbre ! Elles ne sont pas figées, leurs éditeurs les font évoluées régulièrement et à des rythmes complètement imprévisibles... Vous l’aurez compris, ça rend la phase de maintenance de l’application terriblement complexe !

Parce que oui, lorsqu’on installe des librairies, elles ont des dépendances entre elles et des numéros de versions... et c’est ça la véritable difficulté : réussir à s’organiser pour garder la cohérence entre toutes les librairies.

Deux choix s’offrent alors à vous : gérer les dépendances à la main en suivant tout avec des graphiques (ce qui est un job à temps plein), ou utiliser un gestionnaire de paquets !

Un gestionnaire de paquets pour le développement, c’est quoi ?

Définition d’un gestionnaire de paquets

Le gestionnaire de paquets est un outil permettant de gérer les paquets et leurs mises à jour avec un objectif principal : garder la cohérence entre toutes les dépendances.

Son job se divise en deux parties :

  • Récupérer les librairies (les morceaux de code qui ont déjà été développées par d’autres personnes : communauté, fournisseur de services , etc. ) et les intégrer dans votre projet pour que vous puissiez les utiliser.
  • Maintenir les librairies dans le temps, de savoir si et quand il faut les mettre à jour... Eviter d’avoir des incompatibilités !

Les gestionnaires de paquets de développement les plus connus à ce jour sont NPM, Nuget, Maven et Gradle. Certains gestionnaires de paquets vont d’ailleurs plus loin en proposant d’autres fonctionnalités comme la gestion de builds et de profils (type développement, type recette) et le paramétrage d’environnement pour l’applicatif.

Les avantages des gestionnaires de paquets

Les gestionnaires de paquets n’ont que des avantages à être utiliser :

  • Configuration automatique : avec le gestionnaire de paquets, on peut configurer par exemple automatiquement les versions de mises à jour de sécurité des paquets, et demander une autorisation du développeur pour les mises à jour majeures.
  • Eviter les duplications : Ça permet aussi d’éviter les duplications ( exemple : si deux librairies qu’on utilise, utilise la même autre librairie, ça évite d’avoi à télécharger deux fois si jamais on l’avait téélchargé en dur dans notre projet.
  • Optimiser et gagner du temps dans son projet : lorsqu’on a des milliers de librairies, ça peut vite devenir un tas de nœud ! pas de solution parfaite pour déméler tout ce bazar J

C’est simple, avec le gestionnaire de paquets, je dis : « j’ai besoin de la librairie XX, merci de me récupérer tout ce dont cette librairie a besoin et de surveiller son évolution »

Par exemple, il nous ait déjà arrivé d’avoir un paquet de librairies avec deux versions différentes dans le même projet... et là, ça devient compliqué, le projet pète dans tous les sens.

Des défauts chez les gestionnaires de paquets ?

Même si les gestionnaires de paquets sont vraiment très bien et qu’on a pas grand chose à redire sur le sujet, ils sont encore largement perfectibles du coté de la sécurité. Les failles de sécurité sont un enjeu majeur, elles sont de plus en plus fréquentes au sein des projets, et proviennent parfois de librairies comportant des virus...

Aussi, les éditeurs de gestionnaires de paquets ont commencé à traiter le sujet en introduisant la notion de "paquets certifiés" qui garantissent la vérification et la validation de ces derniers. Or, c’est encore loin d’être le cas pour toutes les librairies tant il y en a... Affaire à suivre !

Pour conclure

Aujourd’hui, nous sommes tous unanimes sur le sujet : on ne peut plus se passer des gestionnaires de paquets ! En même temps, il suffit simplement de taper une ligne de commande et le gestionnaire télécharge et se charge de tout ce dont vous avez besoin.

Et comme dans un projet classique, nous finissons vite avec plusieurs milliers de librairies sans même nous en rendre compte, les gestionnaires de paquets ce n’est pas une option pour nous, c’est la base du développement !