Sécurité
MVS : Minimal Version Selection, en français sélection de version minimale, l'algorithme de résolution des dépendances des modules Go. « La règle qui retient, pour chaque dépendance, la plus haute des versions minimales exigées, et jamais une de plus », par analogie avec un restaurant où chaque convive réclame au moins une entrée et où l'on sert exactement la plus grosse de ces exigences, sans dessert surprise.
Fonctionnement : Chaque module déclare dans son fichier go.mod la version minimale dont il a besoin. Go retient pour chaque dépendance le maximum de ces minimums, sans consulter les versions publiées depuis. Le résultat est reproductible sans fichier de verrouillage séparé, ce que d'autres écosystèmes obtiennent au prix d'un fichier de plusieurs milliers de lignes.
Conséquence pour les correctifs : Un correctif de sécurité publié dans une dépendance transitive n'est jamais tiré automatiquement : il n'arrive que si quelqu'un relève explicitement le minimum, dans son propre go.mod ou dans celui d'un module intermédiaire. L'outil govulncheck signale les vulnérabilités connues effectivement atteignables dans le code.
Homonyme : MVS désigne aussi Multiple Virtual Storage, le système d'exploitation des ordinateurs centraux IBM lancé dans les années 1970, ancêtre de z/OS. Le contexte départage vite : l'un parle de go.mod, l'autre de cartes perforées devenues jeux de données.
Ce qui arrive si on s'en passe
Une équipe Go qui compte sur une mise à jour implicite des dépendances garde indéfiniment la version vulnérable d'une bibliothèque transitive, puisque MVS ne va jamais chercher plus récent de lui-même. La compilation reste parfaitement reproductible, y compris la faille. Sans govulncheck dans l'intégration continue ni relèvement délibéré des minimums, l'inventaire affiche une version que l'avis de sécurité désigne nommément, et l'attaquant n'a plus qu'à lire le même avis.
Explication de la marmotte
Un programme utilise souvent des bibliothèques écrites par d'autres, qui elles-mêmes en utilisent d'autres. Le langage Go choisit leurs versions avec une règle simple : il prend la plus petite version qui satisfait tout le monde, et jamais une plus récente. C'est prévisible : le même programme se construit toujours de la même façon. Mais quand une bibliothèque publie une correction de sécurité, elle n'est pas récupérée tant qu'un développeur ne demande pas explicitement la nouvelle version.
