Esta semana ha sido publicado el código fuente del Apolo 11, el proyecto que consiguió poner a un hombre en la Luna.

Este mes se cumplen 47 años del momento en el que Neil Armstrong puso el pie en la Luna, dando punto final a la obsesión del ser humano por llegar al satélite que le saludaba todas las noches, y estableciendo el punto de partida de una nueva era espacial en la que continuamos buscando el siguiente lugar en el espacio que pisar.

Un evento histórico, fruto de la colaboración de cientos de hombres y mujeres que dieron lo mejor de sí para conseguir la hazaña. Aunque hiciese falta cambiar completamente la manera en la que se hacían las cosas.

Cómo el MIT creó el código fuente del Apolo 11

Es lo que le ocurrió al Laboratorio Draper, en su momento conocido como MIT Instrumentation Laboratory. Su misión era crear el software que controlaría el vuelo de la nave Apolo 11, y como tal era una misión de una importancia suprema; los programadores tenían en sus manos las vidas de tres astronautas, y lo peor es que no tenían donde apoyarse.

A mediados de los 60, simplemente no existía la tecnología necesaria para crear software fiable para una nave espacial, era algo de ciencia ficción. Así que en el MIT decidieron hacer el trabajo sucio y crear su propia tecnología.

apolo 11 codigo 2

apolo 11 codigo 2

Así nació la memoria de núcleos cableados, o “rope memory”, un nuevo tipo de memoria que como veis tiene forma de cables dispuestos en una especie de camino; los programadores tuvieron que trabajar en lenguaje ensamblador para crear los programas que iban a venir incluidos en esa memoria, que era de sólo lectura.

El lenguaje ensamblador es un tipo de lenguaje de muy bajo nivel, y eso significa que no tiene tantas capas de abstracción como las que puede tener un lenguaje de programación popular de la actualidad.

Cuando programas en lenguaje ensamblador, tienes que “hablar” en el idioma del procesador; no puedes simplemente hacer un “print ‘hola mundo’”, sino que tienes que acceder a las direcciones de memoria, mover datos de un sitio a otro, y cruzar los dedos para que todo funcione. Y por supuesto, como cada procesador es diferente y tiene su propio lenguaje, el programa que vayas a crear no te servirá para ningún otro sistema.

apolo 11 codigo 3

apolo 11 codigo 3

Sí, programar en ensamblador es lo peor. El resultado es una enorme cantidad de líneas de código, que podemos ver en esta famosa fotografía de Margaret Hamilton, directora de ingenería de software del proyecto Apolo, posando junto el código impreso.

Historias, chistes y trucos guardados en el código del Apolo 11

Estos papeles fueron guardados en el archivo del MIT, hasta que alguien decidió escanearlos; pero el tiempo que había pasado hizo que muchas páginas fuesen apenas legibles. Pese a todo, el MIT colgó las imágenes online, e Internet hizo el resto. El código entero fue transcrito y esta misma semana un trabajador becario de la NASA lo subió a Github para que todo el mundo lo vea.

En este código histórico podemos encontrarnos muchas soluciones ingeniosas para los problemas que se encontraron los ingenieros, si sabes leer este lenguaje ensamblador. O simplemente puedes buscar cosas interesantes en los comentarios del código; los reconocerás porque empiezan por el signo “#”.

apolo 11 codigo 4

apolo 11 codigo 4

En reddit han recopilado algunos ejemplos de estos comentarios, y posiblemente el más gracioso, y al mismo tiempo el que da más que pensar, es uno en el que el programador marca una orden como “temporal, espero, espero, espero”.

Pero no, esa solución temporal acabó formando parte del código final, y os aseguro que en la “vida real” pasa lo mismo, el código que has puesto sólo como solución temporal porque tienes otras cosas que hacer probablemente se quedará ahí en la versión final, por muy feo que sea.

apolo 11 codigo 5

apolo 11 codigo 5

En los comentarios también nos encontramos chistes y pequeñas historias. Por ejemplo, el origen del archivo BURN_BABY_BURN–MASTER_IGNITION_ROUTINE proviene de “Burn, baby! Burn!”, una frase popularizada por el presentador de radio Magnificent Montague, que a su vez inspiró a Marvin X para su poema de los disturbios de Watts en Los Angeles, en 1965.

apolo 11 codigo 1

apolo 11 codigo 1

La línea 666 del archivo de las ecuaciones para el aterrizaje lunar incluye un comentario que habla de un “NUMERO MYSTERIOSO” (sic), en una especie de spanglish.