Dennis M. Ritchie (1941-2011) y la historia del juego “Space Travel”

Cuando yo era estudiante de informática, hace más de 20 años, la diferencia entre un informático y el resto del mundo era haberse estudiado el libro de Brian W. Kernighann (1942-) y Dennis M. Ritchie (1941-2011), “El lenguaje de programación C” (yo lo estudié en inglés “The C Programming Language”); la diferencia entre un ingeniero en informática y el resto del mundo era haberse estudiado en detalle el código fuente de Unix en C. Todo ingeniero en informática tenía que ser capaz de programar en C desde cero el núcleo (kernel) de un sistema operativo como Linux. Todo buen informático, además de saber programar en C, debía amar la programación en C. ¡Cómo han cambiado los tiempos! Las libertades que ofrecía C a un programador permitían hacer con C cosas que en otros lenguajes de alto nivel eran imposibles. Yo sabía cómo era el código máquina (o ensamblador) que generaba mi compilador de C y aprovechaba esta información para optimizar mis programas (y hacerlos incomprensibles para cualquiera, incluso para mí mismo meses más tarde). El libertinaje, los vicios y las perversiones de la programación en C ya no están de moda.

Ruego un minuto de silencio por Dennis MacAlistair Ritchie que falleció el pasado 12 de octubre tras una larga enfermedad.

Permíteme un pequeño homenaje a Ritchie. Empezaré con Dennis M. Ritchie, “Space Travel: Exploring the solar system and the PDP-7,” un breve artículo donde nos contó la historia del juego de ordenador “Space Travel” desarrollado por Ken L. Thompson para el ordenador (mainframe) GE 635 de General Electric (GE) propiedad de su empresa AT & T. El juego simulaba el viaje de una nave espacial dentro del sistema solar que era capaz de aterrizar en un planeta o en una luna (satélite); el juego no consideraba la posibilidad de que la nave se dañara en la colisión si su aceleración era demasiado alta. La física del juego estaba simplificada: todas las órbitas de los planetas y sus lunas eran circulares y se encontraban en el mismo plano; sin embargo, la masa y las distancias relativas entre todos los elementos eran realistas. Para facilitar la jugabilidad, la escala de tiempos y la aceleración de la nave eran proporcionales a la escala de distancias, de tal forma que en pocos segundos, haciendo zoom en la pantalla, se podía llegar a Plutón. Lo más divertido eran las órbitas complicadas que seguía la nave en planetas con varias lunas, como Marte. Además, aterrizar en Mercurio o en Fobos (luna de Marte) era suficientemente difícil como para ser un buen motivo de diversión.

Muchos dirán que “Space Travel” era un juego para físicos (o para informáticos aficionados a la física, como Ken), pero su importancia histórica para la informática es enorme. AT&T permitía a sus empleados utilizar el ordenador GE 635 (y más tarde un GE 645) para sus “asuntos propios” siempre que pagaran un coste simbólico por su uso; GE 635 utilizaba un sistema operativo llamado GECOS y se programaba en Fortran. Ken Thomspon tenía que pagar entre 50 y 75 dólares por hora cada vez que ejecutaba el juego (al cambio actual serían entre 250 y 400 euros por hora). El precio era demasiado elevado para Ken, por muy divertido que fuera el juego.

En los Bell Labs de la AT & T había otros ordenadores, destacando un mainframe IBM 7094 que tenía varios PDP-7 con sistema gráfico como terminales. El PDP-7 era un ordenador pequeño para los estándares de 1968 fabricado por DEC y AT & T permitía que los empleados lo usaran gratis. Ken no pudo resistir la tentación y programó su “Space Travel” en lenguaje ensamblador para el PDP-7 (ello le obligó a simular la aritmética en punto flotante del GE 635). Una labor de chinos, pero ya se sabe, todos los informáticos tienen un hacker  en su corazón. Ken realizó esta migración de su juego mientras trabajaba en el desarrollo del sistema operativo Multics para el ordenador GE 645. Multics (Multiplexed Information and Computing System) era un sistema operativo multitarea basado en la técnica de tiempo compartido que fue desarrollado como línea de investigación conjunta por los AT&T Bell Labs, General Electric y el MIT. La versión de Multics para el GE 645 fue la última que se desarrolló y en 1969 se abandonó este sistema operativo por su alto coste y su poca utilidad práctica, como nos cuenta el propio Ken Thompson en “Unix History.”

Ken, ya familiarizado con la programación en código máquina de la PDP-7, decidió escribir un sistema operativo sencillito para este ordenador y recabó la ayuda de tres de sus colaboradores en el desarrollo de Multics para el GE 645, Joe Ossanna, Rudd Canaday y, por supuesto, Dennis Ritchie. El trabajo de los cuatro dio lugar a un sistema operativo monotarea para dos usuarios que llamaron Unics en 1970; el nombre era un juego de palabras con Multics pero para evitar que nadie pensara que era un Multics capado fue rebautizado como Unix. Como es de esperar, el juego “Space Travel” fue reescrito para correr bajo Unix. Otro juego anterior, Spacewar, desarrollado en el MIT para el PDP-1, fue también codificado para PDP-7 bajo Unix. Las primeras versiones de Unix estaban escritas en lenguaje ensamblador para el PDP-7. R. M. McClure desarrolló un lenguaje llamado TMG para el PDP-7 y Ken Thompson se puso a desarrollar un compilador de Fortran en TMG, pero al final cambió e opinión y decidió desarrollar un nuevo lenguaje de alto nivel al que llamó B, porque estaba basado en un lenguaje anterior llamado BCPL desarrollado por Martin Richard. A partir de este momento, todas las mejoras de Unix se escribieron en B, porque era mucho más rápido que programar en ensamblador.

En 1970, los Bell Labs compraron varios PDP-11 y Dennis Ritchie decidió desarrollar un lenguaje para esta máquina basado en B, al que llamó C (como nos cuenta el propio Ritchie en “C Programming Language History“). Los programas en B fueron transcritos a C y poco a poco el resto del sistema operativo Unix también fue reescrito en C (el núcleo (kernel) de Unix se finalizó de programar en C en 1973). Mientras tanto, Ken Thompson se dedicó a desarrollar varios programas para jugar al ajedrez; uno de ellos ganó un torneo y acabó siendo el primer programa de ajedrez que alcanzó el nivel de maestro.

En 1975, la sexta versión de Unix salió a la calle. La legislación federal antimonopolio de EE.UU. no permitió a los Laboratorios Bell poner a la venta este sistema operativo ya que no existía ningún otro similar en el mercado. Por ello, AT&T ofreció Unix gratis a diferentes instituciones educativas y de investigación. Los mejores programadores de EE.UU. aprendieron a programar en C bajo Unix y desarrollaron multitud de mejoras que se incorporaron en la séptima versión estrenada en 1979. La historia continua, ya sin Ritchie, por lo que esta entrada ya llega a su fin.

Aquí queda mi pequeño homenaje a este genio de la informática, Premio Turing de 1983 por su desarrollo de la teoría de sistemas operativos y su implementación del sistema Unix, que nos ha dejado a todos uno de los mayores legados que un informático pueda dejar.

#include <stdio.h>
#include <stdllib.h>
int main (int argc, char *argv[]) {
printf("Goodbye, World.\n");
exit 0;
}