Forge logicielle

Je vous ai déjà mentionné maintes fois ma « forge logicielle » ou encore un outil qui s’appelle GIT.
Mais vous avez peut-être en tête la question « quésaqo » (qu’est-ce que c’est) ? Si non, ce billet ne sera je pense que peu intéressant pour vous.
Par contre, pour les curieux, vous pouvez rester ;).

Une forge logicielle ?

  • C’est quoi ?
  • Ça ressemble à quoi ?
  • Ça sent quoi ?
  • Ça à goût à quoi ?

Autant de questions qui peuvent vous venir en tête.

Alors je vous rassure, ça n’a pas d’odeur et ça ne se mange pas !
Je vous rappelle dans l’idée qu’on parle de « logiciel », donc c’est déjà forcément de l’informatique, ça je pense que vous n’en doutiez que peu.

Ça ressemble à quoi ? Oui, la question est légitime !
Pourquoi ? Et bien tout simplement, c’est un logiciel, et pour une fois, ça a bien un look ! Je vous présenterais rapidement par la suite quelques forges logicielles qui existent de par le monde (virtuel toujours ;)).

C’est quoi ?

Je vais tenter de répondre à cette question de la façon la plus explicite possible pour des pseudo néophytes. Pas que cela soit contre qui que ce soit ou que je vous prennes pour des incultes bien loin de là, mais j’essaye au maximum dans ce genre de billet d’être le plus « simple » possible dans mes explications.
Le but n’étant pas technique, mais informationnel, on se contre fou de la précision pure des termes du moment que la généralité de ce que je veux vous transcrire est là. (N’en déplaise aux intégristes !)

Tout d’abord commençons par la base, un « logiciel » ou « programme informatique » ce n’est pas la simple fenêtre de votre navigateur Web (Firefox, Opera,… ) que vous utilisez pour me lire. Enfin, pour vous si, mais pour d’autres non.
Un « programme » quel qu’il soit, nécessite beaucoup de temps pour être réalisé.

Le versionning

Commençons par le commencement. À l’heure actuelle, je ne connais que très peu de personne travaillant sur des programmes qui n’utilisent pas un outil de gestion de version (versionning).

Rapidement, la gestion de version ça consiste en quoi ?  Tout simplement à historiser les différentes étapes de vie d’un fichier (Ou présentement du code) afin de pouvoir revenir en arrière, ou analyser les évolutions qui ont été implémentés.

Pourquoi faire me direz vous ?
Et bien pour plusieurs choses, la première, et l’idée de base, c’est de pouvoir suivre les mises à jour du code que l’on produit, pouvoir revenir en arrière au besoin et également pouvoir laisser de côté ce que l’on est en train de faire pour corriger quelque chose sur le même code de façon « urgente ».
Mais ce n’est pas tout ! Cela va permettre d’ajouter la notion de travail de groupe, mais ça on en reparle quelques lignes plus loin.

Dans l’idée, et je n’ai jamais vu autrement, une forge logicielle est forcément basé sur un outil de versionning.
Je vous en donne en vrac quelques un, mais sans rentrer dans le détail :

Je ne rentre pas plus dans le détail de ces outils, mais je reviendrais dans un prochain billet sur l’outil que j’utilise GIT. Les autres étant beaucoup moins utilisé (à ma connaissance toujours), et je trouve, moins complet et moins « ergonomique » si l’on peut dire.

Cas d’usage

Prenons un cas commun, quand vous achetez une voiture, elle a déjà, quand vous la recevez, les roues, le moteur, le volant, … et les options ! Cet ensemble est la voiture que vous utilisez. Si on transpose dans notre cas, c’est le navigateur Web.
Mais elle n’est pas sorti comme ça de la tête de celui qui l’a « pensé », c’est un long travail de design (pour la carrosserie par exemple), d’étude physique pour que la voiture et vous soyez en sécurité quand vous conduisez. C’est également un travail de réflexion, de test et de création pour les options que vous avez dedans, du style une climatisation, un autoradio, … Tout cela, même si la généralité fait que ce sont des options « par défaut » sont des ajouts qui ne sont nullement nécessaire au fonctionnement primaire de la voiture, mais c’est tellement pratique et utile que les constructeurs on fait le choix de les intégrer de base.

Pour un logiciel, c’est pareil. Pour le cas de notre navigateur, l’utilité de base et d’accéder à des sites Webs. Ni plus, ni moins. Ça c’est la base, et croyez moi sur parole, entre la complexité de base et les évolutions qui se font dans le domaine, le créer ou même le faire évoluer demande beaucoup de temps.
Les options, c’est tout ce qu’est capable de faire votre navigateur sorti de l’accès de base aux sites, on peut trouver :

  • Retenir votre mot de passe
  • Les marques pages
  • Se souvenir de quelle(s) page(s) vous avez visitée(s)

Les options que j’ai cité au dessus sont livrées « de base » avec le navigateur, et ce, que vous les utilisiez ou non. D’autres sont « ajoutables », par exemple des bloqueurs de publicité, on appelle ça des « add-ons » ou « plugins ».

Qu’en est-il de notre forge dans tout ça ?
C’est vrai que je me suis égaré pour vous poser un contexte compréhensible pour pouvoir vous expliquer le besoin et l’utilité d’une forge.

