Hi ndre, Thanks, those are great suggestions! Some comments below: > "Applications are /written/ in programming languages, which are specialized human > languages made up to give instructions to computers. As such, they are usually a > subset of English language with a special syntax which purports to avoid ambiguity. > But computers cannot understand these human languages, in fact they can only > /understand/ machine language, which are series of operating instructions coded > with numbers. > > So, in order to run an application on a computer, someone has to translate it > from the programming language in which it was written to the target machine > language which the computer /understands/. This is the work of /compilers/, > which are specialized software that automate the translation task. The result > of their translation to machine language is called /compiled code/. The program > as expressed on a programming language is called /source code/." Hmmm, maybe a bit too long in my opinion. While this is educational, I don't want to drown the fish either :) The phrasing is good though and I've included half of it into the text. > "Now while the source code is intelligible to humans and offers a pretty high > level of transparency of its logic, compiled code is a virtualy unreadable > sequence of numbers. In order to understand it, a human would have to decode > the numbers to the appropriate instructions, do the binary arithmetic they > represent and have intimate knowledge of the hardware. Moreover, one instruction > on source code translates to several coded instructions on machine language. > Thus, they are effectively /black boxes/." Included. > compile the source code twice, chances are that you'll get slightly different > sequences of numbers. So how can you know that the compiled software you've > downloaded is in fact a proper translation of the source code instead of some > modified version of it? Included. > Notice that it's enough that merely one 0 or 1 got flipped for the behaviour Included. >> It is actually possible: if we go up the chain of compilers far enough, we reach > > a level where have a trivial "machine level" compiler that can build a simple > compiler from source. Included. >> This machine-readable file is small enough that it is no longer a black box and > > can be inspected by humans and it is also the only piece of software which needs > the tedious decoding process done. This simpler compiler can in turn build a more I'm not sure this part adds much to the explanation. I haven't included it because I fear it sounds too complicated. Thanks! Updated version attached. To the maintainers: what do you think of publishing this on guix.gnu.org? -- Pierre Neidhardt https://ambrevar.xyz/