The source code is the specification of a program that:
Actually, TheSourceCodeIsTheDesign.
As has been argued repeatedly, it most assuredly is not. But that's what we're here to discuss, isn't it?
Source code is the intermediate representation between what's in the programmer's head and what the machine can execute. It is more-or-less:
It doesn't have to be written in what people usually think of as a "programming language".
It can also be the files that a GUI builder uses to remember its state between sessions. These are machine readable and transformable into machine executable. They are often not human writable or readable without the GUI builder program. In this case, the GUI builder program is essentially an editor (and maybe a compiler).
Another example is a CASE tool used to generate code in some traditional programming language (such as C or C++). The generated code is not source code even though it may be human writable and readable, and machine readable and executable. It's generated by a tool, and it's not the representation that the programmer is working with. The source code in this case is the files that the CASE tool uses to remember its state between sessions.
I have yet to see program maintenance done with a CASE tool. The ASCII files containing programming language constructs are the source code. These are the files that communicate the program to future developers and maintainers, not a series of UML diagrams that could be easily derived from the source code.
Yes, of course, but the original definition is still valid. When the programmers start working directly on the generated files, the CASE tool's state files simply become the old version of the source code. The new version of the source code is the (now edited) files that the programmers are editing.
Maybe this page should be merged with WhatIsSourceCode.