# Compatibilité ascendante et descendante

La rétrocompatibilité, ou compatibilité descendante, est la compatibilité d'un produit vis-à-vis de produits plus anciens ; la compatibilité ascendante ou postcompatibilité est la compatibilité d'un produit vis-à-vis de produits plus récents, voire futurs. Cette compatibilité peut concerner des appareils (ordinateur, console de jeux vidéo, processeur, équipement électronique, terminal multimédia...), des logiciels (système d'exploitation, jeu vidéo, compilateur...) ou des standards (langage de programmation, norme, format de données, protocole...).
Un composant technologique A (un appareil, un logiciel ou un standard) a une compatibilité descendante vis-à-vis d'un composant plus ancien B s'il offre à B au moins les mêmes services que les prédécesseurs de A qui fonctionnaient avec B. Par exemple, une console peut avoir une compatibilité descendante avec des jeux conçus pour des consoles de générations précédentes.
Un composant technologique compatible avec un autre a une compatibilité ascendante vis-à-vis de versions plus récentes (ou futures) de celui-ci s'il peut fonctionner avec elles, ou s'il est prévu pour pouvoir fonctionner avec elles. Par exemple, un navigateur web peut avoir une compatibilité ascendante avec des versions futures de HTML, en ignorant les balises inconnues.
Pour mieux appréhender cette notion, on peut par exemple, faire figurer le produit observé sur une échelle de temps verticale, avec ses prédécesseurs et versions antérieures en dessous de lui et ses versions postérieures (ou futures) au-dessus de lui ; à partir du produit observé, un comportement conforme aux versions plus anciennes se fait alors en « compatibilité descendante », et un comportement qui préfigure celui de versions plus récentes, en « compatibilité montante » ou « ascendante ».
Les problèmes de compatibilité, tant ascendante que descendante, sont fréquents en informatique ou dans les applications intégrées aux appareils et dispositifs numériques, en raison de la rapidité de l'évolution parallèle du matériel et des logiciels.

## Exemples de compatibilité descendante

Dans le domaine du jeu vidéo, une console peut parfois lire indifféremment des jeux spécifiquement créés pour elle comme ceux créés pour les machines de générations précédentes ; par exemple, la PlayStation 2 de Sony est capable de lire également les jeux PlayStation.
Les fichiers utilisés dans le domaine du stockage de données peuvent présenter des variations de format d'une version à une autre pour un même logiciel (notamment à cause de nouvelles fonctionnalités proposées à l'utilisateur) ; si le nouveau format de fichier est plus complet que l'ancien, le logiciel peut simplement « faire avec » les données manquantes, ou peut convertir le fichier vers le nouveau format (cf. filtres des traitements de texte).

## Exemples de compatibilité ascendante

La compatibilité ascendante est plus complexe. Le cas idéal consiste à avoir un format « tolérant » aux changements, comme le HTML : un navigateur qui rencontre une balise inconnue ou obsolète peut se contenter de l'ignorer : le rendu n'est alors pas conforme à l'intention de l'auteur, mais le lecteur dispose tout de même d'une partie des informations. On peut alors parfois entendre parler de « compatibilité restreinte ».
Pour effectuer des échanges de données grâce à des fichiers, on peut utiliser un format « universel » robuste.