Attenzione: sarà un po 'in forma libera ...
Penso che ci siano 2 modi per esaminare la tua preoccupazione.
Se ci pensate, alcune navette spaziali e satelliti hanno eseguito lo stesso codice che li ha originariamente lanciati. D'altra parte, alcuni sono stati progettati per essere aggiornati anche se sono (molto) remoti.
Ciò che conta è l'ambiente. Ovviamente, finché non modifichi l'ambiente, il tuo codice non diventerà obsoleto. In questo caso, il codice rot non esiste davvero: il codice stesso (o il binario prodotto) non può marcire. Potrebbe rompersi se inizi ad attaccarlo da una prospettiva completamente diversa. Non è che sta marcendo, è che non si sta adattando al suo ambiente. Pensalo come un problema evolutivo.
Ma il nostro ambiente cambia. E in qualche modo, qual è la chiave del tuo problema è anche la soluzione. Il nostro ambiente cambia così rapidamente che al giorno d'oggi non ci aspetteremmo che una soluzione software non si evolva nel tempo. Trascuriamo i progetti software che non sono stati aggiornati nell'ultimo anno e ci lamenteremo del supporto di prodotti e clienti che non produce una tabella di marcia chiara. E anche quando questo funziona bene - ottieni una roadmap chiara, un buon supporto, aggiornamenti regolari ... - c'è sempre la possibilità ora che uno sfidante emergerà, con una crescita esponenziale. Spesso commettiamo l'errore di pensare che le grandi aziende affermate domineranno sempre, proprio perché dominano. Tuttavia, allo stesso modo in cui l'elemento dominante in una mandria invecchia, il software / hardware super massiccio / qualunque cosa il venditore invecchi. O solo un po 'pigro. E arriva uno sfidante che gira le cose ancora più velocemente di quanto il dominante affermato avrebbe potuto fare 5 o 10 anni prima. O il dominante prenderà semplicemente una bella botta, sopravvivendo a malapena mentre vediamo una perturbazione del mercato (economicamente parlando, con impatti su diversi campi), e poi le cose continueranno. Forse sembra imperfetto, ma di per sé è un processo organico.
Quindi, dal punto di vista dell'utente, immagino che il problema non sia così grande. La putrefazione del codice non avverrà dal punto di vista dell'utente, poiché potrà usare un'alternativa (possibilmente con una transizione / migrazione senza soluzione di continuità ... speriamo).
Ora supponendo che non stiamo vedendo le cose dal punto di vista dell'utente, o che stiamo parlando di un sistema che è immune - per ragioni sconosciute, sviluppo governativo, viaggi nello spazio, ecc ... - alla concorrenza e si suppone davvero per essere costruito per vivere / sopravvivere a lungo, dobbiamo guardare i testi a cui hai fatto riferimento. E probabilmente altra letteratura su sistemi affidabili e sistemi a tolleranza d'errore. Anche se probabilmente vogliamo spingerci oltre. Non vogliamo solo tolleranza agli errori, vogliamo sistemi evolutivi.
Il problema con l'evoluzione è che introduce cambiamenti e cambiamenti introducono punti di fallimento. Diamo un'occhiata a questi ora e cosa possiamo fare per affrontarli.
Possiamo ancora fare affidamento sulla metafora dell'infrastruttura / dell'architettura / dell'ingegneria mentre lo facciamo (dopo tutto, siamo tutti noi ingegneri del software, anche se probabilmente non c'è nulla di simile all'ingegneria del software ... per ora). C'è una ragione per cui il sistema di tubi è ancora attivo (con alcuni problemi), mentre il Big Ben funziona ancora (con alcuni problemi) o la Torre Eiffel è ancora in piedi. È perché facciamo con elementi vitali (o meno così vitali) di un'infrastruttura quello che dovremmo fare anche con il software: ispezione continua. Queste entità non sono state necessariamente progettate per durare così a lungo, ma hanno beneficiato della supervisione permanente e dei miglioramenti e riparazioni tempestivi quando necessario. Chiama i tuoi aggiornamenti rapidi, se vuoi.
D'altra parte, alcuni progetti dovevano durare e funzionare durevolmente senza interruzioni, pur sapendo che non sarebbe possibile un controllo continuo. In questo caso ci rivolgiamo a un buon design e modelli formali. Gli elementi di affidabilità (disponibilità, affidabilità, sicurezza, integrità, manutenibilità) possono essere quantificati per un determinato ambiente. Le statistiche fanno il resto per pianificare il resto e il futuro. Il che pone la domanda: è persino possibile per noi costruire sistemi che saranno evolutivi, nel vero senso del termine?