Attention: ça va être un peu libre ...
Je pense qu'il y a 2 façons de considérer votre préoccupation.
Si vous y pensez, certaines navettes spatiales et satellites ont utilisé le même code qui les avait lancés à l'origine. En revanche, certains ont été conçus pour être mis à jour même s'ils sont (très) distants.
Ce qui compte, c'est l'environnement. Évidemment, tant que vous ne modifiez pas l'environnement, votre code ne deviendra pas obsolète. Dans ce cas, le code rot n'existe pas vraiment: le code lui-même (ou le binaire produit) ne peut pas pourrir. Il peut se casser si vous commencez à l'attaquer sous un angle complètement différent. Ce n'est pas qu'il pourrit, c'est qu'il ne s'adapte pas à son environnement. Considérez-le comme un problème évolutif.
Mais notre environnement change. Et d'une manière ou d'une autre, quelle est la clé de votre problème est également la solution. Notre environnement change si vite que, de nos jours, nous ne nous attendions pas à ce qu'une solution logicielle n'évolue pas avec le temps. Nous négligeons les projets logiciels qui n'ont pas été mis à jour au cours de la dernière année et gémirons sur l'assistance produit et client qui ne produit pas de feuille de route claire. Et même lorsque cela fonctionne bien - vous obtenez une feuille de route claire, un bon support, des mises à jour régulières ... - il y a toujours une chance maintenant qu'un challenger fasse surface, avec une croissance exponentielle. Nous faisons souvent l'erreur de penser que les grandes entreprises établies domineront toujours, précisément parce qu'elles dominent. Cependant, de la même manière que l'élément dominant d'un troupeau vieillit, le super-logiciel / matériel / quel que soit le fournisseur vieillit. Ou juste un peu paresseux. Et un challenger entre et retourne les choses encore plus vite que le dominant établi ne l'aurait fait 5 ou 10 ans auparavant. Ou le dominant prendra juste un bon coup, survivant à peine alors que nous voyons une perturbation du marché (économiquement parlant, avec des impacts sur différents domaines), puis les choses continueront. Peut-être que cela semble imparfait, mais en soi, c'est un processus organique.
Du point de vue de l'utilisateur, je suppose que le problème n'est pas si important. La pourriture du code ne se produira pas du point de vue de l'utilisateur, car il pourra utiliser une alternative (éventuellement avec une transition / migration transparente ... espérons-le).
Supposons maintenant que nous ne voyons pas les choses du point de vue de l'utilisateur, ou que nous parlons d'un système qui est immunisé - pour des raisons inconnues, développement gouvernemental, voyage spatial, etc ... - à la concurrence et est vraiment supposé pour être construit pour vivre / survivre très longtemps, nous devons regarder les textes que vous avez référencés. Et probablement un peu plus de littérature sur les systèmes fiables et les systèmes tolérants aux pannes. Même si nous voulons probablement aller plus loin. Nous ne voulons pas seulement la tolérance aux pannes, nous voulons des systèmes évolutifs.
Le problème avec l'évolution, c'est qu'elle introduit des changements, et les changements introduisent des points d'échecs. Examinons-les maintenant et ce que nous pouvons faire pour y remédier.
Nous pouvons toujours compter sur la métaphore infrastructure / architecture / ingénierie pendant que nous le faisons (après tout, nous sommes tous nous-mêmes des ingénieurs logiciels, bien qu'il n'y ait sans doute rien de tel que le génie logiciel ... pour l'instant). Il y a une raison pendant que le système de tubes est toujours actif (avec quelques pépins), alors que Big Ben fonctionne toujours (avec quelques pépins) ou que la Tour Eiffel est toujours debout. C'est parce que nous faisons avec des éléments vitaux (ou pas si vitaux) d'une infrastructure que nous devrions également faire avec un logiciel: une inspection continue. Ces entités n'ont pas nécessairement été conçues pour durer aussi longtemps, mais ont bénéficié d'une surveillance permanente et d'améliorations et de réparations en temps opportun lorsque cela était nécessaire. Appelez cela vos correctifs si vous le souhaitez.
D'un autre côté, certains modèles étaient destinés à durer et à fonctionner durablement sans interruption, même en sachant qu'une inspection continue ne serait pas possible. Dans ce cas, nous nous tournons vers un bon design et des modèles formels. Les éléments de fiabilité (disponibilité, fiabilité, sécurité, intégrité, maintenabilité) peuvent être quantifiés - pour un environnement donné. Les statistiques font le reste pour planifier le reste et l'avenir. Ce qui pose la question: est-il même possible pour nous de construire des systèmes qui seront évolutifs, au vrai sens du terme?