I have used tools developed by GNU project for many years like gcc&g++. However I even don’t know what GNU is. Today when I saw the term ‘GNU toolchain’, I decided to figure out what GNU is.

GNU

GNU is an operating system and an extensive collection of computer software. [1] Actually, this definition has answered my question. We can simply regard it as a replacement of Unix. However, it’s operating system kernel, Hurd has not been developed for a long time. So, the currently more popular Unix-like operating system is GNU/Linux or Linux.[2] If Hurd can be developed before 1991, maybe Linus didn’t need to do something ‘just for fun’.

Base system[3]

Some names are very familiar to me such as bash, grep, gzip and tar. I will go further in the future.

Software[3]

GNU toolchain, what I mentioned at the beginning of this blog is included in this section. Other libraries like glibc are also included.

Know more about software of GNU, please refer to the third reference.

GNU toolchain

The GNU toolchain is a broad collection of programming tools produced by the GNU Project, which is used for developing software applications and operating systems.[4]

Some tools like ‘make’, ‘GCC’, ‘GDB’ are familiar to me, while some names are a bit strange to me like ‘GNU Binutils’. Actually, I have used tools included in it such as objdump and readelf.

Binutils are a set of programming tools for creating and managing binary programs, object files, libraries, profile, data and assembly source code.[5]

Let’s go back to GNU toolchain.

As we all know, the compilation process is a sequential process.

Fig.1 The procedure of compilation
Tools are used one by one. Consequently, they form a toolchain which takes source files as input and executable files as output. The details of preprocessing, compilation, assembly and linking will be hidden by using the toolchain.

Reference

[1] https://en.wikipedia.org/wiki/GNU

[2] https://en.wikipedia.org/wiki/GNU/Linux_naming_controversy

[3] https://en.wikipedia.org/wiki/List_of_GNU_packages#Software_development

[4] https://en.wikipedia.org/wiki/GNU_toolchain

[5] https://en.wikipedia.org/wiki/GNU_Binutils