Même si nous croyons «écrire une fois, courir n'importe où», ce n'est pas tout à fait la même chose qu'une éternelle compatibilité descendante. Pragmatiquement, vous devez vous attendre à ce que les futures versions des frameworks changent certaines choses. Parfois ce sera la suppression de ce qui était un comportement garanti (le pire type de changement), d'autres fois des bogues dans votre code passeront inaperçus jusqu'à ce qu'une future version de la bibliothèque révèle que vous utilisiez un détail d'implémentation qui n'était pas garanti. Plus rarement, votre ancien code révélera un nouveau bug dans la dernière version. Dans un monde idéal, nous écririons du code qui repose uniquement sur un comportement garanti, et les garanties ne seraient jamais supprimées, et par conséquent le code valide continuerait à fonctionner pour toujours. Par contre, il est difficile de prouver que votre programme est totalement correct, et les développeurs de langage/framework/bibliothèque décident s'ils peuvent ajouter les améliorations qu'ils souhaitent, tout en conservant une parfaite compatibilité.
Pour la compatibilité, l'API d'origine doit être suffisamment puissante et stable pour survivre sans modifications perturbatrices. Si ce n'est pas le cas, des modifications non compatibles seront effectuées, sinon l'API sera complètement abandonnée. De toute façon, votre programme ne fonctionnera plus à moins que vous ayez une ancienne version cachée quelque part pour l'exécuter. Vous demandez comment faire l'affaire - il faut d'abord une conception d'interface vraiment bonne et quelque peu chanceuse pour permettre toutes les extensions que vous arrivez plus tard, ou bien un engagement ferme et une «analyse de rentabilisation» (ou motif non-commercial) pour soutenir l'ancienne version indéfiniment. Par exemple, Python 3 n'est pas compatible avec Python 2, mais Python 2 est toujours activement supporté par les mises à jour, donc le vieux code Python s'exécute toujours. C99 supprime seulement quelques fonctionnalités de C89, et si tout le reste échoue, les compilateurs C89 sont toujours maintenus activement. Les navigateurs prennent en charge mille et une versions anciennes et les bizarreries non standard du HTML. Je ne sais pas comment JSF et richfaces se comparent à ceux-ci, ou combien ils sortent des pages qui s'appuient sur le support du comportement "ancien" (ou original) HTML/CSS/Javascript du client.
Cela peut donc arriver, au moins pour un moment. Mais il existe des fonctionnalités IE6 qui ne sont plus disponibles dans les navigateurs sécurisés sur le Web (je suppose que vous pouvez utiliser IE6 dans une machine virtuelle en sandbox ou sur une machine qui ne vous intéresse pas), c'est donc une question de de quoi tu dépendais en premier lieu.Aurait-il pu être prédit que les extensions de navigateur propriétaires seraient abandonnées comme une pierre dans les futures versions? Probablement, mais ces auteurs d'IE6 ont-ils atteint ce qu'ils voulaient en utilisant les normes appropriées disponibles à l'époque? Pas toujours. Même pour ceux qui ne se sont pas impliqués avec IE6, si votre application tombe dans un piège similaire, vous n'avez pas de chance.
Que s'est-il passé à la case à cocher wiki communautaire? – stacker
Il est parti: http://meta.stackexchange.com/questions/67039/what-can-we-do-to-make-community-wiki-better/67192#67192 –
Pouvez-vous donner un exemple de ce que les erreurs JavaScript vous obtenons? Je veux dire, est-ce qu'ils affectent la fonctionnalité de l'application, ou sont-ils simplement ennuyeux? – Jeremy