Rob Pike gave a presentation in 2001 entitled “The Good, the Bad, and the Ugly: The Unix Legacy.” His main point is that diversity has been bad for Unix. He opens his presentation with a couple of quotes to set this up.
‘‘The number of UNIX installations has grown to 10, with more expected.’’ — The UNIX Programmer’s Manual, 2nd Edition, June, 1972.
The number of UNIX variants has grown to dozens, with more expected.
He discusses much more than diversity, and I believe the more interesting parts of his talk are on other topics, but he begins and ends with diversity. One of his last slides says
Microsoft succeeds not because it’s good, but because there’s only one of them. … Unixes of the World, Unite!
Joel Spolsky has a different take on the differences between the operating systems in his article Biculturalism. Spolsky says that Unix software is programmer-friendly but Windows software is user-friendly for the vast majority of users who are not programmers. But Spolsky does touch on the diversity issue that Pike raised.
For example, Unix has a value of separating policy from mechanism which, historically, came from the designers of X. This directly led to a schism in user interfaces; nobody has ever quite been able to agree on all the details of how the desktop UI should work, and they think this is OK, because their culture values this diversity, but for Aunt Marge it is very much not OK to have to use a different UI to cut and paste in one program than she uses in another.
Just to throw in my two cents worth, I’ll mention my blog post Where the Unix philosophy breaks down. The Unix philosophy is to write little programs that do one thing well, then sew these little programs together to do your work. The problem is that many people lack the desire or skill to do the sewing. They want to avoid the transaction costs of switching software applications. Pike alludes to this problem, dismissively saying that people want “hand-holding” rather than pipes.
I don’t think this desire for integrated applications is necessarily a problem for Unix, only for the Unix philosophy that Unix doesn’t follow too strictly. The emphasis on orthogonal programs is a laudable ideal. It just needs to be tempered a bit for the convenience of mortal users.
19 thoughts on “Three views of Windows and Unix”
The diversity is mostly gone. Unix is, for all practical purposes, Linux today. Libraries, UI’s and so on are also far more homogeneous than they used to be. There’s more than one UI and more than one toolkit of course, but then, how many does Windows have if you’re going to count.
What I do wonder about, though, is the presumption that every system must cater to everybody. perhaps, if it really is too difficult to make a system that makes both aunt Marge and Maggie the Hacker happy at the same time, we should accept that systems aim for a subset of users only, and that not all systems choose Marge as the userbase to aim for.
Janne: I agree that a lot has changed since 2001. Pike was speaking at a time at a dark time for Unix. Windows took a lot of market share away from Unix in the late 90’s. Linux had yet to take off as it has.
I agree that it’s hard if not impossible for one system to make “Aunt Marge” and a hacker both happy. But I’m both of them. Sometimes I’m a hacker and I want flexibility, control, composability, etc. But sometimes I want to be a typical consumer and have things just work.
John, I’m much the same; I want the power at some times, and just do things simply at other. Of course, it still means our “hacker” and “auntie” priorities differ. My choice for resolving this is using Ubuntu over more hacking-friendly, but more set-up intensive distributions. Why not Windows? In my line of work (computational neuroscience, more or less) most tools do not run well or not at all on Windows. The big systems I have access to all run Linux.
Also, I am comfortable working and developing under *nix/Posix while my experience with Windows is too limited for me to be proficient. Previous experience easily accounts for 80% of usability from an individual point of view.
I don’t think the problem is the UNIX philosophy itself, it’s rather that no one has found out a proper way to apply it GUIs. In a textual world the pipe (and it’s notation) comes up easily. All you have is a stream of text and you literally ‘pipe’ it to another application. The UNIX methodology would collapse without such a simple way to tie programs together. What’s the equivalent for graphics? I don’t think anyone has come up with a suitable answer.
I was a hardcore Linux user at one point, 15 years ago. I spent a huge amount of time building kernels, finding drivers, writing config files, etc. I know that things are much better now, but in the meantime, when Mac OS X came out and was a Unix, I never looked back. I get the Unix environment, the usual utilities (and more through Homebrew), and also the “just works” aspects of the Mac.
I can’t help not mentioning Neal Stephenson’s essay “In the beginning was the command line” in this context. (I think you’ve linked to this recently, in fact.)
Interesting essay. I liked his observations about culture — Disney etc. — as much as his observations on tech. I’d like to see how Stephenson would update that essay now. A lot of specifics have changed, though the general principles have not.
I do a lot of work with Linux and with Windows, mostly at the intersection of Windows and Linux, because I work on Samba (and have done so for more than 10 years now), but I have written code for Windows and Linux (both user-mode and kernel mode for Linux), and have written, as a member of an open-source team, code that runs on multiple OSes (Ethereal/Wireshark).
I have to disagree that Linux/Unix is for easy (or easier) for programmers and Windows is easier for users. Yes, Windows looks easy for users, but Microsoft keeps changing the interface (although I notice that Fedora 16 is very different from the earlier versions), but quite frankly, I remember VMS and note the similarities with Windows (NT and above, that is).
I think Windows is almost as easy for programmers as Unix/Linux is, although they have different (but overlapping) sets of ideas. However, on balance, they have different amounts of appeal in different environments.
Perhaps the thing that Windows (NT and above) got correct was the notion of structured (and hierarchical) security IDs (SIDs) while Unix/Linux is still tooling along with the primitive notion of a flat (and separate) UID and GID space.
In addition, Windows and Unix have pursued different paradigms in other areas. For example, filter drivers are very easy to do and install in the file-system and storage stack in Windows, not so easy in Linux/Unix. Also, Windows has an async model on top of which you can implement synchronous system calls etc, while with Linux/Unix it is synchronous except for AIO, which forces you to use threads and thread pools in a number of important instance.
Of course, they each have their deficiencies as well, and I appreciate things that just work and a consistent interface, and do make a lot of use of shell scripts and tools. The biggest advantage I see with Linux is that if I am developing a product, I have access to the kernel source code for Linux so I can determine exactly how it does things, and can fix problems I encounter or extend its functionality greatly, and that, at least up to now, it ran on ARM and MIPS and X86 and almost anything you could name. There appears to be indications that a version of Windows will run on ARM soon, though.
The Unix philosophy, which got submerged in the development of massive, multifunction programs, is being reborn in the mobile app market. The mobile app model takes the form of a number of individual screens or tasks, which appear, do a specific job and then go away to be replaced by another screen/task which does its job and goes away – much like the original concept of multiple small programs each doing its own job.
I am a programmer. My first and only foray into Linux was when a family members computer was corrupted somehow and they asked me if I could install Linux for them instead of Windows, since Linux was free. Being a programmer I found the steps you had to take to install Linux almost impossible to do… without several days of research and trial and error anyway. This was a few years back so maybe things are different now, but whatever happened to a plain old simple installation? If Linux can’t get that right and EASY then Linux will never be able to compete with Windows or Apple.
Imagine Linux as Wikipedia, but with less editors (programmers) and more complicated (code instead of natural language, architecture). Compare Wikipedia to Britannica – and you get Linux vs Windows in future.
A problem is possible here – complexity may grow faster than the number of editors. It can be handled by popularisation of platform, projects like Android and Ubuntu for example.
Linux has gotten much easier to install. It’s smooth now.
Unix is not programmer friendly. You can spend weeks engrossed in the nuances of correct C++ and never get any actual business related work done. There are no decent libraries and no support for the few crappy ones that do exist. The reason MS Windows has 90% of the market is that Microsoft has always been first, and foremost, a developer of development tools. Now Apple seems to have learned this lesson too. The Unix community… no so much.
Yes, Linux is quite easy to install now. I have done it effortlessly in the past couple of years. Amusingly, much of what goes on for Linux adopters these days has to do with preferences when it comes to default GUIs coming configured with a Linux distribution.
To anyone replying to Mark: Please don’t let this degrade into a flame war.
Mark, I want to stay away from arguments about the relative quality of Unix or Windows tools. My point here is that the two operating systems have different values. For example, Unix values modularity over integration. Both platforms produce quality tools and libraries, but they have different standards by which they measure quality.
John, your comment back to me is well stated. I understand now. I think I don’t share the same values as the *nix fans. :)
I must also agree with Joel Spolsky. In the day, Unix was a write only OS where Windows made life very easy for the ordinary user. But kudos to Apple for reigning in their version of Unix and making it very user friendly by adding a very good UI as well as bringing their computers’ prices down to be more competitive with Windows computers.
What is all this blabber about pipes. Seriously.
I’ve never heard anybody that really hates *nix complain about pipes. In fact, Windows users wanting the power of *nix will install cygwin and use the pipes.
The problem with Unix is that the software is garbage, it has bugs that you have to fix with help from others on a mailing list. Whereas with Windows a patch has been written.
This is why Unix is CRAP
People were complaining about the same kind of thing 10 years ago with it. And back then the answer was “you haven’t tried the latest”.
Here’s a line I liked from The Unix Hater’s Handbook:
Before anyone gets upset, note that The Unix Hater’s Handbook is (1) old, and (2) intended to be funny.