GNU’s not Unix. Nor is it Linux – or is it? Slightly controversial in its own right, an article I wrote recently opened the door to a heated debate that has been ongoing in the free software community for quite some time. GNU vs. Linux has divided the IT nerd population and even after all this time, neither side appears to be close to a compromise.
I know I’m guilty of it. You probably are too. The crime in question is referring to a popular open source OS like Debian by the Linux tag. As the kernel, Linux is no doubt important. But just as the heart can’t pump life into the human body without its associated organs, the kernel is essentially useless minus the complementary software that makes up the entire operating system. Linux’s limited role in the complete picture is the angle GNU backers are using to beat a horse that has probably been dead since the first major distro went commercial.
The Birth of Controversy
Linux history lessons often start in 1991, when an ambitious programmer named Linus Torvalds created the kernel that, perhaps to the chagrin of Richard Stallman, is still the driving force of the open source movement. However, what usually gets skipped in the timeline happened in 1984, when the Free Software Foundation (FSF) began assembling the GNU OS as a free take on Unix. The project was almost finished by the time Torvalds rolled out his baby, leaving a rapidly growing Linux following with little to do other than gather up the other free software tools that would finally complete the Unix-like system.
The software packages layered around Linux typically include desktop environments, GNU tools, and the GNU operating system itself. While not all distros are GNU based, many are, including those distributed by mega companies like IBM and Red Hat.
So if it’s arguably the smallest piece of the puzzle, why does Linux get all the attention? How did a measly kernel become the icon of the free and open source software revolutions?
That’s the GNU beef and the reason why its supporters at the very least, would like to see “GNU/Linux” used in place of Linux alone more often.
For the GNU community, the naming controversy is all about respect: getting Linux to remember where it came from. It’s sort of like the athlete who went from struggling to get by in a rough and rugged environment to living the life of luxury as a multi-million dollar celebrity figure. Even with the bright lights of super-stardom threatening to blind them, some manage to stay grateful and remember those humble beginnings. Call it petty (and some have), but the GNU crew is like the group of friends who want credit for supporting Linux before all the fame and notoriety.
Anyone looking to flaunt his or her nerd cred can use the GNU vs. Linux angle to pick apart the most trivial distinctions. Take the post I mentioned in the intro for example. One SpiceWorks commenter thought it should be known that a couple of items on my list were not Linux commands, but core utilities (coreutils) built into the GNU OS. In this context, commands are basically small programs or “utilities“ baked into the shell itself; but I felt the commenter’s need for clarification warranted a closer look at the tools used in and around the terminal environment.
Whether it should be attributed to Linux, GNU, or GNU/Linux is another topic entirely. Either way, the coreutils family is made up of several tools that are universally embraced as commands for manipulating Unix-like systems. The coreutils package features three sets of utilities that respond to both standard and command line input when working with the terminal or shell scripts. Below we examine each utility to determine how they relate to and/or differ from what one might call Linux commands.
The file utilities package equips system administrators with extensive file management capabilities. Commonly used programs in this package include:
chmod: Short for change mode, the chmod utility allows you to change user permissions for files and directories on the system. Admins tasked with managing access permissions for a large group of users can save a lot of time by getting familiar with this tool.
cp: The “cp” utility makes copies of files and directories. cp can be used to copy the contents of one file to another, copy one or more files to a specific directory, or copy whole directories to a larger directory.
ls: The “ls” utility lists the files in a given directory. Executed as is, it lists files in the current directory, but can be tweaked to pull up lists from other specified directories as well.
rm: The “rm” utility removes files, directories, and other objects from the file system. Rather than remove the data entirely, rm removes references of those objects to make for a leaner, better organized system.
shred: The “shred” utility overwrites and deletes files on the system. This simple command acts as both a powerful privacy feature and security tool by making deleted files virtually impossible to recover.
The text utilities facilitate advanced manipulation of the text-based aspects of files in the system. Commonly used programs in this package include:
cksum: Short for checksum, the “cksum” utility generates a cyclic redundancy check (CRC) value and number of bytes for files and blocks of data. Linux administrators regularly use cksum to verify data integrity, particularly for files that have been sent via insecure means.
cut: The “cut” utility is used to extract sections of columns and fields from one or multiple files. For many administrators, this program is extremely handy at text parsing and other everyday command line tasks.
paste: The “paste” utility is used to join horizontal lines in text files. This command is useful for merging the lines in a single file as well as those from multiple individual files.
split: The “split” utility is used to split larger files into two or more smaller files. It is regularly used with the paste utility to merge lines between text files.
wc: Short for word count, the “wc” utility generates statistics for word, character, and line counts in individual text files. Gaining a quick snapshot of the total number of database records across a given set of files is one of several ways administrators can use a wc command.
The shell utilities enable system management beyond files and text. Several of the “core” tools in this package are designed to keep the OS environment running in tip top condition, including:
chroot: The change root or “chroot” utility temporarily changes the root directory for current running processes. By isolating specific applications in an environment unseen by Linux (or GNU), chroot offers an ideal way to test software without compromising the rest of the system.
du: Short for disk usage, the “du” utility estimates the amount of space used on a given directory or file system. This utility comes in handy for identifying directories and files that may be taking up large amounts of space on the hard drive, or connected storage media.
pwd: Short for print working directory, the “pwd” utility is used to identify the path of the directory you’re currently working in. Often paired with the ls and cd utilities, it is one the most the commonly used commands in the family of Unix functions.
sleep: The “sleep” utility pauses the execution of commands for a specific period of time. Commonly used for task scheduling, sleep commands can be used to delay called processes for minutes, hours, or even days.
uptime: The uptime utility simply lets you know how long your system has been running. This is a command an admin might call on to tout the reliability of their distro in comparison to Windows, which is not uncommon among those seeking uptime bragging rights.
Technically Speaking …
From command line tools to desktop enhancers, Linux gets some of its best known qualities from the Free Software movement. The naming controversy seems a bit silly, but as a spirited truth seeker, it feels good to have a better understanding of the GNU vs. Linux drama and why one side just can’t let go.