"The Operating System Often Referred to as Linux". The first time I heard this phrase I just about fell over. What is it supposed to be, some musician who long since used up his fifteen minutes of fame? But that's the term that Richard Stallman uses when talking about Linux, along with his other name for the operating system, "GNU/Linux" (1).
Richard Stallman's argument for calling Linux "GNU/Linux" is put forth in his article "Linux and the GNU Project". In essence, he claims that the operating system is really the GNU System, and that the GNU Project should get credit for it.
This is wrong. The confusion lies in the definition of "operating system". To call all of the GNU System an operating system is a mistake. One prime example is GNOME, the GNU desktop environment. A computer with GNU installed but without GNOME, has no less of an operating system than if it had GNOME installed. The GNU System as a whole is properly known as an "operating environment", a very different beast than an OS.
Not content to rest upon the vast accomplishments of the GNU Project, Mr. Stallman frequently disparages the Linux kernel as just a minor undertaking. In a message posted to the license-discuss mailing list at opensource.org, he wrote:
...the above statement suggest that Linus' contribution was just a snap or some stroke of luck.
"That's exactly what it was. Linus was not aiming or planning to help complete a free operating system."
Just what is an operating system then? Merriam Webster's dictionary defines it as "software that controls the operation of a computer and directs the processing of programs (as by assigning storage space in memory and controlling input and output functions)" So what part of the typical Linux distribution is the operating system? Simply, the kernel, and the name of that kernel is just plain "linux".
But the linux kernel cannot operate in isolation. The kernel can be copied to a floppy in order to create a boot disk, and until the standard kernels became too large, this was the typical way to create a boot disk. But there has to be something to boot to! There also needs to exist any software that the kernel itself relies upon, and any software necessary to interact with the kernel.
A good mental excercise is to take a Linux distribution and start removing stuff while keeping a working operating system intact. So let's toss out the X Window System and everything that relies on it, such as KDE or GNOME. Then toss out your editors, text mode web browsers and mailers, and so forth. You also need to get rid of any useful utilities that are not strictly necessary for the kernel operation.
At this point you should have already thrown out the development tools. Although some of these may be necessary to actually build the kernel, they are not necessary for it's normal operation. For some people, not including the gcc compiler as part of the operating system is a very radical notion. But if we are to call something "GNU/Linux" just because it is built with gcc, then we might as well start calling everything with a "GNU" prefix. Most of the BSD guys would choke on the term "GNU/FreeBSD"! Be honest with yourself and throw it out. This is just a mental excercise...
And now you need to throw out any programs that can be replaced with alternatives. Thus, if you haven't already done so, throw out bash because it can be replaced with a myriad other shells. The reason we are tossing these things out is not to make an unusable distribution, but merely to eliminate any optional programs that might otherwise make Linux be properly called "GNU/Linux".
Once we are done, what we have left is more than just the kernel, but still slightly less than the classic two-floppy "emergency" distribution. At this stage it is time to examine what part of the remainder is GNU, and if those GNU parts are sufficient to call the operating system "GNU/Linux".
The parts that remain in our now mutilated distribution will vary from person to person, but much of it will be the same. Are there any of the GNU file utilities left, like dd, ls and mv? They should have been thrown out already. Not only are these strictly unnecessary for kernel operation, they are optional because they can be replaced by alternatives from BSD or other sources.
So what do we have left? Well, of course there's the kernel. And probably lilo, the linux boot loader. Some of the utilities from the standard util-linux package will remain, as well as a file system of some kind, probably ext2fs. So far, none of these are GNU software. When we look at what's left that still comes from GNU, we find only glibc, the GNU C library. (and maybe some miscellaneous stuff depending upon how lenient you were during the above harrowing process)
So only glibc is left. But glibc is a pretty big thing! Every Unix system needs a C library. Is it sufficient to require that Linux be called "GNU/Linux"?
Note: I have recently been informed that even glibc is not required for the normal operation of our "minimal" distribution. The kernel does not use it, and it is replacable for any software that still requires a C library.
Glibc was designed to be portable to many different operating systems. This is because it wasn't created to be a part of an operating system, but to be a part of a development suite. From the GNU C Library page:
"The GNU C library is designed to be portable. Although the library sources are very complex, you can build it for any supported system with the simple commands configure & make"
Also telling is Richard Stallman's description of combining the linux kernel with the GNU System:
"Putting them together sounds simple, but it was not a trivial job. The GNU C library (called glibc for short) needed substantial changes. Integrating a complete system as a distribution that would work ``out of the box'' was a big job, too. It required addressing the issue of how to install and boot the system--a problem we had not tackled, because we hadn't yet reached that point. The people who developed the various system distributions made a substantial contribution." [Linux and the GNU Project]
Besides the rather strange implication that it was GNU that did this integration, note that glibc needed substantial changes to get it to work with Linux. If Linux were merely a kernel replacing GNU's Hurd kernel, then nothing would have to have been changed. But the opposite was the case! It was GNU that had to conform. If nothing else, the term "GNU/Linux" should be changed to "Linux/GNU".
The conclusion is inescapable. The operating system normally called "Linux" was the result of Linus Torvalds and others who worked with him to create it. It should properly be called just plain "Linux".
But what people normally get when they purchase Redhat Linux, Debian GNU/Linux or Corel LinuxOS is not just an operating system. They also get an operating environment (plus lots of other stuff). An operating environment is what we normally think of when we think of Linux. It includes a shell, editors, file utilities and the like.
The GNU Project set out to create not just an operating system, but also an operating environment and additional programs and utilities. From their website:
"But the reason it is a system--and not just a collection of useful programs--is because the GNU Project set out to make it one. We made a list of the programs needed to make a complete free system, and we systematically found, wrote, or found people to write everything on the list. We wrote essential but unexciting major components, such as the assembler and linker, because you can't have a system without them." [Linux and the GNU Project]
Their list was not an operating system list, but a list of all possible kinds of programs people would want to use with an operating system. It even included games! A subset of this list would be the GNU System, the GNU Operating Environment.
But when you look at the list of programs included in the typical Linux operating environment, you'll find that they are not all from GNU. A shell is certainly necessary for an operating environment, but very few distributions require that it be bash. And a lot of stuff in the environment is from the BSD camp! And although a lot of GNU software is included with the Linux operating environment, most of it are optional, and all can be replaced by alternatives.
The question to ask then, should the various Linux distributions be named "GNU/Linux" because they include the GNU Operating Environment? If this were just a matter of changing the name because the GNU development tools were included, the answer would be a firm no. After all, many operating systems include the GNU development tools. And it doesn't really matter how important some users think they are. The some collections of software are considered essential by many users, but it would be ludicrous to call something "Corel X/KDE/LinuxOS" or "SuSE Perl/Apache/Linux" for this reason.
In the final analysis, it must come down to who actually puts together these systems. And these people are the distributors and creators of Linux distributions. If it were a case where the distributors simply took the GNU System and swapped in the linux kernel and related software, then Richard Stallman would have a very good case for calling this thing "GNU/Linux". But there is no evidence that this is what happened. The GNU System had not been released as a whole (or even released as a whole sans kernel) by the time the early Linux distributions were made. In fact, to this day GNU hasn't released a GNU System in toto (2).
It was the folks who created the first Linux distributions that molded Linux into its modern form. They were the ones who did the final integration of the operating system with the operating environment. They were the ones who picked which software would be included. They were the ones who made it happen.
And they did not take the GNU System and insert the Linux kernel. Rather the opposite in fact. They took the Linux operating system, added an infrastructure, then looked around for useful software to go with it. Some of this software came from the GNU Project. But they also included software from BSD and other projects. By and large, what they included was what they were already using with other non-GNU operating systems, like 386BSD, Minix and other Unix systems. They didn't use the Mr. Stallman's list of GNU components as a recipe, they decided what would be included all on their own.
Thanks to the tireless efforts of the GNU Project, there was a lot of free software available for them to pick from. But that is not sufficient reason to call the distributions "GNU/Linux". GNU created a lot of the ingredients, but the distributors did the cooking.
The proper name of the operating system is "Linux". It's solely up to the distributions to call name their offerings. Thus, the proper name for Redhat Linux is "Redhat Linux". Others are called "Slackware Linux", "Corel LinuxOS" and "SuSE Linux". One of the distributions calls itself "Debian GNU/Linux". That's its perogative.
Calling a distribution just plain "Linux" isn't denying Richard Stallman and the GNU Project any credit for the contributions they have made. They already get tons of credit. It is impossible to crack open a book on Linux without finding accolades about GNU and the Free Software Foundation. They are getting the credit they deserve. It's just strange that they want more.
So what does Linus Torvalds say about this whole brouhaha?
Oh, Gods, not the lignux thing again..
No, Linux should not be spelled Lignux. There's a lot of GNU code out there, but it should stand on its own instead of trying to get a free ride on the Linux name recognition.
I _am_ very indebted to the gcc developers, who have made sure that there's a good high-quality compiler out there that everybody can use, but that doesn't really mean that they get to choose their own name for the system.
Your midwife doesn't select the name of your babies..["Transcript of Chat With Linus Torvalds", Linus Torvalds, 5/5/99, ABCNEWS.com]
1996-03-26 Richard Stallman <email@example.com> * configure.in: Use lignux instead of linux as value of opsys. 1996-06-21 Richard Stallman <firstname.lastname@example.org> * configure.in: Rename lignux to linux-gnu in configuration names.