Today, Unix and its derivatives make up the majority of operating systems currently in use and its popularity continues to spread as the popularity of open-source software grows. All thanks to Kenneth Thompson, Dennis Ritchie, and their fellow rebellious Bell Labs colleagues, who—by refusing to watch their beloved Multics die—ensured that their Unix operating system would go on to run the world.
Traditionally, Unix/Linux/POSIX pathnames and filenames can be almost any sequence of bytes. A pathname lets you select a particular file, and may include zero or more “/” characters. Each pathname component (separated by “/”) is a filename; filenames cannot contain “/”. Neither filenames nor pathnames can contain the ASCII NUL character (\0), because that is the terminator. This lack of limitations is flexible, but it also creates a legion of unnecessary problems. In particular, this lack of limitations makes it unnecessarily difficult to write correct programs (enabling many security flaws). It also makes it impossible to consistently and accurately display filenames, causes portability problems, and confuses users.
(echo red; echo green 1>&2) | echo blue can output any of blue green (with a newline between them), green blue, or blue; the usual case is blue green. Fully explaining this requires surprisingly arcane Unix knowledge.