La rétrocompatibilité (backward compatibility) est la garantie qu'une nouvelle version d'un logiciel, d'une API ou d'une librairie n'invalide pas ce qui fonctionnait avec la précédente : le code écrit hier continue de tourner aujourd'hui, sans modification. C'est elle qui transforme une mise à jour en non-événement — ou son absence qui la transforme en projet de migration.
Additif Par Défaut
La discipline tient en une règle : ajouter plutôt que modifier. Un paramètre optionnel avec valeur par défaut plutôt qu'une nouvelle signature, une dépréciation annoncée plutôt qu'une suppression sèche, un changelog qui dit explicitement ce qui change du point de vue du consommateur. Le versioning sémantique encadre le tout : une rupture exige une version majeure.
Un Coût Asymétrique
Maintenir la compatibilité coûte une fois, au mainteneur. Casser coûte autant de fois qu'il y a de consommateurs — migration, coordination, risque que certains s'enferment sur une version figée. Plus un code est partagé, plus l'arbitrage penche vers la compatibilité : la confiance dans une dépendance se construit release après release et se détruit en une seule.
Une dépendance dont les mises à jour sont des non-événements finit toujours à jour ; une dépendance qui casse finit épinglée sur une vieille version — c'est-à-dire abandonnée sans que personne ne l'ait décidé.