The real difference is that you can take a unix program (which obeys the dont blabber rule, is a command line program with lots of options, etc.) and with a good amount of effort put a GUI on top of it to make it look pretty. Case in point: Ubuntu. It attempts to do this to most tools, and succeeds in many ways. My computer illiterate father was soon able to wrap his head around Synaptic package manager (which is just a wrapper around APT).
But you can't take a Windows-culture program and make it easily programmer accessible. This is a one way street. I think that the Unix-style dual access is far more powerful. Apple doesn't open source its work, but it is BSD based and I get the feeling that internally, Apple follows this "unix culture" (I hesitate to use the article's terminology, but bear with me here) and thus comes out with powerful programs that are command line accessible but have wrappers (albeit beautiful ones) around them. This is what enables them to refactor internal parts like in Snow Leopard that cut out gigabytes of cruft - it starts to sound like this "unix culture" is simply best-practice engineering in terms of modularity and flexibility of individual packages.
If Microsoft even attempted to refactor some parts of the OS, they'd break something terrible.
I disagree with Joel where he says Apple follows the Windows culture. It seems that OS X is factored "the unix way" up to a point - where a beautiful API is exposed, and another team (the Steve Jobs insane perfectionist team) takes that and puts a usable beautiful front-end on it, which may, in Joel's mind fit the "Windows-culture", but is thin enough that the unix-culture layers beneath hold the meat of the OS, and thus can be modularly modified rapidly.
Linux lacks this final layer, which leaves it looking so broken and hacked together at the top. It still is an open question if the front end can be created without the dictatorships of a large company like Apple or Microsoft at the helm - but if anyone's got a shot, I think Canonical would come closest.
It's worth considering that both approaches may be one-way streets. It's easy to underestimate the effort required to put a good GUI onto a command-line program of any complexity. Often the UI is an order of magnitude more complex than the "program" part of the program.
Last spring, I wrote a clone of the old video game Master of Orion in javascript. Step one was to get the simulation working, and it took a couple days to effectively model the universe, planetary growth models, ship movement and combat, and basically everything needed for a playable game. At that point, all that was left was to "slap a GUI onto it" so that you could interact with that simulation.
That GUI Slapping took at least 20 times the effort of the game engine itself. UIs are complicated. They have little details and corner cases. They need to correct for human behavior, and more importantly, they need to feel right. That's a ton of work, and it seems to get overlooked every time I hear this unix vs windows culture debate.
So yeah, it's damn near impossible to tack a good command line onto a complicated windows app. It's also damn near impossible to tack a good UI onto a complicated command line app.
(I'll leave it to others to insert the comment about 15 years of "linux on the desktop" being evidence of the above.)
The "Windows-culture" way of making something programmer-accessible is to provide an API, usually using COM (preferably with IDispatch support for ease of use and scriptability), or these days .NET. Such an interface is richer than one can normally get using the command-line, which is essentially forced to multiplex possibly multiple threads of control and interaction with many program "objects" through a single bidirectional pipe.
The bidirectional pipe has other benefits, of course; it's easily remoted using ssh or even straight TCP, rather than needing the complexity of DCOM (made easier using IDispatch and variants/type/etc. with built-in remoting support).
Just as a side note, the "gigabytes of cruft" mentioned cut from Snow Leopard curiously comes to almost exactly the size of removing the PPC binaries from Leopard.
Uzbl's gotten a lot faster since it learned to talk to the cookie handler over a socket (rather than spawning a new handler for every request). That was committed a week or two ago.
Written in 2003, and its age shows. It is clear that the people working at Ubuntu and other distros only care about making their product easier to use by non-programmers.
'Raymond does attempt to compare and contrast Unix to other operating systems, and this is really the weakest part of an otherwise excellent book, because he really doesn't know what he's talking about. Whenever he opens his mouth about Windows he tends to show that his knowledge of Windows programming comes mostly from reading newspapers, not from actual Windows programming. That's OK; he's not a Windows programmer; we'll forgive that.'
Joel is not a Unix programmer; we'll forgive that.
Canonical is being funded by a billionaire with an explicit goal of making Linux user-friendly. It didn't exactly generate that motivation intrinsically; it was injected by economic force from without.
All of the major distros do it - the biggest irritation I have with Red Hat and Debian are their package managers - both rpm and apt add a layer of cruft I have to learn without really improving on tarballs, except that they are easier for people who can't be bothered moving untarred files to the correct directories. And since the "correct" directories are different on different distros, they are a royal pain when working with more than one distro.
Perhaps what most interests me about the article is not the dichotomy of the two cultures, but in the area between them.
I'm a college sophomore studying EE in a notable university, but I spent most of my free time (and much of my homework time!) coding in high school. I had been using Linux from middle school, so my way of learning coding was picking up K&R's C book, learning the ropes, and starting to code on Linux. Linux really was an incredible atmosphere to learn to code in, and I learned more than just C. The ability to look at the source of other applications, to submit bugfixes for projects, and the incredible POSIX standard that makes C and other languages just ... whistle ... was great.
That said, I later abandoned Linux (several reasons: time, laptop incompatibility, much more time spent fiddling with radios, I "sold out", whatever) for day-to-day use. I still code and do it on Windows, but it's not the same. Now there are a lot of things of the "Windows culture" that I really like -- a shiny GUI for everyone, a huge smattering of applications which means that if I don't want to write it I don't have to, not having to deal with finding obscure driver patches so that my out-of-date hardware can stay supported, package management clashes, etc. But when I want to code, and I do so intermittently, I feel the intellectual gap.
I want that great POSIX interface, but more importantly I want an atmosphere that works around the code that I write. And here's where I feel the gap the most -- what about those of us who really enjoy a satisfying, intellectual coding experience, the "Unix culture" (and I don't code often enough to want to want to grind out consumer software), but still want the benefits felt for other users of the OS somewhat appreciably, and still want this end-user directed drag-and-drop "Windows culture".
I've heard that the Mac bridges the gap, but I'm an impoverished student, and spending $1000 on a Mac laptop is something in my semi-distant future.
If you want a {star}nix, try FreeBSD if you've got a day or two to set it up. If not, maybe PC-BSD. PC-BSD is based on FreeBSD but integrates KDE. The reason I like FreeBSD is that it just seems to have more tools available, like sysctl to view/set various options like computer temperature, turning the reading light on/off (on my used Thinkpad T43). Compared to Linux, I like the core OS more, but there are more programs available for Linux. FreeBSD can run Linux programs through a compatibility layer. Actually, thats how I'm running the Adobe Flash plugin, but it is a little slow.
A second point: if you think there aren't many games on Linux, wait until you try FreeBSD - there are even less. There's minesweeper and a few similar, but thats about it.
FreeBSD users seem to think that Slackware is the most similar Linux distro. Anyway, FreeBSD might be worth a try for you!
Hardware also seems to have excellent support built in.
Maybe I'll try it; Slackware was my first and still favorite distro. The big problem is I'm on dial-up and can't download much - and too many linux resellers are apparently rip-off artists, since at least half the CDs I've bought by mail won't work. That's one reason I bought the new Ubuntu 8.10 DVD; unfortunately I don't like it much more than Vista, which isn't much. I haven't got a Slackware distro that will work on my current computer, the 10.1 setup apparently can't handle SATA disks.
The Apple student discount isn't "hefty." They are a little less than 10%. Typically $100 off laptops less than $1500, $150 off $1500-$2000 and $200 off $2000. Late summer they usually throw in an iPod for free. It's not a bad deal overall, but refurbs are the way to go if you need a real discount.
Thank god, as that's easily the worst thing Stephenson's ever written -- like a rambling inept Slashdot comment, but stretched to 160 pages -- it's even structured around an extended simile between user interfaces and fictional automobiles, for fuck's sake!
On top of all that, it has the misfortune of being written at the worst possible point in time:
* too long after mainframes, minicomputers, or basic micros
* right before the death of BeOS (which he was infatuated with)
* right as Apple is about to die from its own bullshit
* long after NeXT has faded from relevancy but before the buyout
* In Linux's middle-aged (~2.2) years when a lot of things were bogged down
in wank -- well after the initial excitement, but well before BK and git
But you can't take a Windows-culture program and make it easily programmer accessible. This is a one way street. I think that the Unix-style dual access is far more powerful. Apple doesn't open source its work, but it is BSD based and I get the feeling that internally, Apple follows this "unix culture" (I hesitate to use the article's terminology, but bear with me here) and thus comes out with powerful programs that are command line accessible but have wrappers (albeit beautiful ones) around them. This is what enables them to refactor internal parts like in Snow Leopard that cut out gigabytes of cruft - it starts to sound like this "unix culture" is simply best-practice engineering in terms of modularity and flexibility of individual packages. If Microsoft even attempted to refactor some parts of the OS, they'd break something terrible.
I disagree with Joel where he says Apple follows the Windows culture. It seems that OS X is factored "the unix way" up to a point - where a beautiful API is exposed, and another team (the Steve Jobs insane perfectionist team) takes that and puts a usable beautiful front-end on it, which may, in Joel's mind fit the "Windows-culture", but is thin enough that the unix-culture layers beneath hold the meat of the OS, and thus can be modularly modified rapidly.
Linux lacks this final layer, which leaves it looking so broken and hacked together at the top. It still is an open question if the front end can be created without the dictatorships of a large company like Apple or Microsoft at the helm - but if anyone's got a shot, I think Canonical would come closest.