In some cases I have noticed that some people say GNU/Linux instead of just Linux. Why is that so? Do both terms mean the same or is there a subtle difference?
The GNU project was created to produce a free software alternative to Unix. They were able to produce most of the programs an operating system would provide, but their kernel, the GNU Hurd, was not stable enough to rely upon.
Linux is a kernel, the most base level of an operating system, and was created and published under the GNU GPL, a free license. It came to be adopted as the kernel of the GNU OS while the Hurd continued to be developed, but it remains an external project and is not officially part of GNU.
It is entirely reasonable to call the combination GNU/Linux as they are two distinct projects paired together. Strictly speaking, Linux by itself is not very useful without all the other software in GNU. But GNU is awkward to pronounce and is a nerdy acronym (but not nearly so nerdy as the double-recursive acronym of Hurd/Hird). Linux is easier to pronounce and is a more conventionally marketable name (being a short word with no previous meaning.)
For better or worse, Linux is now a metonym for the whole GNU/Linux OS and greater ecosystem. While it's not ideal that so many people only know the name "Linux" and not the GNU project which provides most of what they use, the reality is that language is incredibly hard to shift once it has settled, and I personally don't anticipate the situation ever changing. Let's educate people about the GNU OS, but let's not make a fuss if our grandparents (or grandchildren, depending on who you are) don't get the distinction.
Linux vs. GNU/Linux
Terminology and History-in-Brief
In common usage, the terms
GNU/Linux IPA: /ɡəˈnuː slæʃ ˈlɪnəks/ † [though often said sans 'slash', the FSF recommendation is to pronounce it] refer to the same thing: the software distribution running on a computer that includes
Linux, the operating-system kernel, consisting of low-level functionality and drivers that operate the essential devices in a computer and are necessary for its operation, as well as operating-system-specific functionality such as creation of processes and determining the scheduling of when those processes will run, among many other things.
Linux kernel initially made functional, and was made functional by, the software tools that were created under the GNU project by the Free Software Foundation (FSF) specifically in order to drive development of software for an 'operating system' (loosely speaking) that would not be be bound by the restrictions of the then-dominant propriety system of the day, UNIX, which restricted those who wanted to do various things such as see the source code of, write modifications to, build other software upon, or share new code that was based upon, other code that was held under a proprietary license.
Richard Stallman, head of the Free Software Foundation, argues that there are many reasons to prefer the name
GNU/Linux as the name of the operating system as a whole, although the debate has been long and, at times, contentious.
Current Linux-Based Software Distributions
Linux is combined with additional drivers, other low-level software, additional, higher-level support software, and innumerable other frameworks and applications; filling the gamut in licensing—from public domain to proprietary, much of it meeting the definition of 'open-source' put forth by the Open Source Initiative (OSI) which maintains a list license that are both free, and that do not have any conflicts with other free licenses, as there were some issues with incompatibilities in the past.
Depending on which of the many available distributions you choose (or you can even roll-your-own, obtaining all the source code, and building it all from scratch!) there can be upwards of hundreds, or even many thousands of additional bits of code as well, all including software from diverse sources.
For instance, most desktop systems will have X.org which you might call a 'kernel for the graphics subsystem' (i.e. it provides the basic functionality needed for any windowed desktop), and probably GTK+ (the GIMP toolkit) and I could go on... Then you'll have something on top like the K Desktop Environment (KDE), or perhaps Gnome, or Lightweight X11 Desktop Environment (LXDE), or one of many others.
It's going to be hard to run a windowed desktop system without any of this, and only a very small part of it is GNU software, and it's quite arguable that a lot of it still could be called part of the 'operating system' as it is used in common speaking.
What Should It Be Called
Hey, I don't know. I always just say: "I am running... Windows."
Seriously, though: let's talk about which term we are really talking about. Are we talking about how it is used in common speech? Or are we talking about the term as it is used in computer science?
Computer Science Term
[NOTE: I see there is debate about this issue; this is how I understood and learned the term]
Well, as a Computer Science Term, I don't think GNU has a case at all. Linux is the operating system. It provides all the basic functionality to operate the computer, and it does the process scheduling and provides resources to the applications. I don't know all the system internals of Linux so I can't say 100% that there is no overlap between what an operating system traditionally is thought of as doing and what the GNU tools do, but as far as I understand it, in general; well, GNU just doesn't do any of that.
Speaking in common, everyday terms, you wouldn't argue that someone saying they run the 'Windows Operating System' means they are running the Windows NT kernel and a few subsystems, and that they aren't referring to Win32 and all the rest. Clearly most people don't make that distinction. So why would we make it here? And, I don't think I'm going to start calling my Linux OS choice 'GNU/Linux/X.org/GTK+/KDE' either. And, for that matter, if I were to tack on GNU, I would call it: Linux/GNU. But I wouldn't.
In fact, what I call my *n-x OS (I have quite a few VMs), is by its distribution, version, and kernel type; which would determine both where the hard work was done (picking the packages, dealing with incompatibilities, patching things, etc.) and the thing that determines the ABI (application binary interface for executables). In other words, it's enough information that I could replicate that environment sufficiently to find other applications that would run under it. Well, at least it would likely be enough; assuming I knew a bit more, like what type of machine it was running on.
GNU both was and is important and I don't want anyone to forget that. But as far as I am concerned, it doesn't belong in the title to my OS. But the thing is, I'm not arguing that it doesn't belong in yours. It's actually kind of irrelevant; just make sure whoever you are talking to understands you and in this case, you can use the two terms interchangeably in common speech.
It's to distinguish GNU/Linux from other operating environments built on Linux. Each of the following environments combines Linux proper, which is a kernel, with a different "userland", or set of userspace programs and libraries. In rough order of appearance:
- GNU/Linux is a fairly complete clone of the functionality of the UNIX system. Desktop and server apps designed for UNIX are more likely to require a full-featured C library and core utilities, and the popular choice for this is GNU, maintained by the Free Software Foundation. On desktop machines, it also generally involves installing X.Org X11.
- Embedded Linux is a lightweight userland seen in appliances such as home network gateways, televisions, and the like. It typically uses a lightweight C library, such as Newlib or uClibc, and commonly uses BusyBox as its shell and core utilities.
- Android is a userland commonly seen on mobile phones and tablet computers. It uses Google Bionic as the C library. The GNU/Linux FAQ, published by FSF, uses Android as an example of a Linux-based environment that is not GNU/Linux.
These are not hard distinctions. Once Android was released, some embedded Linux enviroments began to use Bionic, as Chris Stratton mentioned in an answer to "Alternative to Newlib?". It's also possible to take bits and pieces from GNU, such as GCC and Binutils, and use them atop an Android system, embedded system, or even a system that doesn't use Linux at all. DJGPP and MinGW are notable distributions of GCC for Microsoft operating systems. Many of us are also familiar with Cygwin, a UNIX-compatibility layer for Windows that is based on GNU. Its name originally stood for "Cygnus GNU/Windows". In Windows 10, Microsoft introduced its own port of GNU to Windows, (somewhat misleadingly) called Windows Subsystem for Linux. And for a while, Debian was even building a GNU system atop the kernel of FreeBSD, resulting in "Debian GNU/kFreeBSD".
FSF declines to clarify how much of the GNU system qualifies an operating environment to take the "GNU/" label. But as a rule of thumb, I have applied the "GNU/" label to systems that contain GNU Core Utilities plus two of Bash, GNU Emacs, GCC, or a shared GNU C Library (glibc).
They are different terms for the same thing, used by two different groups of people. Use of the GNU/Linux name is done at the explicit request of Richard Stallman and the GNU Project. You can read the full rationale on the GNU Project's website, but it seems to boil down to this:
Linux is the kernel: the program in the system that allocates the machine's resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux.
I think it's fair to say that opinion is divided about the merits of this. I personally try to use the GNU/Linux term when I can, but I understand that not everyone sees it as desirable, or even sensible.
Just using a kernel will not get you anywhere, you need something called the "userland": an editor, a filesystem, tools of all kinds.
There is an extensive FAQ about this question.
It's easiest to understand by looking at other libc/kernel pairs.
For example, I know that there are people who run:
The name of operating system may be authored as the group or author likes it. Some have created Red Hat Linux, some SuSe, and there are hundreds of such names of operating system.
The original name of the operating system that is today often by mistake called "Linux" is GNU: http://www.gnu.org/ - and GNU compiler was used to compile Linux. GNU is the full operating system.
When based on Linux kernel, one may refer to it GNU/Linux. When based on NetBSD kernel, one may refer to it GNU/NetBSD. But there is freedom to name it what you want. One shall never forget that Linux kernel was NOT intended to be free software. The author of GNU operating system is Dr. Richard Stallman.
Using the Kernel alone, regardless if Linux or any other, does not make you "operate" with your computer. Thus Linux as kernel is certainly not "operating system".
When he was making speech in Finland, Mr. Linus Torvalds, at that time, understood the free software philosophy and has decided to license the Linux kernel by the GNU GPL software license.
From there on, Linux kernel became part of the GNU operating system.
Some people don't have father or mother, and some don't want to think of the father of the mother. There may be many reasons for that. But the fact is that even such people have fathers and mothers.
That is the analogy to the naming of the operating system as "Linux" by the kernel. It does not give proper credit to the original operating system, though there is freedom for everybody to call it as they want. See example of GNU system distribution: http://www.gnu.org/software/guix/
Understanding the origins of GNU operating system, whatever distribution it may be, helps and encourages people to program, study the source code, respect the authors and enjoy the freedom.
The GNU project was started in the 80ies to create a "free Unix clone" under the name GNU (acronym of "GNU is No Unix"). A lot of userland utilities got cloned, a capable C compiler and C library were written. They adopted a hodgepodge of freely available pieces as part of the "GNU system", like TeX (base of their texinfo documentation system). But the kernel still is nowhere in sight. Note that perfectly capable Unix userland is part of the BSD systems.
Linus Torvalds started Linux "to learn how to program my i386" (dissatisfied with Minix, a very simple system for 8088 for classroom use, for which patches were distributed separately due to licensing restrictions). He soon adopted GPLv2 as the license which most closely described what he wanted. Many GNU programs where ported early (they had been used on many different Unix systems for quite some time, easing this job). A variety of organizations picked up Linux (the kernel), some GNU packages, lots of homebrew code and created a variety of distributions. They also include huge amounts of code from other sources, like the X Windows system for graphics, complete languages like Perl and Python, graphics environments like KDE and XFCE. In any Linux distribution the GNU tools form the traditional Unix command line interface for users, almost all the system administration commands are Linux own, and (except for the Gnome environment, which associated itself with GNU) the graphical environments are not GNU. Each distribution has it's own idiosyncratic installation system and management tools, none part of GNU. A Linux distribution is overwhelmingly not GNU. Just singling out one of the very many contributors (even an important one) is hypocritical.
If you look at the history, the GNU tools were often used as replacements of the clunky tools that came with proprietary Unix systems in university settings, and very little else. The compiler was managed mostly by a company specializing in development toolchains for embedded systems, and was quite successful in it's niche. It was even adopted as the official C compiler in Data General's DG-UX. Other than that, GNU was marginal. When the lawsuit of USG vs BSDi rolled along around 1994, the Unix mostly used was some form of BSD. That came to a screeching halt, the formerly freely used code became tainted by possible licensing hassles. Linux was just becoming usable, and Linux distributions started to fill the void for hobbyists and soon "for real use". When the dust settled with a resounding defeat for AT&T's landgrab, Linux had taken over. I.e., much of GNU's success was Linux' accomplishment (and sheer dumb luck), not the other way around. If it hadn't been for USL vs BSDi and Linux, nobody would know what GNU is.
In the FAQ of gnu.org they provide the following:
Why do you call it GNU/Linux and not Linux? (#why) Most operating system distributions based on Linux as kernel are basically modified versions of the GNU operating system. We began developing GNU in 1984, years before Linus Torvalds started to write his kernel. Our goal was to develop a complete free operating system. Of course, we did not develop all the parts ourselves—but we led the way. We developed most of the central components, forming the largest single contribution to the whole system. The basic vision was ours too. In fairness, we ought to get at least equal mention.
See Linux and the GNU System and GNU Users Who Have Never Heard of GNU for more explanation, and The GNU Project for the history.
Why is the name important? (#whycare) Although the developers of Linux, the kernel, are contributing to the free software community, many of them do not care about freedom. People who think the whole system is Linux tend to get confused and assign to those developers a role in the history of our community which they did not actually play. Then they give inordinate weight to those developers' views. Calling the system GNU/Linux recognizes the role that our idealism played in building our community, and helps the public recognize the practical importance of these ideals.
How did it come about that most people call the system “Linux”? (#howerror) Calling the system “Linux” is a confusion that has spread faster than the corrective information. The people who combined Linux with the GNU system were not aware that that's what their activity amounted to. They focused their attention on the piece that was Linux and did not realize that more of the combination was GNU. They started calling it “Linux” even though that name did not fit what they had. It took a few years for us to realize what a problem this was and ask people to correct the practice. By that time, the confusion had a big head start.
Most of the people who call the system “Linux” have never heard why that's not the right thing. They saw others using that name and assume it must be right. The name “Linux” also spreads a false picture of the system's origin, because people tend to suppose that the system's history was such as to fit that name. For instance, they often believe its development was started by Linus Torvalds in 1991. This false picture tends to reinforce the idea that the system should be called “Linux”.
Many of the questions in this file represent people's attempts to justify the name they are accustomed to using.
Should we always say “GNU/Linux” instead of “Linux”? (#always) Not always—only when you're talking about the whole system. When you're referring specifically to the kernel, you should call it “Linux”, the name its developer chose. When people call the whole system “Linux”, as a consequence they call the whole system by the same name as the kernel. This causes many kinds of confusion, because only experts can tell whether a statement is about the kernel or the whole system. By calling the whole system “GNU/Linux”, and calling the kernel “Linux”, you avoid the ambiguity.