Recently digitized and turned into a repo, the original Apollo 11 guidance computer source code has been made available for viewing on Github.

In MAIN.agc, the repo author comments that they

split the huge monolithic source code into smaller, more manageable chunks--i.e., into individual source # files.

A bit later, the author states

It may be reasonably asked why tens of thousands of lines of source are joined by means of inclusion, rather than simply assembling the source files individually and then linking them to form the executable. The answer is that the original development team had no linker.

I know what linkers are and I understand the point of them- but I've never heard of the phrase (as far as ASM goes) "joined by means of inclusion".

What does this mean? Considering that linkers are a big deal in programming, I'm curious what this substitution of linkers by "means of inclusion' is and how it works.

  • 7
    An example of "joined by means of inclusion" would be the #include directive in C. In other words, rather than the code bing compiled onto components that are then linked together, it looks like the $ notation includes the contents of that file, in order to generate one large source file. That one large source file is then compiled as a single entity.
    – David Arno
    Commented Jul 18, 2016 at 15:49
  • 1
    @DavidArno your comment seems like a better answer than either of the two answers currently on the board. Commented Jul 24, 2016 at 1:37

2 Answers 2


They seem to mean simple textual concatenation / insertion. In other words, even though the source text was split into individual files, the program wasn't split into modules.


How does simple inclusion compare with linking?

So simple inclusion is accomplished by using #include "someCFile.c".

By default linkers will add a runtime library. With inclusion, this would have to be included.

I suspect that inclusion would take less space as the objects would not need to have tables containing entry points and potentially variables with names. In dynamic linking, the entry point table has to be there. I am not sure if static linking would remove it or not, thou I suspect that it doesn't.

In term of processing speed, inclusion is probably a bit faster (definitely in the case of dynamically linked libraries), however it is not as flexible, they is multiple applications could not share the same library.

Considering binary size, inclusion would be bigger.

Considering compile time, inclusion would take longer.

For the NASA navigation computer simple inclusion was ok as the navigation computer only ran one program.

  • 2
    I don't think this answers the question "what it is and how it works".
    – tofro
    Commented Sep 29, 2016 at 9:33
  • tofro: I interpreted the "What does it mean?" as what would it mean from a practical standpoint in terms of binary size and execution speed. Commented Jan 5, 2017 at 14:44
  • "inclusion would be bigger" - Don't get this. If code is in, it's in and uses space - regardless how it got into the binary. Don't even agree on compile time - a full build is going to take identical time. You only gain speed when doing incremental builds, and I doubt this was already practised in the 60ies
    – tofro
    Commented Jan 5, 2017 at 15:05
  • The execution speed would be faster as all of the functions of a minimal operating system are within the executable, so these are just calls as opposed to using interrupts (I am considering a minimal operating system such as DOS where it used the interrupts of the 8086 to make system calls). Also, as the entire operating system would be included, this would consume more space than when it is not and would add to the compile time. Commented Jan 5, 2017 at 18:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.