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.
One can divide Linux distributions into two classes: GNU/Linux and uClinux. Though the name "GNU/Linux" has proven controversial in the past, it is still useful for distinguishing Linux on desktop PCs and servers from Linux on special-purpose appliances.
A "GNU/Linux" system combines a Linux kernel with the GNU userland (GNU C Library (also called "glibc"), Bash, and GNU Core Utilities) and other GNU software. 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.)
Originally, "uClinux" referred to a fork of the Linux kernel for the microcontrollers used in appliances (hence uC). Systems running uClinux would also generally run uClibc and BusyBox, which are lighter weight than the GNU C Library and Bash + GNU Core Utilities respectively. But as some of the uClinux changes were integrated into the mainline Linux kernel, "uClinux" began to signify the common pattern of Linux embedded in an appliance: a Linux system using uClibc (or other lightweight C runtime libraries such as Newlib or Google Bionic) and a lightweight shell such as BusyBox. Even the Free Software Foundation, which maintains the GNU operating system and advocates for the use of the name "GNU/Linux", agrees that uClinux systems and the Linux-based Android system are not GNU/Linux because they use very little GNU software. However, as of 2012, there is a binary-compatible fork of the GNU C Library designed to have a smaller footprint, called EGLIBC, making the distinction not so clear.
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 X.Org (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, or any printer with a network jack and PostScript support
- NVIDIA or ATI video card or any Intel GMA other than GMA 500
- Any WLAN card using an Intel or Realtek chipset
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.
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.