Attenzione: questo sarà un po 'in forma libera ...
Penso che ci siano 2 modi per considerare la tua preoccupazione.
Se ci pensi, alcune navette spaziali e satelliti hanno eseguito lo stesso codice che li aveva 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 si modifica l'ambiente, il codice non diventerà obsoleto. In questo caso, il codice rot non esiste realmente: il codice stesso (o il file binario prodotto) non può marcire. Potrebbe rompersi se inizi ad attaccarlo da un'angolazione completamente diversa. Non è che sta marcendo, è che non si sta adattando al suo ambiente. Pensala 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ì velocemente 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 si lamenteranno del prodotto e dell'assistenza clienti che non fornisce una roadmap chiara. E anche quando questo funziona bene - ottieni una chiara roadmap, un buon supporto, aggiornamenti regolari ... - c'è sempre la possibilità che uno sfidante emerga, con una crescita esponenziale. Spesso commettiamo l'errore di pensare che le grandi aziende consolidate domineranno sempre, proprio perché dominano. Tuttavia, allo stesso modo l'elemento dominante in una mandria invecchia, il software / hardware super-massiccio / qualsiasi venditore invecchia. O solo un po 'pigro. E uno sfidante arriva e gira le cose ancora più velocemente di quanto il dominante dominante possa averlo fatto 5 o 10 anni prima. Oppure il dominante subirà un bel colpo, sopravvivendo a malapena mentre vediamo un'interruzione nel mercato (economicamente parlando, con impatti su campi diversi), e poi le cose andranno avanti. Forse sembra imperfetto, ma di per sé è un processo organico.
Quindi, dal punto di vista dell'utente, credo che il problema non sia così grande. La decomposizione del codice non avverrà dal punto di vista dell'utente, poiché utilizzerà un'alternativa (possibilmente con una transizione / migrazione senza soluzione di continuità ... si spera).
Ora assumendo 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 spaziali, ecc ... - alla concorrenza e è pensato per essere costruito per sopravvivere / sopravvivere per un tempo molto lungo, abbiamo bisogno di guardare i testi che hai fatto riferimento. E probabilmente un po 'più di letteratura sui sistemi affidabili e sul sistema fault-tolerant. Anche se probabilmente vorremmo spingerci oltre. Non vogliamo solo tolleranza ai guasti, vogliamo sistemi evolutivi.
Il problema con l'evoluzione è che introduce cambiamenti e cambiamenti introducono punti di errore. Diamo un'occhiata a questi ora e a cosa possiamo fare per affrontarli.
Possiamo ancora fare affidamento sulla metafora infrastruttura / architettura / ingegneria mentre lo facciamo (dopotutto, siamo tutti noi stessi ingegneri del software, anche se non c'è probabilmente nulla di simile all'ingegneria del software ... per ora). C'è un motivo mentre il sistema a valvole è ancora attivo (con alcuni problemi), mentre il Big Ben funziona ancora (con alcuni difetti) o la Torre Eiffel è ancora in piedi. È perché facciamo con elementi vitali (o non così vitali) di un'infrastruttura cosa dovremmo fare con il software altrettanto bene: ispezione continua. Queste entità non erano necessariamente progettate per durare così a lungo, ma hanno beneficiato di una supervisione permanente e di miglioramenti e riparazioni tempestivi quando era necessario. Chiama il tuo hotfix se lo desideri.
D'altra parte, alcuni progetti erano pensati per durare, e funzionare senza interruzioni, anche sapendo che l'ispezione continua non sarebbe possibile. In questo caso ci rivolgiamo verso un buon design e modelli formali. 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 porta la domanda: è persino possibile per noi costruire sistemi che saranno evolutivi, nel vero senso della parola?