Advertencia: Esto será un poco libre ...
Creo que hay 2 formas de ver su preocupación.
Si lo piensas, algunos transbordadores espaciales y satélites han estado ejecutando el mismo código que los lanzó originalmente. Por otro lado, algunos han sido diseñados para actualizarse incluso si son (muy) remotos.
Lo que importa es el medio ambiente. Obviamente, siempre que no modifique el entorno, su código no quedará obsoleto. En este caso, la descomposición del código realmente no existe: el código en sí (o el binario producido) no puede pudrirse. Podría romperse si comienzas a atacarlo desde un ángulo completamente diferente. No es que se esté pudriendo, es que no se está adaptando a su entorno. Piense en ello como un problema evolutivo.
Pero nuestro entorno cambia. Y de alguna manera, cuál es la clave de su problema también es la solución. Nuestro entorno cambia tan rápido que hoy en día no esperaríamos que una solución de software no evolucione con el tiempo. Pasamos por alto los proyectos de software que no se han actualizado en el último año, y lamentaremos el soporte al producto y al cliente que no produce una hoja de ruta clara. E incluso cuando esto funciona bien (obtienes una hoja de ruta clara, un buen soporte, actualizaciones periódicas ...) siempre existe la posibilidad de que surja un desafío, con un crecimiento exponencial. A menudo cometemos el error de pensar que las grandes empresas establecidas siempre dominarán, exactamente porque dominan. Sin embargo, de la misma manera que el elemento dominante en una manada envejece, el software / hardware súper masivo / cualquier proveedor envejece. O simplemente un poco vago. Y entra un retador y cambia las cosas aún más rápido de lo que el dominante establecido podría haberlo hecho 5 o 10 años antes. O el dominante solo recibirá una buena paliza, apenas sobrevivirá mientras vemos una interrupción en el mercado (económicamente hablando, con impactos en diferentes campos), y luego las cosas continuarán. Tal vez eso parezca imperfecto, pero en sí mismo es un proceso orgánico.
Entonces, desde la perspectiva del usuario, supongo que el problema no es tan grande. La descomposición del código no sucederá desde la perspectiva del usuario, ya que podrá usar una alternativa (posiblemente con una transición / migración sin problemas ... con suerte).
Ahora suponiendo que no estamos viendo cosas desde el punto de vista del usuario, o que estamos hablando de un sistema que es inmune, por razones desconocidas, desarrollo gubernamental, viajes espaciales, etc., a la competencia y que se supone realmente Para ser construido para vivir / sobrevivir durante mucho tiempo, necesitamos mirar los textos a los que hizo referencia. Y probablemente más literatura sobre sistemas confiables y sistemas tolerantes a fallas. Aunque probablemente queremos avanzar más. No solo queremos tolerancia a fallas, queremos sistemas evolutivos.
El problema con la evolución es que introduce cambios, y los cambios introducen puntos de falla. Miremos estos ahora y lo que podemos hacer para abordarlos.
Todavía podemos confiar en la metáfora de infraestructura / arquitectura / ingeniería mientras lo hacemos (después de todo, todos nosotros somos ingenieros de software, aunque podría decirse que no existe tal cosa como ingeniería de software ... por ahora). Hay una razón mientras el sistema de tubos todavía está activo (con algunos problemas técnicos), mientras que Big Ben todavía funciona (con algunos problemas técnicos) o la Torre Eiffel sigue en pie. Es porque hacemos con elementos vitales (o no tan vitales) de una infraestructura lo que también deberíamos estar haciendo con el software: inspección continua. Estas entidades no fueron necesariamente diseñadas para durar tanto tiempo, pero se han beneficiado de la supervisión permanente y las mejoras y reparaciones oportunas cuando fue necesario. Llame a eso sus revisiones si lo desea.
Por otro lado, algunos diseños estaban destinados a durar y funcionar de manera duradera sin interrupción, incluso sabiendo que la inspección continua no será posible. En este caso nos dirigimos hacia un buen diseño y modelos formales. Los elementos de fiabilidad (disponibilidad, fiabilidad, seguridad, integridad, mantenibilidad) se pueden cuantificar para un entorno determinado. Las estadísticas hacen el resto para planificar el descanso y el futuro. Lo que trae la pregunta: ¿es posible incluso para nosotros construir sistemas que serán evolutivos, en el sentido real?