El software es el conjunto de programas, instrucciones y datos que indican a una computadora, un teléfono o cualquier otro dispositivo qué debe hacer y cómo debe hacerlo. Sin software, el hardware tendría muy poca utilidad, porque los circuitos, la memoria, la pantalla y el resto de los componentes físicos necesitan instrucciones que coordinen su funcionamiento. Cuando abres WhatsApp para enviar un mensaje, utilizas un navegador para buscar una receta, editas una fotografía o juegas en tu teléfono, estás utilizando software.
Las aplicaciones no son objetos físicos como una mesa o un electrodoméstico, aunque sí necesitan espacio de almacenamiento en la memoria del dispositivo y dependen completamente del hardware para funcionar. Son precisamente esas instrucciones las que convierten un aparato compuesto por componentes electrónicos en una herramienta capaz de comunicarnos, entretenernos o realizar cálculos complejos. La diferencia entre hardware y software es fundamental: el hardware es la parte física del sistema, mientras que el software está constituido por instrucciones y datos que pueden modificarse, actualizarse, copiarse o eliminarse sin necesidad de sustituir físicamente el dispositivo.
La historia del software comenzó mucho antes de que existieran las computadoras modernas. En el siglo XIX, la matemática británica Ada Lovelace escribió, en 1843, una serie de instrucciones para calcular números de Bernoulli utilizando la máquina analítica diseñada por Charles Babbage. Aunque aquella máquina nunca llegó a completarse, el trabajo de Lovelace es considerado uno de los primeros ejemplos de un algoritmo concebido para ser ejecutado por una máquina. Décadas más tarde, en 1936, el matemático británico Alan Turing publicó un trabajo fundamental en el que describió una máquina universal capaz, en términos teóricos, de ejecutar diferentes conjuntos de instrucciones. Estas ideas ayudaron a establecer las bases de la computación moderna y de la noción de programas que pueden controlar una máquina. El término software, utilizado para distinguir las instrucciones y componentes lógicos de los elementos físicos de una computadora, fue popularizado por el matemático John W. Tukey en 1958. Durante las primeras décadas de la informática, los programas podían escribirse en lenguaje máquina, utilizando códigos que el procesador podía interpretar. Con el tiempo aparecieron el lenguaje ensamblador y los lenguajes de alto nivel, como FORTRAN, COBOL, C, Java y Python, que hicieron mucho más sencillo desarrollar programas complejos.
En la actualidad, el software puede clasificarse de distintas maneras, pero una división sencilla permite entender su función. En la base encontramos el software de sistema, que proporciona los servicios fundamentales para que el dispositivo funcione. Su ejemplo más conocido es el sistema operativo, como Windows, macOS o Linux en las computadoras, y Android o iOS en los teléfonos inteligentes. El sistema operativo administra recursos como la memoria y el almacenamiento, coordina el funcionamiento de los dispositivos de entrada y salida y proporciona servicios que permiten ejecutar otros programas. Por encima de esta capa encontramos el software de aplicación, que es el que utilizamos para realizar tareas concretas. Aquí se encuentran los procesadores de texto, navegadores web, editores de fotografías, videojuegos, reproductores multimedia y aplicaciones de mensajería, entre muchos otros. También existe el software utilizado para desarrollar otros programas, que incluye herramientas como editores de código, compiladores, intérpretes, depuradores y entornos de desarrollo integrados.
El funcionamiento del software puede parecer complicado, pero su idea básica es relativamente sencilla. Un programador escribe instrucciones utilizando un lenguaje de programación, como Python, Java o C. Dependiendo del lenguaje y de la tecnología utilizada, esas instrucciones pueden ser traducidas previamente mediante un compilador, interpretadas durante su ejecución o transformadas mediante otros mecanismos en instrucciones que el sistema puede ejecutar. Cuando abrimos una aplicación, el sistema operativo y el hardware colaboran para cargar y ejecutar el código necesario. El procesador sigue las instrucciones y realiza operaciones a gran velocidad, mientras la memoria y otros componentes proporcionan los datos necesarios. Como resultado, podemos ver una imagen en la pantalla, realizar un cálculo, reproducir un video o enviar un mensaje a una persona que se encuentra al otro lado del planeta. Todo esto puede suceder en fracciones de segundo.
El software también puede diferenciarse por la manera en que se distribuye y por las libertades que ofrece a sus usuarios. Existe el software propietario, cuyo código fuente generalmente está controlado por una empresa u organización y cuyo uso puede estar sujeto a determinadas licencias o condiciones. Microsoft Office es un ejemplo conocido. Por otro lado, existe el software libre, una corriente que pone el énfasis en las libertades de los usuarios para utilizar, estudiar, modificar y compartir el programa de acuerdo con los términos de su licencia. Muchos proyectos de software libre también son de código abierto, es decir, permiten acceder al código fuente bajo condiciones determinadas. Linux y Firefox son ejemplos destacados de proyectos desarrollados dentro de esta cultura de colaboración. Gracias a estos modelos, miles de programadores pueden participar en proyectos que evolucionan continuamente y que son utilizados por millones de personas.
El software está presente en los automóviles, donde ayuda a gestionar funciones del vehículo, calcular rutas y controlar numerosos sistemas; en los relojes inteligentes, que registran diferentes parámetros y ejecutan aplicaciones; en los cajeros automáticos, los hospitales, los sistemas industriales, los electrodomésticos y prácticamente cualquier dispositivo electrónico moderno. También interviene en sistemas de transporte, comunicaciones, navegación y control. Cada vez que un semáforo coordina sus tiempos, un teléfono recibe un mensaje, una fábrica automatiza una operación o un avión utiliza sistemas informáticos para apoyar su navegación, el software está trabajando detrás de escena.
La historia de la comercialización del software también tiene episodios sorprendentes. En la década de 1950, la empresa británica J. Lyons & Co. desarrolló el sistema LEO, una de las primeras computadoras utilizadas con fines empresariales. LEO I se empleó para automatizar tareas como el cálculo de nóminas y posteriormente otras operaciones administrativas y comerciales. La experiencia de Lyons es uno de los primeros ejemplos de cómo las computadoras comenzaron a pasar de los laboratorios y centros de investigación al mundo empresarial.
Uno de los problemas informáticos más famosos de la historia fue el llamado efecto 2000. Muchos programas antiguos almacenaban el año utilizando únicamente dos dígitos, por ejemplo, “99” para 1999. Esto generaba el riesgo de que el cambio a “00” en el año 2000 provocara interpretaciones incorrectas de las fechas. Gobiernos, empresas y organizaciones de todo el mundo dedicaron enormes cantidades de dinero y esfuerzo a revisar y modificar sus sistemas. Algunas estimaciones sitúan el costo global de estas actividades en cientos de miles de millones de dólares, aunque las cifras varían considerablemente según la metodología utilizada. Finalmente, el temido colapso generalizado no ocurrió, en buena medida porque se realizaron enormes esfuerzos de prevención y corrección antes de la llegada del nuevo milenio.
La historia de la exploración espacial ofrece otro ejemplo impresionante de eficiencia del software. La computadora de guiado del programa Apolo, conocida como Apollo Guidance Computer o AGC, tenía una capacidad diminuta comparada con los estándares actuales. Su memoria de almacenamiento permanente tenía aproximadamente 36864 palabras de 16 bits, equivalentes a unos 72 kilobytes, mientras que su memoria de trabajo tenía apenas unos pocos kilobytes. A pesar de estas limitaciones, el software desarrollado para ella permitió realizar funciones fundamentales de navegación y control durante las misiones lunares. Compararlo con un archivo moderno puede resultar sorprendente: una fotografía, una aplicación o incluso algunos documentos actuales pueden ocupar más espacio que todo el programa de una misión espacial de aquella época.
La inteligencia artificial también ha producido hitos extraordinarios. En 2016, AlphaGo, desarrollado por DeepMind, derrotó al campeón mundial de Go, Lee Sedol, por un marcador de cuatro partidas a una. El acontecimiento sorprendió especialmente porque el Go posee una cantidad enorme de posibles posiciones y durante mucho tiempo se consideró un desafío particularmente difícil para las máquinas. Algunas de las jugadas de AlphaGo fueron consideradas sorprendentes o poco convencionales por los expertos humanos, demostrando que un sistema de inteligencia artificial podía encontrar estrategias que no eran evidentes para los jugadores profesionales.
También existe un fenómeno conocido como “inflación del software”. Se produce cuando los programas se vuelven progresivamente más grandes y consumen más memoria, almacenamiento o recursos de procesamiento. A veces esto ocurre por la incorporación de nuevas funciones y características legítimas; otras veces puede deberse a bibliotecas, componentes o procesos adicionales que aumentan la complejidad sin que el usuario perciba una mejora proporcional. Este fenómeno puede hacer que dispositivos antiguos funcionen con mayor lentitud y, en determinadas circunstancias, contribuir a que los usuarios sientan la necesidad de reemplazarlos. Sin embargo, no es correcto afirmar que todas las actualizaciones tengan como objetivo forzar la renovación de los equipos: el aumento de los recursos utilizados puede obedecer a múltiples factores técnicos.
No podemos tocarlo de la misma manera que tocamos un teclado o una pantalla y, a diferencia de muchos componentes físicos, puede modificarse sin reconstruir por completo el dispositivo: una actualización puede corregir errores, incorporar nuevas funciones, mejorar el rendimiento o incluso transformar la manera en que utilizamos una máquina.
Referencias: