Sur versionnement sémantique la règle générale est d'augmenter le numéro mineur uniquement lorsque des fonctionnalités rétrocompatibles sont introduites, sinon le numéro majeur doit être augmenté à la place. Le site même approche mais avec une arithmétique différente, est utilisé par libtool .
J'ai une question concernant ce qui est considéré comme une modification rétrocompatible et ce qui ne l'est pas.
Imaginez que j'ai écrit une bibliothèque, et que l'en-tête public de cette bibliothèque contient un fichier typedef
d'un type de données nommé foo
. Dans la version 1.0.0, cette typedef
ressemble à ça :
typedef struct foo_t {
int x;
int y;
} foo;
Puis je décide de changer le type de données, et dans la prochaine version, cela ressemblera à ceci :
typedef struct foo_t {
int x;
int y;
int z;
} foo;
Je n'ai ajouté qu'un seul champ à la structure foo_t
. Il semblerait qu'il s'agisse d'une modification rétrocompatible, cependant la structure ci-dessus est de facto une autre structure maintenant. Ce que j'ai fait n'est pas d'introduire une nouvelle fonction et de laisser intact tout le reste, mais plutôt de changer quelque chose qui était déjà là.
Le type de données ci-dessus est normalement utilisé pour échanger des données avec les fonctions de la bibliothèque, mais l'utilisateur peut l'avoir utilisé à d'autres fins. Si l'utilisateur avait écrit un programme utilisant la version 1.0.0 et que la dernière modification constitue une modification rétrocompatible, le programme de l'utilisateur doit compiler également avec cette nouvelle version.
Comment cette nouvelle version sera-t-elle appelée, 1.1.0 ou 2.0.0 ?
EDIT
Vous pouvez lire d'autres développements de cette discussion ici .