Pour reprendre notre navigateur, admettons la chose suivante, un personne a commencé à le créer de toutes pièces, ce navigateur, c’est du « code informatique », beaucoup de code ! Cette personne, ce « développeur » fournis une version fonctionnelle de ce navigateur à d’autres personnes (nous par exemple). Ok, c’est bien ça marche.
Mais les besoins évoluent, on veut ajouter des options à ce navigateur. Parce que ça peut être super utile (les marques pages quoi !), ou simplement parce que ça peut être cool (un petit thème très bling bling rose bonbon phosphorescent tiens !). À un moment, à force de penser à tout, le développeur va être un peu submerger.

C’est là qu’intervient la notion d’« équipe de développement ». Au lieu de travailler seul sur le projet, c’est une équipe qui va travailler dessus, donc X personnes vont écrire du code pour le seul et même navigateur (Attention on est pas encore aux add-ons là !). Seulement, travaille à plusieurs implique de fait plusieurs problèmes :

  • Le partage du code réalisé
  • L’accès simultané au code
  • La gestion de conflits de développement
  • L’intégration du code des autres

Faire ça à l’ancienne comme ça se faisait dans les débuts de l’informatique (c’est à dire en copiant les bouts de code de chacun pour les mettre bout-à-bout) est très long et surtout très complexe.
C’est pourquoi les forges logicielles ont été inventées. Elles permettent de faire toutes ces actions de fusion de code de chacun très « facilement » et sans y passer beaucoup de temps. C’est la forge elle même qui fait la fusion et plus vous à coup de copier/coller.

Fonctionnalités

Une forge logicielles peut embarquer plusieurs outils, plus ou moins utiles.
En vrac on va trouver :

  • Un outil de gestion d’incident demande.
  • Un outil d’édition de texte collaboratif.
  • Un outil de messagerie instantanée.
  • Un outil de gestion de documentation.

Quelques exemples de forges

Il existe pléthore de forges logicielles dans le monde, privée ou publiques, privatrice ou opensource.
Certaines sont disponible uniquement en mode « Cloud », ou à la Française en mode « informatique en nuage » (je ne supporte pas cette dénomination typiquement Française…), qui sont donc gérées par des grosses sociétés et qui de fait peuvent faire payer une certaine somme pour l’accès à des fonctionnalités particulières. Mais pour les géants de ces solutions, il y a quand même une bonne partie gratuite qui permet déjà pas mal de choses !
D’autres sont disponible en « auto-hébergé » ou en mode « on premises » ce qui in fine revient à la même chose plus ou moins de votre point de vue. L’avantage de ces solutions étant bien sur l’accès aux fonctionnalités qui peuvent ne pas être disponibles sur les forges en mode Cloud comme la possibilité de créer des « dépôts » privés (Cachés à ceux à qui vous n’avez pas donné l’accès).

Forges Cloud

Des géants se sont déjà positionnés pour mettre en place des systèmes de forge logicielle de grande ampleur :

  • GitHub (2008) : L’un des plus connus car l’un des plus utilisés mais également par son niveau de fonctionnalités très élevé.
  • GitLab (2011) : Originellement non designé pour le cloud, ils ont ouvert une forge à des utilisateurs. L’outil est bien, mais pour moi, pas transcendant par rapport à GitHub.
  • BitBucket (2008) : L’outsider pour moi, il ne propose, de mon souvenir qu’un service de base sur les dépôts, par contre, 0 problèmes d’accès/disponibilité ou autre de la plate-forme.

Je dois certainement en rater dans mon listing, mais je ne me veux pas non plus exhaustif.

Forge en auto-hébergement

L’auto hébergement d’une forge comme je le précisais au dessus et à mon sens un gros avantage, mais n’est pas forcément accessible à tout le monde.
La raison en est simple, elle implique forcément que la personne ai déjà des connaissances pour pouvoir effectuer la mise en place. Mais il faut également un serveur quasiment dédié à ça (selon la charge que vous allez lui imposer).

On retrouve cependant de très bon logiciels pour mettre en place des forges auto-hébergé :

  • Gitea : Pour moi, la plus efficace des trois cités ici. Dynamique car les évolutions sont nombreuses et rapide, simple et elle fait juste ce dont j’ai besoin.
  • Gogs : Je l’ai pas mal utilisé, Gitea est d’ailleurs basé dessus ! Elle est simple et efficace, mais un peu plus mou à avancer niveau fonctionnalités et correctifs…
  • GitLab-CE : Ici on rentre dans une usine à gaz, elle fonctionne juste au poil, mais il faut s’accrocher niveau gourmandise matérielle derrière, ne vous attendez pas à la faire tourner sur une toute petit machine. Au delà, elle intègre énormément de fonctionnalités sympathiques pour le travail de groupe.

À titre personnel, ma forge personnelle est auto-hébergé avec Gitea, mais je n’utilise pas que ça. J’ai également des dépôts sur GitHub et sur GitLab.

Bibliographie

  1. (en) GIT
  2. (fr) Wikipedia forge(informatique)
  3. (en) GIT
  4. (en) SVN (Subversion)
  5. (en) Mercurial
  6. (en) Wikipedia (Cloud computing)
  7. (fr) Wikipedia (Cloud computing)
  8. (fr) Wikipedia Auto-Hébergement(Internet)
  9. (en) GitHub
  10. (en) GitLab
  11. (en) Bitbucket
  12. (en) Gitea
  13. (en) Gogs