¿Quién fue el primero en licenciar software sin garantía? ¿Y por qué se salieron con la suya?

¿Qué tipo de garantía?

El software de código abierto a menudo niega la garantía. ¿Por qué no debería? Es un proyecto realizado y verificado por voluntarios, aunque los proyectos más grandes a veces obtienen algún apoyo comercial. Y se le ofrece usar libremente. No solo descargar y ejecutar, sino modificar y modificar si lo desea.

Dado que, “puede usar esto si lo desea, pero es bajo su propio riesgo” parece bastante justo. Y funciona sorprendentemente bien. El sistema operativo Linux y el servidor web Apache alimentan muchos, si no la mayoría, de los sitios que visita. Puede visitarlos en Firefox o Chrome. Funciona lo suficientemente bien, ¿no? Requerir garantías en todo el software, y ese modelo se evapora.

Incluso para el software comercial, sería una mala idea. ¿Realmente necesita su reproductor de música de escritorio diseñado al mismo nivel que su automóvil? Hay muchas más consecuencias graves posibles si el automóvil falla y choca. Si desea que el reproductor de música esté diseñado de esa manera, le costará MUCHO más. Cinco veces más como mínimo.

El software que ejecuta cosas como sistemas de vehículos cruciales o equipos médicos se prueba de manera exhaustiva de esa manera. El software se mantiene simple con un conjunto de características básicas y nada llamativo. Y solo está diseñado para ejecutarse en un conjunto de hardware muy específico, no en la impresionante matriz de hardware y software que podría estar actuando como base para programas de propósito general. (Si escribe su software para Windows, ¿qué versión (es)? ¿Qué sucede cuando lo ejecuto en una VM en una Mac o en WINE en Linux?) Cuanto más simple es, el control de calidad exhaustivo es más fácil. Ah, y aunque a menudo se incluye en el costo del producto final, es extremadamente costoso.

¿Desea que el software de escritorio de su computadora sea soso, tenga muy pocas funciones y cueste diez veces más? Si lo hace, por todos los medios, presione para obtener garantías obligatorias. De lo contrario, si bien puede ser frustrante encontrar un error, no es peligroso para la vida o la salud. Denúncielo y se alegra de tener una gran variedad de software para usar en casi cualquier tarea concebible, y gran parte de ella es totalmente gratuita.

Para comprender las prácticas modernas de garantía de software, debe volver a una época anterior en la que los dinosaurios gobernaban el mundo de las computadoras: el mainframe.

En aquel entonces el costo de la informática era muy alto. Como en cientos de dólares por hora. La utilización de la máquina lo era todo y las máquinas no eran tan confiables como lo son hoy. Muchos lugares no podían permitirse comprar sus propias computadoras y las alquilaron en su lugar. En cualquier caso, el objetivo era maximizar el uso de la máquina a expensas de todo lo demás.

Por lo tanto, quienes usaban computadoras tenían acuerdos con los proveedores para proporcionar servicio y asistencia en el sitio. Los acuerdos de apoyo modernos tienen sus raíces aquí. Si la máquina se rompió o el código no funcionó correctamente, el fabricante podría brindar asistencia. Y a menudo lo hizo. Pero estaba dentro de los límites de un acuerdo de servicio, no una garantía.

El software nunca ha sido licenciado con una garantía. Siempre. Por el simple hecho de que al principio se reconoció las implicaciones de responsabilidad de los mismos dada la naturaleza imperfecta del software en sí. Las garantías existen en el mundo como un medio para promover o defender la confiabilidad de un artículo físico. E incluso entonces, las garantías se limitan a defectos físicos o de fabricación, no al desgaste o rotura de rutina debido al uso incorrecto.

¿Cómo se proporciona una garantía para un artículo que no obedece las leyes físicas? ¿Qué comportamiento no puede predecirse con precisión debido a la explosión combinatoria de posibles interacciones, número de entradas y tiempo? Simplemente no lo haces.

Si bien el software es matemáticamente demostrable, hacerlo a un nivel de confianza en el que uno dirá “Este software funcionará de manera confiable y predecible en todos los escenarios esperados” es extraordinariamente difícil. Hasta el punto de que solo unos pocos sistemas de software se prueban y certifican con ese nivel de vigor. Con costos de asistencia masivos en tiempo de prueba y documentación. Un ejemplo notable es el software donde están en juego vidas humanas como la aviación y los vuelos espaciales. E incluso entonces, solo ciertos sistemas se prueban con ese estándar y se realizan otros mecanismos de mayor confiabilidad.

Nada impide que alguien ofrezca software con garantía. Pero prácticamente nadie lo hace porque hacerlo se abriría a una responsabilidad masiva en caso de que el software no funcione de manera inesperada. Y lo hará. Debido a que alguien que usa software puede combinarlo con otras cosas de maneras que el diseñador de software no puede anticipar, es prácticamente imposible garantizar que un código funcione correctamente si el usuario puede cambiar los términos de esa funcionalidad fuera de su control.

El hardware y los bienes físicos son diferentes. Las personas simplemente no pueden modificar sus comportamientos sin alterar ese buen comportamiento, demostrando que lo hicieron e invalidando así una garantía. No existe tal restricción en el software. Es completamente posible cambiar el software, incluso mientras se está ejecutando, y nadie sería más sabio que lo hiciste. Cuando el software puede modificar su propio comportamiento, es completamente imposible proporcionar una garantía práctica que finalmente no destruya a quienes lo proporcionan.

Nadie se escapa con nada. Es simplemente la realidad y la naturaleza del software en sí. Las garantías y el software son incompatibles con nuestra comprensión y capacidad actuales para validar y “saber” qué está haciendo el código. Hasta que el desarrollo de software logre el mismo nivel de rigor, análisis de fallas, comprobabilidad y previsibilidad de las entidades físicas, nunca podrá llevar una garantía fuera de los escenarios de aplicación más simples e inútiles.