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

Por Francisco R. Villatoro, el 18 octubre, 2011. Categoría(s): Ciencia • Historia • Informática • Noticias • Personajes ✎ 8

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;
}


8 Comentarios

  1. Gran entrada, se le ha dado mucha menos importancia en comparación a Steve Jobs. A mí sí que me sigue picando el corazón hacker, aunque no le veo sentido a que un ingeniero informático pase el 100% de su dedicación laboral a esta labor. Hoy en día, es capaz de hacer otro tipo de tareas. A mí el aprender a programar sobre todo me permitió aprender a plantear problemas de una manera totalmente distinta, no es aprender otro idioma, es pensar de otra manera. Te ha faltado un vídeo homenaje, Francis!

  2. Una corrección Francis, el programa de despedida que has puesto en c no compila (por lo menos con el compilador de gnu, gcc) debes incluir el archivo de cabezera: #include , que es donde esta definida la funcion exit.

    1. Gracias, bolelife, que mala memoria la mía. Se nota que ya no programa en C (desde hace más de 10 años). Ahora ni siquiera utilizo Fortran, solo Matlab y Mathematica.

      1. No es necesario incluir más librerías, basta sustituir «exit 0», por «return 0», que le hubiera gustado más al homenageado («exit» es llamada a librería del sistema y «return» es una palabra reservada de C)

  3. Muy pero que muy buena descripción histórica del nacimiento, no solo del lenguaje C, sino de los primeros kernel UNIX. Personalmente, me ha encantado el goodbye world del final.
    En cuanto al lenguaje C, que decir que no se haya dicho ya, otros lenguajes con memory manage como java van bien para algoritmia y demas, pero donde realmente uno se enfrenta a una maquina es con C (y hoy en dia, con C++ por supuesto).

    Como aportación, decir que esta tarde me estaba leyendo un maual de sockets en C y me he encontrado la frase «Para hacer esto en Windows primero tiene que borrarlo de su sistema y instalar Linux o BSD» XDDDDD

Deja un comentario