Achtung: Dies wird ein bisschen Freiform sein ...
Ich glaube, es gibt zwei Möglichkeiten, Ihre Besorgnis zu betrachten.
Wenn Sie daran denken, haben einige Space Shuttles und Satelliten denselben Code ausgeführt, mit dem sie ursprünglich gestartet wurden. Auf der anderen Seite wurden einige entwickelt, um aktualisiert zu werden, auch wenn sie (sehr) abgelegen sind.
Was zählt, ist die Umwelt. Solange Sie die Umgebung nicht ändern, wird Ihr Code natürlich nicht veraltet sein. In diesem Fall existiert Code rot nicht wirklich: Der Code selbst (oder die erzeugte Binärdatei) kann nicht rotieren. Es kann brechen, wenn Sie es nur aus einem völlig anderen Blickwinkel angreifen. Es ist nicht so, dass es verfault, es ist so, dass es sich nicht an seine Umgebung anpasst. Betrachten Sie es als ein evolutionäres Problem.
Aber unsere Umwelt verändert sich. Und irgendwie ist der Schlüssel zu Ihrem Problem auch die Lösung. Unsere Umgebung ändert sich so schnell, dass wir heutzutage nicht erwarten würden, dass sich eine Softwarelösung im Laufe der Zeit nicht weiterentwickelt. Wir übersehen Softwareprojekte, die im letzten Jahr nicht aktualisiert wurden, und stöhnen über Produkt- und Kundensupport, der keine klare Roadmap erstellt. Und selbst wenn dies gut gelingt - Sie erhalten eine klare Roadmap, guten Support, regelmäßige Updates ... - besteht jetzt immer die Chance, dass ein Herausforderer mit exponentiellem Wachstum auftaucht. Wir machen oft den Fehler zu denken, dass die großen etablierten Unternehmen immer dominieren werden, genau weil sie dominieren. Auf die gleiche Weise, wie das dominante Element in einer Herde älter wird, wird auch die übergroße Software / Hardware / welcher Anbieter auch immer älter. Oder nur ein bisschen faul. Und ein Herausforderer kommt herein und dreht die Dinge noch schneller um, als es der etablierte Dominant vor 5 oder 10 Jahren getan hätte. Oder die Dominante schlägt sich nur gut und überlebt kaum, während wir eine Marktstörung sehen (wirtschaftlich gesehen, mit Auswirkungen auf verschiedene Bereiche), und dann geht es weiter. Das sieht vielleicht unvollkommen aus, ist aber an sich ein organischer Prozess.
Aus der Sicht des Benutzers denke ich, dass das Problem nicht so groß ist. Code Rot tritt aus Sicht des Benutzers nicht auf, da er eine Alternative verwenden kann (möglicherweise mit nahtlosem Übergang / nahtloser Migration ... hoffentlich).
Nehmen wir nun an, wir sehen die Dinge nicht aus der Sicht des Benutzers oder sprechen von einem System, das - aus unbekannten Gründen, aus Gründen der Regierungsentwicklung, aus Gründen des Weltraumverkehrs usw. - immun gegen Wettbewerb ist und eigentlich von Wettbewerb ausgeht Um lange leben und überleben zu können, müssen wir uns die Texte ansehen, auf die Sie verwiesen haben. Und wahrscheinlich etwas mehr Literatur über zuverlässige Systeme und fehlertolerante Systeme. Obwohl wir wahrscheinlich weiter vorantreiben wollen. Wir wollen nicht nur Fehlertoleranz, wir wollen evolutionäre Systeme.
Das Problem mit der Evolution ist, dass sie Änderungen einführt und Änderungen Fehlerpunkte einführen. Schauen wir uns diese jetzt an und was wir tun können, um sie anzugehen.
Dabei können wir uns immer noch auf die Metapher Infrastruktur / Architektur / Emgineering verlassen (schließlich sind wir alle selbst Softwareingenieure, obwohl es im Moment wohl keine Softwareentwicklung gibt ...). Es gibt einen Grund, warum das Röhrensystem noch aktiv ist (mit einigen Störungen), Big Ben noch arbeitet (mit einigen Störungen) oder der Eiffelturm noch steht. Es liegt daran, dass wir mit wichtigen (oder weniger wichtigen) Elementen einer Infrastruktur genau das tun, was wir mit Software tun sollten: kontinuierliche Inspektion. Diese Einheiten waren nicht unbedingt auf eine so lange Lebensdauer ausgelegt, profitierten jedoch von ständiger Überwachung und zeitnahen Verbesserungen und Reparaturen, wenn dies erforderlich war. Nennen Sie das Ihre Hotfixes, wenn Sie werden.
Auf der anderen Seite sollten einige Designs dauerhaft und ohne Unterbrechung funktionieren, selbst wenn man weiß, dass eine kontinuierliche Inspektion nicht möglich ist. In diesem Fall wenden wir uns gutem Design und formalen Modellen zu. Elemente der Zuverlässigkeit (Verfügbarkeit, Zuverlässigkeit, Sicherheit, Integrität, Wartbarkeit) können für eine bestimmte Umgebung quantifiziert werden. Stats erledigt den Rest, um für den Rest und die Zukunft zu planen. Was die Frage aufwirft: Ist es uns überhaupt möglich, evolutionäre Systeme im eigentlichen Sinne zu bauen?