Differences in the Windows and Unix cultures
joelonsoftware.com
joelonsoftware.com
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.
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).
2. Binary is not the largest part of an application bundle (e.g. Mail binary [ppc, i386] is 5.7 MB, Mail.app bundle is 286 MB).
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.)
Certainly complexity depends on the program but wrapping most *nix philosophy utilities isn't hard, but it isn't useful either you neuter their power.
'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.
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.
Apple refurbs are also great, just got a new(er) mac book pro for 1350 (650 off).
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.
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 Linux = Tanks (made by hippies)
Win '95 = Commie
Win NT = Intended for *industrial users*
"Apple" = Black Box
BeOS = Batmobile
Browser = Reagan.
What? He could maybe work on some of the metaphors, though I got a good laugh out of it.I suppose a GUI Interface is expected on an OS built on NT Technology.