Recently I was explaining a non-technical colleague of mine the differences between a source code and object code in our embedded platform and how we treat it from a legal perspective. I then searched the web for other related information and I found an excellent link which talks about expressiveness of the code be it a source or object or binary code. I totally agree with the interpretation in that paper.
It can be found on the following link: http://www.cs.cmu.edu/~dst/DeCSS/object-code.txt
I hope my company’s legal department does not start reading this otherwise we won’t be able to sell anything in terms of software except for hardware and the software that we do sell would then attain source code level purchase agreements even for binaries making it highly costly for our customers.
Anyways, it is a nice read. I am copying a gist of the article in here. Read the whole if you are more interested. I have also posted a forum topic on the FunComputing Forums at http://www.naresh.se/phpBB/viewtopic.php?f=10&t=2 where you can discuss more about it…
***************************************************************************************************
The lessons that should be drawn from the above (i.e. article) are:
1) All computer code is human readable. Some forms are simply more convenient to read than others.
2. All computer code is expressive. Many of the ideas expressed in C code are also expressed in the assembly language code that results from compiling that C code, and again in the binary machine language that is the output of the assembler. Some content may be lost, e.g., source code comments are typically not preserved in object code, although variable names may be. But some ideas that are only implicit in the source code may be made more apparent in the object code, such as how a particular sequence of actions should be best expressed in terms of processor operations in order to obtain maximum performance from the machine.
3) All computer code is executable. In some instances it may be advantageous to transform the code into another form first, but transformation is by no means mandatory. An interpreter can be employed instead. Interpreters are in common use in computer systems.
4) “Source” and “object” are relative terms, not absolute categories.
5) The file DECSS.EXE is a particular expression of an algorithm for converting video files from one format to another. It expresses the same algorithm as the C code from which it was compiled. DECSS.EXE is coded in a binary language that is more tedious to read than the C code, but more efficiently executable by a Pentium processor. These are differences in degree only. If C code is protected speech because of its expressive content — and one can argue that a computer program is nothing but expressive content — then code written in a binary machine language that expresses the same algorithm should not be regarded any differently.