GNU/Linux is an operating system based on the GNU operating system with Linux as its kernel, generally distributed under a free software license. Popular distributions of GNU/Linux include Debian, Ubuntu, Fedora, and CentOS.
A "GNU/Linux" system combines a Linux kernel with the GNU userland. It is called "GNU/Linux" because at one point, desktop Linux distributions had more code from GNU than from the Linux kernel. (Though the size of the Linux kernel has increased with the inclusion of drivers for a larger selection of hardware, GNU may still outweigh Linux in distributions that use the GNOME desktop environment or one based on the GNUstep toolkit.) But not all Linux systems are GNU/Linux. The Android system and several embedded systems used in home Internet routers and other special-purpose appliances use Linux as the kernel, but they use little or no GNU software.
Because userland components on a UNIX-like system are easy to replace, some people have written about annoyance at the lack of a precise definition of how much GNU software is needed to justify the "GNU/Linux" name. David Johnson attempted a reduction to absurdity by replacing components of Debian GNU/Linux with non-GNU components until nothing essential remained. So as a rule of thumb of when an environment should be called a GNU environment, I came up with a definition that approximates what I believe Mr. Stallman is getting at. An environment containing GNU Core Utilities and two other major GNU components, such as Bash, GNU Emacs, GCC, or a shared GNU C Library (also called "glibc"), is probably a GNU environment.
Under this "Coreutils plus two" definition, Debian, Fedora, Ubuntu, SUSE, and other popular Linux-based desktop and server operating systems are GNU environments. So are Cygwin, MinGW (Minimalist GNU on Windows), and Windows 10's WSL, all of which port Bash, Coreutils, and GCC to Microsoft Windows. It also correctly excludes environments built around a lightweight shell, such as BusyBox (which incorporates the Almquist shell and reimplemented core utilities), and a lightweight C library, such as uClibc, Red Hat's Newlib, or Google's BSD-based Bionic. Of course, I'm willing to refine this definition based on edge cases that others come up with. And whether EGLIBC, a lightweight yet binary-compatible fork of the GNU C Library, counts as GNU software isn't entirely clear either.
Other pundits prefer the term "X11/Linux" as a direct contrast with Android, claiming that the X Window System is a more salient and less replaceable part of the stack than the GNU tools. Just as FreeBSD largely runs the same GUI applications as desktop Linux without having GNU, a Linux distro built on a different C library and BusyBox and compiled with Clang would still run the same applications. Alpine Linux, for example, uses musl and BusyBox. Advocates of giving naming rights to X, not GNU, include the author of the "rebuttal" section of the "interjection" copypasta.
In order for GNU/Linux to work with a PC, each piece of hardware has to have a driver. For some classes of hardware, this driver is within Linux itself. For others, it is part of a user-space project such as X11 (video cards), CUPS (printing), or SANE (scanning). Not all makes and models that work in Windows XP or in Windows 7 work in GNU/Linux, and reports of unsupported hardware from people switching from Windows to GNU/Linux sometimes give users a bad impression. In fact, some hardware makers have acted antagonistically against developers of drivers for GNU/Linux. But if you have the opportunity to buy or build a PC specifically to run GNU/Linux, here are some tips on how to find compatible hardware:
- HP or Epson printer (other than one using HP Instant Ink), or any printer with a network jack and PostScript support
- AMD if you need a discrete GPU; Intel HD Graphics if you don't. Buying a new desktop GPU or new laptop to switch from NVIDIA to AMD can prove worth it.
- Any WLAN card using an Intel or Realtek chipset
- Used ThinkPad laptops are a good idea
In my opinion, GNU/Linux hardware support will have "arrived" once one of the following situations happens:
- the majority of boxes of peripherals on the shelves of a U.S. electronics chain have a stylized penguin on the front or another way to easily identify which peripherals are compatible with GNU/Linux;
- I can buy any random peripheral off the shelf of a U.S. electronics chain and expect it to work as well with Fedora or Ubuntu as it does with whatever version of Windows the box does list; or
- the major U.S. electronics chains and mail order shops allow incompatibility with GNU/Linux as an excuse to skip the 15% restocking fee.
(I use the United States as an example because it's a sufficiently large single-language industrialized market. Currency strength counts because people can afford new computing hardware, and market size counts because of the cost of localizing a product for each market.)
Until then, home users will have to check hardware compatibility lists (HCLs) online before buying peripherals, such as audio capture, video capture, printers, and the like. Not all users are willing to learn how to do that, especially if they don't carry a smartphone to have the HCL at their fingertips in the store and they don't want to deal with the hassle of mail order returns.
Some application classes are underrepresented on Linux compared to Windows. They tend to be the same application classes underrepresented in free software in general. I listed a few in this Slashdot post.