The Apollo 11 source code, the project that managed to put a man on the moon, has been released this week.
This month marks the 47th anniversary of the moment Neil Armstrong set foot on the Moon, ending the human being’s obsession with reaching the satellite that greeted him every night, and establishing the starting point of a new space age. in which we continue looking for the next place in the space to step on.
A historical event, fruit of the collaboration of hundreds of men and women who gave their best to achieve the feat. Although it was necessary to completely change the way things are done.
How MIT created the Apollo 11 source code
This is what happened to the Draper Laboratory, at the time known as the MIT Instrumentation Laboratory. His mission was create the software that will control the flight of the Apollo 11 spacecraft, and as such it was a mission of paramount importance; the programmers had in their hands the lives of three astronauts, and the worst thing was that they had nowhere to lean on.
In the mid-1960s, there simply wasn’t the technology needed to create reliable software for a spacecraft, it was kind of science fiction. So at MIT they decided to do the dirty work and create their own technology.
Thus was born the memory of wired cores, or rope memory, a new type of memory that as you can see has the form of cables arranged in a kind of path; the programmers had to work in assembly language to create the programs that were to be included in that memory, which was read-only.
Assembly language is a very low-level type of language, and that means it doesn’t have as many layers of abstraction as a popular programming language can have today.
When you program in assembly language, you have to speak in the processor language; you can’t just print hello world ‘, you just have to access memory addresses, move data from one place to another, and cross your fingers for everything to work. And of course, since each processor is different and has its own language, the program you are going to create will not serve you for any other system.
Yes, programming in assembler is the worst. The result is a huge number of lines of code, which we can see in this famous photograph by Margaret Hamilton, director of software engineering for the Apollo project, posing next to the printed code.
Stories, jokes and tricks saved in the Apollo 11 code
These papers were kept in the MIT file, until someone decided to scan them; But the time that had passed made many pages barely legible. Still, MIT posted the images online, and the Internet did the rest. The entire code was transcribed and this week a NASA Fellow Fellow posted it on Github for everyone to see.
In this historical code we can find many ingenious solutions to the problems encountered engineers, if you know how to read this assembly language. Or you can just look for cool stuff in the code comments; you will recognize them because they start with the # sign.
On reddit they have compiled some examples of these comments, and possibly the funniest, and at the same time the one that gives more food for thought, is one in which the programmer marks an order as temporary, I hope, I hope, I wait.
But no, that temporary solution ended up being part of the final code, and I assure you that in real life the same thing happens, the code that you have put only as a temporary solution because you have other things to do will probably stay there in the final version, however ugly it may be.
In the comments we also find jokes and little stories. For example, the source of the BURN_BABY_BURNMASTER_IGNITION_ROUTINE file comes from Burn, baby! Burn !, a phrase made famous by radio presenter Magnificent Montague, which in turn inspired Marvin X for his poem about the Watts riots in Los Angeles in 1965.
Line 666 of the lunar landing equations file includes a comment that talks about a MYSTERIOUS NUMBER (sic), in a kind of spanglish.
And if you want to know how astronauts operated this system, you can use the AGC (Apollo Guidance Computer) emulator created based on this source code.
Apollo 11 on Github