Software de sangre fría
El software que puede “congelarse” durante años y reiniciarse sin roturas —el llamado software de sangre fría— atrae a desarrolladores cansados de la rotación constante de dependencias y frameworks. Los comentaristas exploran cuándo esto es realista, contrastando aplicaciones duraderas en C, Go, Java, PHP o HTML estático con toolchains frágiles de móvil, Python, Node y front-end que a menudo se rompen con nuevos sistemas operativos, SDKs o versiones de paquetes. Muchos ven el control estricto de dependencias, plataformas estables y arquitecturas simples como la única forma de lograr una longevidad de décadas, pero señalan que las actualizaciones de seguridad, las necesidades cambiantes del negocio y los ecosistemas de rápido movimiento a menudo fuerzan sistemas más cálidos y mantenidos continuamente.
Longevidad vs. software efímero
- Muchos están de acuerdo en que parte del software debería construirse para durar décadas (utilidades, infraestructura, blogs, CMSes), pero otros señalan que muchas apps son inherentemente de vida corta a medida que evolucionan los casos de uso y las pilas tecnológicas.
- Algunos sostienen que las reescrituras pueden llegar a ser más baratas que mantener sistemas de décadas; otros lo discrepan enérgicamente, citando enormes costes y riesgos al tocar sistemas antiguos pero críticos.
- La idea del “índice Buxton” / horizonte temporal se usa para explicar diferencias: algunas personas u organizaciones planean para años; otras optimizan para el próximo trimestre.
Seguridad, rotación del ecosistema y carga de mantenimiento
- Una objeción recurrente: en un entorno en vivo, conectado en red o regulado, las actualizaciones de seguridad y los cambios del ecosistema obligan a un mantenimiento continuo, haciendo que el software verdaderamente “de sangre fría” sea raro.
- Ejemplos de rotación dolorosa: apps móviles (cambios en SDK de iOS/Android, políticas de las tiendas de apps), actualizaciones de Xcode que rompen proyectos antiguos, rotura del ecosistema de paquetes (Node, Python, compilaciones de front-end).
- Algunos responden que una planificación cuidadosa (versiones LTS del SO, sin red, superficie limitada) puede mantener los sistemas viables y con poco contacto durante muchos años.
Dependencias, herramientas y estrategias para la estabilidad
- Gran énfasis en minimizar dependencias, especialmente herramientas de compilación y frameworks de ritmo rápido; muchos prefieren binarios estáticos, vendoring, contenedores o incluso VMs congeladas.
- Varios describen éxito con pilas simples: C, PHP, Go, Java, Perl, Elixir, JavaScript “vanilla” y herramientas Unix como Make/Pandoc.
- Otros destacan que los contenedores y las imágenes distroless pueden “congelar” entornos, pero solo desplazan dónde ocurre el mantenimiento, no lo eliminan.
Experiencias con lenguajes, frameworks y plataformas
- Elogiados por su estabilidad/compatibilidad hacia atrás: Go (con módulos y promesa de compatibilidad), Java (con matices después de Java 9), Perl, C, algo de PHP, Express.js, bibliotecas de Elixir/Erlang, mainframe IBM, Windows, kernel de Linux.
- Criticados como “de sangre caliente”: Python (separación 2→3, deprecaciones frecuentes, herramientas de dependencias), pilas modernas de compilación JS, algunos ecosistemas de Ruby y Node.
- Hay debate: algunos informan que Python funciona sin cambios durante muchos años con herramientas disciplinadas; otros experimentan roturas constantes.
Bibliotecas frescas y software “acabado”
- Revisar el “último commit” se considera una heurística útil pero imperfecta: a menudo significa abandono, pero algunas bibliotecas realmente están terminadas y son estables durante años.
- Preocupaciones: las bibliotecas sin mantenimiento pueden ocultar problemas de seguridad e incompatibilidades; pero las bibliotecas estables, pequeñas y sin dependencias pueden seguir siendo útiles indefinidamente.
Enfoques filosóficos y crítica a la metáfora
- Varios abrazan “la tecnología de ayer para mañana” y herramientas aburridas para maximizar la previsibilidad.
- Otros critican la metáfora biológica de “sangre fría” por inexacta o confusa, y prefieren conceptos más directos como “pocas dependencias externas” y modelos de amenaza claros.