El origen de los sistemas operativos: así empezó todo

Domingo, 14 de junio de 2026

Cuando pienso en sistemas operativos e intento buscar en el pasado remoto se me viene UNIX a la cabeza. Su desarrollo se produjo a principios de la década de 1970, pero, ¿qué sistemas operativos había antes de UNIX? ¿cual fue el primero?

Hay que ir más al pasado, sobre la década de 1950 para encontrar el primer desarrollo de un sistema operativo básico, esto es: un programa que, una vez cargado en una computadora, gestiona los dispositivos de entrada y salida de datos, gestiona la memoria entre distintos procesos y planifica y ejecuta todo en la unidad central. Todo esto a disposición de otro programa, el programa real que el programador codificaba y cargaba después para ejecutarlo. De esta forma el programador se centraba en la lógica de su programa, evitaba configuraciones manuales y conflictos con otros programadores, y en definitiva, mejoraba la eficiencia del trabajo mientras se abstrae de la máquina.

Esto derivó en una revolución: la transformación de una calculadora grande en una computadora tal y como la conocemos desde entonces. Esta revolución se fue extendiendo por las empresas que disponían de grandes computadoras dando lugar a diversos sistemas operativos adaptados por los fabricantes de hardware y comenzó la era donde la programación dejó atrás a la máquina, salvando la programación de sistemas.

Buscando información sobre este primer desarrollo, una persona lo inició todo: un programador que estaba harto de dar vueltas y perder el tiempo en la sala de máquinas (dejavú de VMs y contenedores). Esta persona se llama Robert L. Patrick y en enero de 1987 expuso un trabajo sobre su participación en la creación del reconocido primer sistema operativo GM-NAA I/O. He realizado una traducción de este trabajo aquí, y el documento original es éste.

A continuación, un resumen de ese trabajo:

A mediados de la década de 1950, la computadora IBM 701 era un conjunto de máquinas que ocupaban una sala y costaba una fortuna debido a las pocas unidades que se vendieron (casi 20 en total). Estas máquinas tenían un problema importante de eficiencia debido a que solo podían realizar una única tarea a la vez y se perdía mucho tiempo al configurarlas manualmente para cada trabajo u operación, la conversión entre distintos formatos de datos y la resolución de incidencias mecánicas que solían ser frecuentes y llevaban mucho tiempo solucionarlas.

Para mejorar la eficiencia se tomaron distintas medidas, como contratar a personas como operadores para realizar el trabajo con la máquina y servir de "mensajeros" a los programadores. Otras medidas consistieron en la reducción y normalización de las configuraciones manuales, y se sustituyeron las tarjetas perforadas, que eran lentas de procesar, por cintas magnéticas, que eran mucho más rápidas de cargar. También aparecieron las primeras herramientas de software, como "Speedcode", un lenguaje simplificado que facilitaba la entrada y salida de datos. Sin embargo, el verdadero punto de inflexión llegó cuando General Motors y North American Aviation trabajaron en equipo para desarrollar e implementar el primer "Sistema Operativo" embrionario sobre una máquina IBM 704, buscando automatizar la gestión total de la computadora.

Como la unidad central seguía trabajando de forma secuencial, con la ineficiencia que esto suponía, IBM intentó optimizarla vendiendo un conjunto de tres máquinas a parte para trabajar en paralelo a la unidad central. Una pasaba la información de tarjetas perforadas a cinta, la unidad central se alimentaba de estas cintas, ejecutaba el proceso y escribía la salida en otra cinta. La segunda máquina leía esta cinta de salida para imprimir los resultados, mientras que una tercera máquina hacía lo mismo pero escribiendo la salida en tarjetas perforadas. Los datos viajaban en "lotes" de trabajos independientes incluyendo instrucciones JCL (Job Control Language) incorporando información como el nombre del programador, la ubicación de los dispositivos de entrada y salida (incluyendo la información de conversión de datos), el compilador del lenguaje utilizado y qué datos había que procesar.

Este nuevo sistema operativo denominado "GM-NAA I/O" supuso un alivio histórico para los programadores. Antes, tenían que escribir el código para convertir los números de decimal a binario. Con la llegada del sistema operativo, el panel de control de la unidad central pudo extenderse para incluir rutinas automáticas de conversión de datos y herramientas para depurar código en caso de errores mediante el volcado de memoria (core-dump). El programador por fin pudo olvidarse de la gestión física de las máquinas y los formatos de entrada-salida para concentrarse en la lógica de su programa.

El sistema operativo controlaba los tiempos entre los trabajos de los distintos programadores que utilizaba la máquina e incluía registros de actividad para saber qué se estaba ejecutando en cada momento. Todo el proceso se resumía en tres fases automáticas: lectura y conversión, cálculo, y salida formateada para la impresora y perforadora de tarjetas. El sistema operativo también permitía compilar y ejecutar código en lenguaje Fortran (recién creado) o ensamblador en una sola pasada. Como curiosidad, el 90 % de este primer sistema operativo se dedicaba exclusivamente a gestionar la entrada y salida de datos, y solo el 10 % al cálculo del programa.

Al final, todo este sistema se almacenaba en una cinta especial llamada "SYSRES", la cual se utilizaba para arrancar e inicializar la unidad central, dando origen a los sistemas operativos tal y como hoy los conocemos.