Ostrzeżenie: będzie to trochę swobodne ...
Myślę, że istnieją 2 sposoby spojrzenia na twoją obawę.
Jeśli się nad tym zastanowić, niektóre promy kosmiczne i satelity uruchomiły ten sam kod, który je pierwotnie uruchomił. Z drugiej strony niektóre zostały zaprojektowane do aktualizacji, nawet jeśli są (bardzo) zdalne.
Liczy się środowisko. Oczywiście, dopóki nie zmodyfikujesz środowiska, twój kod nie stanie się przestarzały. W tym przypadku zgnilizna kodu tak naprawdę nie istnieje: sam kod (lub wytworzony plik binarny) nie może zgnić. Może się złamać, jeśli zaczniesz atakować go z zupełnie innej strony. Nie chodzi o to, że gnije, ale nie dostosowuje się do otoczenia. Pomyśl o tym jak o problemie ewolucyjnym.
Ale nasze środowisko się zmienia. I w jakiś sposób kluczem do twojego problemu jest również rozwiązanie. Nasze środowisko zmienia się tak szybko, że w dzisiejszych czasach nie spodziewalibyśmy się, że oprogramowanie nie ewoluuje z czasem. Pomijamy projekty oprogramowania, które nie były aktualizowane w ubiegłym roku, i jęczymy na temat produktów i obsługi klienta, które nie dają jasnego planu działania. I nawet jeśli to się powiedzie - otrzymujesz przejrzystą mapę drogową, dobre wsparcie, regularne aktualizacje ... - zawsze jest szansa, że pojawi się pretendent, z wykładniczym wzrostem. Często popełniamy błąd myśląc, że duże firmy o ustalonej pozycji zawsze będą dominować, właśnie dlatego, że dominują. Jednak w ten sam sposób, w jaki dominujący element w stadzie się starzeje, super-ogromne oprogramowanie / sprzęt / cokolwiek sprzedawca się starzeje. Lub po prostu trochę leniwy. Wchodzi pretendent, który obraca rzeczy jeszcze szybciej, niż ustalona dominanta mogłaby to zrobić 5 lub 10 lat wcześniej. Lub dominujący po prostu dobrze sobie poradzi, ledwo przetrwa, podczas gdy widzimy zakłócenia na rynku (z ekonomicznego punktu widzenia, z oddziaływaniem na różne dziedziny), a potem wszystko potoczy się dalej. Może to wygląda na niedoskonałe, ale samo w sobie jest procesem organicznym.
Tak więc z punktu widzenia użytkownika problem nie jest tak duży. Zgnilizna kodu nie nastąpi z punktu widzenia użytkownika, ponieważ będzie on mógł użyć alternatywy (być może z płynnym przejściem / migracją ... mam nadzieję).
Zakładając, że nie widzimy rzeczy z punktu widzenia użytkownika, lub że mówimy o systemie, który jest odporny - z nieznanych przyczyn, rozwoju rządu, podróży kosmicznych itp. - na konkurencję i jest naprawdę przypuszczalny aby zostać zbudowanym tak, by żyć / przetrwać przez bardzo długi czas, musimy spojrzeć na teksty, do których się odwołujesz. I prawdopodobnie trochę więcej literatury na temat niezawodnych systemów i systemu odpornego na uszkodzenia. Chociaż prawdopodobnie chcemy posunąć się dalej. Chcemy nie tylko tolerancji na uszkodzenia, ale systemów ewolucyjnych.
Problem z ewolucją polega na tym, że wprowadza zmiany, a zmiany wprowadzają punkty awarii. Spójrzmy teraz na to i co możemy zrobić, aby się z nimi zmierzyć.
W tym czasie możemy nadal polegać na metaforze infrastruktury / architektury / inżynierii (w końcu wszyscy sami jesteśmy inżynierami oprogramowania, choć prawdopodobnie nie ma czegoś takiego jak inżynieria oprogramowania ... na razie). Jest powód, gdy system rur jest nadal aktywny (z pewnymi usterkami), podczas gdy Big Ben nadal działa (z pewnymi usterkami) lub Wieża Eiffla wciąż stoi. To dlatego, że robimy z istotnymi (lub nie tak istotnymi) elementami infrastruktury, co powinniśmy robić również z oprogramowaniem: ciągła kontrola. Podmioty te niekoniecznie zostały zaprojektowane tak, aby przetrwały tak długo, ale skorzystały ze stałego nadzoru oraz terminowych ulepszeń i napraw, gdy były potrzebne. Nazwij to swoimi poprawkami, jeśli chcesz.
Z drugiej strony niektóre projekty miały trwać i działać bez przerwy, nawet wiedząc, że ciągła kontrola nie będzie możliwa. W tym przypadku zwracamy się w stronę dobrego wzornictwa i formalnych modeli. Elementy niezawodności (dostępność, niezawodność, bezpieczeństwo, integralność, konserwacja) można określić ilościowo - dla danego środowiska. Statystyki zajmą się resztą, aby zaplanować resztę i przyszłość. Co nasuwa pytanie: czy w ogóle możliwe jest zbudowanie systemów, które będą ewolucyjne, w prawdziwym tego słowa znaczeniu?