I <3 Steve McConnell*
Coding Horror
programming and human factors
by Jeff Atwood

Jun 7, 2009

Unix is Dead, Long Live Unix

Unix turns 40: The past, present and future of a revolutionary OS is fascinating reading.

Forty years ago this summer, a programmer sat down and knocked out in one month what would become one of the most important pieces of software ever created.

ken-thompson-and-dennis-ritchie.jpg

In August 1969, Ken Thompson (pictured at left), a programmer at AT&T subsidiary Bell Laboratories, saw the month-long departure of his wife and young son as an opportunity to put his ideas for a new operating system into practice. He wrote the first version of Unix in assembly language for a wimpy Digital Equipment Corp. (DEC) PDP-7 minicomputer, spending one week each on the operating system, a shell, an editor and an assembler.

The article is accompanied by a graph from wikipedia, illustrating the lineage of the Unix family.

unix-family-tree.png

To me, Unix has become synonymous with Linux, and the open source movement in general. The last *nixes standing shake out as follows:

Open SourceMixed / Shared SourceClosed Source
Minix
Linux
FreeBSD
NetBSD
OpenBSD
OpenSolaris
Mac OS X AIX
OpenServer
HP/UX

I didn't realize there were that many closed source Unix variants still surviving in the wild. It's also odd how OS X brings us full circle with the original Unics and BSD licensing. If it's lonely in the "Closed" column, imagine the existential angst of being the only vendor in the "Mixed / Shared Source" column. (NB: I think the currently tiny category Apple occupies represents the future of commercial software, but that's a topic for another blog post.)

I've been primarily a Windows developer since the early 90s, but over time, I've developed a grudging respect for Unix. I think Michael Feathers summarized it best:

There's something deep in software development that not everyone gets but the people at Bell Labs did. It's the undercurrent of "the New Jersey Style", "Worse is Better", and "the Unix philosophy" - and it's not just a feature of Bell Labs software either. You see it in the original Ethernet specification where packet collision was considered normal.. and the same sort of idea is deep in the internet protocol. It's deep awareness of design ramification - a willingness to live with a little less to avoid the bigger mess and a willingness to see elegance in the real rather than the vision.

I find this to be deeply and profoundly true in everything I've ever worked on as a programmer, and to the extent that Unix reflects these philosophies, it is undeniably on the right path. Unlike Rich Skrenta, I didn't grow up as a Unix developer, so I have come late in life to this appreciation. Joel Spolsky's take on the Unix / Windows divide, after reading The Art of UNIX Programming, is this:

What are the cultural differences between Unix and Windows programmers? There are many details and subtleties, but for the most part it comes down to one thing: Unix culture values code which is useful to other programmers, while Windows culture values code which is useful to non-programmers. This is, of course, a major simplification, but really, that's the big difference: are we programming for programmers or end users? Everything else is commentary.

So on one side, you have hundreds of command line applications, built in wildly different styles, with thousands of arcane command line parameters, all of which can be flexibly combined together to accomplish almost anything. And on the other side, you have the windows registry and MFC.

Sometimes, you just can't win.

So, yes, I'm a fan of Unix. And I'm also a fan of Windows. I think it's worth studying what both are getting right and wrong, because as a programmer, I'm a fan of whatever the heck works.

Posted by Jeff Atwood    View blog reactions
« Sharing Files With BitTorrent
Regular Expressions for Regular Programmers »
Comments

The upside to a lot of open source development is that it's people developing for themselves. And that often leads to excellent, well-built solutions, because the feedback loop is direct and tight. It's one of the reasons why linux, apache, etc. are so efficient and have such an excellent feature set.

However, the downside is also that it's people developing for themselves. There isn't much room for user advocates, PMs, usability experts, etc. on open source software, except at the very, very top. Which makes for software that is very well made for engineers with lots of enthusiasm and free time but often a usability nightmare for casual users.

Wedge on June 8, 2009 3:08 AM

@Ed

I think it's safe to assume that he meant http://en.wikipedia.org/wiki/Nota_bene, which is a fairly common notation in technical writing.

Matt on June 8, 2009 3:25 AM

The "less is more" philosophy of Unix vs Windows also unfortunately for Ken Thompson did not result in him becoming a multi-billionaire.

Louis Kessler on June 8, 2009 5:16 AM

Interesting.

MrcredsAlex on June 8, 2009 6:00 AM

Nice post...
Love the graph! :)

Mohit Nanda on June 8, 2009 6:05 AM

I'm 99% sure that opensolaris is not yet considered a replacement for proprietary solaris, but an alternative. which might make solaris a mixed/shared source unix?

Caleb Cushing ( xenoterracide ) on June 8, 2009 6:16 AM

Amen to the last part. I'd rather worry about what's best for [me|my client] than being [pro|anti][MS|Apple|*nix].

AnonJr on June 8, 2009 6:23 AM

I'm not sure about Joel's comparison of UNIX and windows. For me I started out with windows and spent years trying to figure it out. I then tried linux and was flying within a week. In other words windows is complicated while UNIX is complex. I hate to see complicated stuff being ported to linux.

Pádraig Brady on June 8, 2009 6:24 AM

"So, yes, I'm a fan of Unix. And I'm also a fan of Windows. I think it's worth studying what both are getting right and wrong, because as a programmer, I'm a fan of whatever the heck works."

Oh my God, I so agree with this I might cry...

Manrico Corazzi on June 8, 2009 6:24 AM

many times, in unix the end user is another programmer or sys admin.

fishstick_kitty on June 8, 2009 6:30 AM

Too bad his wife and kid didn't take a year-long vacation!

Nicolas on June 8, 2009 6:33 AM

A new Unix contender in the mixed column category: WebOS. The underpinnings are Linux with a proprietary OS.

I've worked in both the Windows and Unix environments, and Windows is about 5 years behind the times in terms of ideas and philosophy. The problem is the same reason why BSD license supporters aren't worried that people will steal their code: You make something proprietary and you have to support it all by yourself. When everyone was busy writing their own proprietary OS, Microsoft had a great advantage. When everyone is working together on Unix, Microsoft can't keep up.

Windows innovation begin and end with Microsoft. While in the Open Source world, it's the market that decides who wins.

Who knew a decade ago that a developer from Finland would be the innovator of the next OS (or at least the kernel)?? Linus was so wrong about everything: He wanted to work with the CISC x86 when everyone knew RISC processors were going to win. He insisted upon a giant kernel architecture when everyone knew that microkernel is the way to go.

Who knew that Java still had a lot of life left in it? Who knew that JavaScript could actually be used to develop full blown applications? Is Php development a good way to go, or should you use RAILS with a strong MVC environment? What about the Spring Framework? It's all about choices. May the best technology win.

You're absolutely right that mixed OSs might be the way to go. It relieves the company to come up with their own kernel and protocols, and they can concentrate on the upper layers of the OS. Microsoft should steal a page out of Apple's book and make the next version of Windows based upon the Linux kernel. Then, not only does Windows get the "cool factor" of being based upon Linux, but it can take direct advantage of the open source technology without having to rewrite everything from scratch.

David W on June 8, 2009 6:33 AM

Jeff -

Someone you know very well recently wrote: "*copy-pastes wikipedia* *rolls in own feces*." Agree.

PDP-7 was an 18-bit machine (and wire-wrapped) with toggle switches and blinking lights on the front panel. It didn't really have what we would call an operating system these days. (Link to user's manual: http://www.soemtron.org/downloads/decinfo/f75pdp7userhbkjun65.pdf).

- Lepto

Lepto Spirosis on June 8, 2009 6:33 AM

"Windows (historically) assumes there will be only one user per computer - the attempt at fixing this is a bit of a hack. Unix assumes there will be multiple user accounts. Windows assumes the user will have admin privilege."

Neither of these things were true of the NT line, which is the ancestor to modern Windows. The attempt at fixing these problems was to radically rewrite the kernel to not assume such things.

HOWEVER, this part is true:

"Many windows apps assume this [single user with admin privs], too."

And that wasn't really locked down in XP, which was really Microsoft's Great Mistake, far moreso than anything done in Vista.

"The user access flaws in windows are responsible for the huge proliferation of computer viruses seen online."

Running as admin, usually in order to use the flawed apps is what's responsible.

"How can anyone trust such an OS to do business?"

Don't run as admin. As a corollary, don't run apps that require you to run as admin. Same as every other OS. The fact is that these are proportional more common on Windows (I have no evidence for this but I believe it to be true), but then, I bet you in absolute numbers, properly written apps on Windows outnumber properly written apps on other Operating Systems.

Anonymous on June 8, 2009 6:40 AM

after reading the 'you just can't win' post of yours, I highly reccomend you follow Charlie Brooker on Twitter (@charltonbrooker and @charlie_brooker)

(dissapointed at the loss of 'orange' ;)

Alistair on June 8, 2009 6:42 AM

Well, I might say more that the fundamental difference between Unix culture and Windows culture is that Windows culture values monolithic applications and Unix culture values building things in single pieces that do one and only one thing. It doesn't *have* to be a series of cryptic command-line programs, that just unfortunately happens to be how it evolved.

It takes more time to develop a complete, functional application that a non-programmer can use, with the Unix method, but I think it results in a much more well-designed system.

-Max

Max Kanat-Alexander on June 8, 2009 6:45 AM

You've missed Solaris. OpenSolaris != Solaris. Solaris has huge inroads in the financial markets and is the platform of choice for Oracle, as evidenced in one company buying the other.

You can get Solaris x86 (which again is not OpenSolaris) for free from Sun. If you want it on SPARC then free (beer) or not isn't a problem for you, I'd suspect.

Also, don't forget UNIX services for Windows, or whatever they've rebranded it to now. IIRC it ships with 2008 server.

@Alistair: Charlie Brooker should become the totem hero of every miserablist Englishman everywhere. Along with James May.

Sam on June 8, 2009 6:53 AM

"saw the month-long departure of his wife and young son as an opportunity to put his ideas for a new operating system into practice."

I wish I woke up with ideas like that...

Nice research!

Scott on June 8, 2009 6:57 AM

It's amazing what two guys can achieve once the women are out the way

cbp on June 8, 2009 7:05 AM

As a programmer, the biggest difference I see between UNIX and Windows culture is error-checking.

Pull up a few code samples from the manufacturer's documentation. Microsoft's MSDN samples generally won't do any error checking and won't tell you how to do it. The examples in a manpage or language reference generally will.

For example, here's a link to the first Google hit for "vbscript send mail site:microsoft.com":
http://msdn.microsoft.com/en-us/library/aa563054.aspx

Here's a link to the first Google hit for "perl send mail site:cpan.org":
http://search.cpan.org/~mivkovic/Mail-Sendmail-0.79/Sendmail.pm

I'm sure you can find some exceptions in both ecosystems, but it seems the majority of Windows programmers never learn how to program defensively. The majority of UNIX programmers do. I think a lot of that can be attributed to the pool of sample code that each learn from.

Error checking on June 8, 2009 7:08 AM

A less known fact is that Ken was beardless when he first sat down to it.

Just kidding! Just kidding!

Daniel Sobral on June 8, 2009 7:09 AM

Nice post. I think that the closed/shared source model of Apple is something that we are going to see in the future.

Deepank on June 8, 2009 7:19 AM

The important point about Unix programmers programming for other programmers, is that they understand their audience better; due to being in it. Many "Windows" programmers do not have a firm grasp on what their typical user needs or wants, so they often fall well short of delivering. This is evident when you find successful programs that appeal to users and make them want to use them.

Josh Berry on June 8, 2009 7:22 AM

Just a month-long departure of the wife would already be enough for me.

Endro Penti on June 8, 2009 7:31 AM

The most important and significant lines in the whole post for me is this: "I'm a fan of whatever the heck works". I spend a considerable amount of time trying to get this message across to any and all developers, in a generation where the "I can do it better" mentality seems to be as common as arrogance.

For every problem there is a solution. The solution may not always be using the tools you know. However the ability to be aware of these possibilities, irrelevant of your own skill set, far outweighs the value of being able to do it in the technology you are comfortable with.

I think those words should become the motto of all future developers!

Diago on June 8, 2009 7:32 AM

I think Max is probably closest to what's actually gone on. Unix is built around a few small, powerful abstractions that *allow* us to build small, efficient filters that do one thing well. It used to be far more common to see people putting together pipelines to do a job. I think one problem with the Linux-ization of Unix has been that the Linux community is driven more by an antipathy towards Microsoft than a love for Unix, and consequently they don't do things in a very Unix-idiomatic manner. They make ginormous programs, add yet more options to older programs, and basically just don't get it.

I'm not sure what it takes to really wrap your brain around the core abstractions, but I do think there's no way to become a really facile Unix program and user without having done so. I think that Kernighan and Pike's "The Unix Programming Environment" probably does the best job of showing how to use Unix well.

[I'm guessing cbp must be really, really, *really* productive]

Melinda on June 8, 2009 7:36 AM

i have always seen the distinction between the windows and *nix oses more as the one you play with (windows) and the one you work with (*nix) form my earliest days in IT i have always heard people talk of tinkering when referring to windows and development when referring to *nix.

initially i thought you did not have a server until you had some form of *nix variant and what separated the BOFHs from the LUSERs was knowledge of *nix. to this date in my country, the IT religion has *nix priests and wizards, acolytes with user accounts then the atheist unwashed heathens who use windows. not to mention the nobles and titled that use mac os.

thanks jeff, this post has challenged me and should us all. unix in a month? most of us can't roll a decent client-server app in six months!!

and yes, knowledge of eunuchs means no women or companionship of the opposite gender. that should be self explanatory!!

jake on June 8, 2009 7:46 AM

What I think makes UNIX great is that the early versions had such a strong philosophy with their construction. There was a set of principles and a mostly consistent way of implementing them. Windows, on the other hand, is essentially random. A million programmers, adding a million bits, in no particular order.

If you get the philosophy, you get UNIX and you can get around it easily and do things. Even after decades of fighting with PCs and Windows, I really doubt I get them. They're a mess. And to make it worse, I probably never will. Each time I've stepped away for awhile, coming back was harder.

Good things should be simple, but allow you to utilize them to their full potential. Why make is harder then it needs to be?

Paul W. Homer on June 8, 2009 8:05 AM

"I'm a fan of whatever the heck works."

Totally agree with you Jeff. The trick, though, is actually figuring out what exactly it is that works.

Javier on June 8, 2009 8:07 AM

Not to sound like a grumbling old fart, but the point needs to be made that once you know a few of those magic command line tools, you find that they do show patterns in 'behaviour' and usage profile.

Another very *NIX-y thing, imho, is to develop applications that from the very first moment are designed to be interfaced with in more than one way (ie the GUI). Sure, it isn't always the most efficient in terms of app performance in a GUI heavy environment, but the pay-off of this 'philosophy' is that your one app has multiple usage modes right out of the gate (GUI, headless server environments, remote access, easily interfaced slap-on web access, built-in scriptability, etc). This elegantly forces developers to get the inner workings focused, not to mix UI and core functionality, keep APIs somewhat stable, etc. These, imho, are Good Things.

Peter Smulders on June 8, 2009 8:08 AM

I agree 100% with this article. And in the end it boils down to the difference in the end users.

The Windows philosophy is to develop applications that can be used easily by people who have little understanding of computers. The whole "user friendly" paradigm, point-and-click, etc. *nix philosophy is to develop applications that can potentially be used more efficiently by people who have a great deal of understanding of computers.

Both have their uses, but this is the reason that Windows is the dominant OS; those that don't understand computers far outnumber those that do.

Gerald on June 8, 2009 8:15 AM

Yeah, so, I agree 'Windows sucks and I'd rather not program *for* it but as a Linux developer who has to use Outlook, et al, my day-to-day environment is xming running on XP with Linux-based konsole and emacs and gitk displaying in windows on my XP desktop. Go figure.

Chris on June 8, 2009 8:15 AM

Jeff, this is interesting. In my mind, the combination of linux's flexibility and window's user centricism is... Mac OS X.

Have you given it a close look? Tried it for a week or so? You might find you enjoy it, even just as a user. (I understand that as a developer you have different priorities. But at least give it a shot!)

Chris Dary on June 8, 2009 8:17 AM

"In other words windows is complicated while UNIX is complex. I hate to see complicated stuff being ported to linux." -- Pádraig Brady above

Amen, Padraig. Amen.

Anonymous on June 8, 2009 8:20 AM

If my wife left me alone for a month I don't think I could write an OS...mostly because by the second week I would have already devolved into a caveman.

Kenneth on June 8, 2009 8:23 AM

I've been using Mac OSX sporadically for a while now, but it has failed to win me over either as a developer or as a user. The one thing I do prefer is how applications are deployed as self-contained units. It often makes the deployment bulkier, but there are less opportunities for conflicts.

Gerald on June 8, 2009 8:24 AM

OpenSolaris (community-based) is indeed the next commercial Solaris as well. Sun just announced this. So, no more closed-source Solaris, except maybe in the OSX sense of having some components locked up because of existing IP agreements.

Randal L. Schwartz on June 8, 2009 8:31 AM

I am a fan of whatever works is already my motto. Hence the name I use ;)

Practicality on June 8, 2009 8:33 AM

I don't want to be a pester, but... the title "Unix is Dead, Long Live Unix" is wrong.

It's obviously paraphrased from "The King is dead, long live the king." which refers to the old one in the first part of the sentence and the new one in the second: "The (old) King is dead, long live the (new) king.".

Now, considering that "Unix" in its general sense corresponds either to an entire family of operating systems, or to a specific one (say, AIX), the phrase as it's used doesn't make any sense, unless rephrased: "Unix is dead, long live Linux." or "Xenix is dead, long live OpenServer.".


Finally, I miss some more Unix variants in that chart. Ultrix, in particular (which was the very first one I was exposed to...).

Miguel Farah on June 8, 2009 8:45 AM

The phrasing "...knocked out in one month what would become..." is extremely misleading. Thompson and Ritchie (and others) worked on UNIX for YEARS before it even started to become known outside of Bell Labs, and inside Bell Labs it still was just an interesting research project.

I would say that nearly all successful software contributions started with a prototype that was "knocked out in one month."

Thompson (especially) and Ritchie were extremely talented programmers, but the the one-month stuff doesn't even remotely describe how they worked.

--Marc Rochkind

Anonymous on June 8, 2009 8:56 AM

The real difference between Unix and Windows IMHO is:

Unix sometimes sucks, because it is too simplified. You don't understand? E.g. almost everything is a file. A device is a file. A mounted server share is a file (well, a folder, but even a folder is more or less a file in some way). Shared Memory is a file. A lock between processes is a file. Why? Because there are routines to manipulate files (these are needed anyway), so why not using them for anything else? I tell you why: Because a device is no freak'in file; period! ::rant, rant::

Windows on the other hand sucks because instead of trying to be dead simple, thy try to be extremely sophisticated - often way too much in situations where this wouldn't be necessary and only makes everything more complicated.

You should mix them together... then again, maybe net. You know, sometimes you are lucky and get the best of both worlds. However, if you unlucky, you get the worst of both worlds :-(

Mecki on June 8, 2009 9:02 AM

"You've missed Solaris. OpenSolaris != Solaris. Solaris has huge inroads in the financial markets and is the platform of choice for Oracle, as evidenced in one company buying the other."

Solaris is not always the platform of choice for Oracle, Sam. I have the dubious honor to be the sysadmin for an Agile PLM system - one of the key components for Agile PLM in their next release is Windows-only. A version for Solaris has been promised for going on two years now: it's yet to show up.

I think it is also possible that 'liking' Solaris has very little to do with why Oracle devoured Sun.

Brian Dunbar on June 8, 2009 9:09 AM

I live in Finland. Beat that!

Anyway, I have not gone back to Linux after I got my Windows XP machine. Russians are hoping that Microsoft extends the sales of XP. I guess I might go to Windows 7 when I get a new machine.

Silvercode on June 8, 2009 9:24 AM

You can win - OSX: very useful to both programmers and users. Whichever level you want to use it at, you can.

Developer Dude on June 8, 2009 9:33 AM

@Sam: "Also, don't forget UNIX services for Windows, or whatever they've rebranded it to now. IIRC it ships with 2008 server."

Originally known as OpenNT then Interix then Services for Unix (SFU) and currently Subsystem for Unix Applications (SUA [pronounced almost like "sewer"] go MSFT branding!) but it is still reported as "Interix" by uname. This is an interesting one because it leverages the microkernel-esque architecture of the NT kernel. Interix is a direct fork of OpenBSD and provides a BSD-flavor environment on top of contemporary Windows.

It's a little bit mind bending at first but, in the main, a nice environment.

It contains proprietary and open source code. The posix subsystem itself(psxss.exe and psxss.dll), terminal/application launchers (posix.exe and psxsrun.exe) are propreitary but most of the UNIX applications and libraries are open source. The whole package is "mixed/shared source" where you get infrequent binary drops of "Utilities and SDK" from Microsoft but there is also a ports tree hosted at suacommunity.com (which is at least partially funded by Microsoft).

Anyway it fits into the middle column along with OS X/Darwin and Solaris/OpenSolaris

Brian Reiter on June 8, 2009 9:36 AM

Unix UI doesn't work, that is the problem.

Hoffmann on June 8, 2009 9:36 AM

Actually, the story that Linux was written over the course of a month when his wife and chld were away are false. In fact, Ken Thompson wrote about 90% of the codebase in a little over an hour. The rest of the month was spent consuming Diet Soda and Ho-Hos while stuffing dollar bills into the G-String of a stripper at the local watering hole who was apparantly putting herself through college.

Peter on June 8, 2009 9:46 AM

Great post Jeff, I particularly like the Michael Feathers quote about simplicity, that's a thought I run into almost weekly in my 10+ years as a programmer.

I was a UNIX programmer for about 5 years early on in my career and I do find it funny how the Windows programming world was always referred to as "The Dark Side". I've since switched to the dark side and enjoy all the things MS has done for programmers (c#, Visual Studio IDE, etc), but I still have to admit that programming in UNIX is still great fun.

Mark on June 8, 2009 9:53 AM

"spending one week each on the operating system, a shell, an editor and an assembler."

When I read that I thought to myself, "but surely NOT in that order???" But perhaps I'm just showing my own limitations when it comes to design & development ...

-irrational john

zjohnr on June 8, 2009 9:54 AM

"Unix UI doesn't work, that is the problem."

That's NOT the problem. That's a symptom of the actual issue, which is that "Unix culture values code which is useful to other programmers." Most programmers are not mouse-dependent. The Unix UI is actually really good, as long as you're looking for something that's command based, rather than pointer based.

The actual *problem* is that many Unix programmers seem ludicrously incapable of realising that over 70% of the end-user base is NOT looking for that, and has no desire to be forced into using it. The few that don't are to be cherised.

Tom Clarke on June 8, 2009 9:56 AM

Last line should have been "The few that ARE CAPABLE should be cherished."

Tom Clarke on June 8, 2009 9:57 AM

I agree that Linux is Unix and people who contrast them (generally comparing commercial Unices vs. Linux) are operating from a purely commercial perspective. That said, UNIX is a trademark that somehow found its way from AT&T to the Open Group, and you need to meet a set of well-defined specifications to qualify. Of the products you listed, only Solaris (not OpenSolaris), AIX, HP-UX and OS X qualify, as per:
http://www.opengroup.org/openbrand/register/

Fazal Majid on June 8, 2009 10:11 AM

Maybe unix programmers do primarily care about usefulness to other programmers, but maybe, as a side effect, some of the most significant and profoundly useful software (web crawling+weighted indexing search, DNS, SMTP, HTTP, etc..) was invented in or adjacent to Unix. Simultaneously, Unix software became more useful and significant when Macs and Windows started to talk to it (graphical browsers). This was easy and possible because of protocols which are part of the unix culture, gave non Unix programmers few barriers, and lots of potential for the imaginative.

The popularity of the public internet did make unix programers care about being useful to non technical users, they just seem to leave the UI details to something at the other end of a socket. Isn't much of the modern infrastructure (water, electricity, highways) sort of a simple consistent interface on top of lots of geeky engineered artifacts that were built with what might appear to be indifference to its comprehension by untrained eyes?

Also I think the competition from unix has forced commercial OS vendors to face the truth, that OS's are all very similar behind the pretty pictures, so the differentiation is primarily in the UI.

Vaughn on June 8, 2009 10:13 AM

"That's a symptom of the actual issue, which is that "Unix culture values code which is useful to other programmers.""

I don't see a problem with this. Let all lusers keep their Win boxes. I could care less. With all that OSS has accomplished by now, if lusers still don't see the benefits or are willing to learn something new, then they don't deserve it.

ubersoldat on June 8, 2009 10:16 AM

"Windows culture values code which is useful to non-programmers."

This is why I think you and Spolsky are so funny. You think you're saying something insightful but in fact you're just trying hard to sound smarter than the rest of us.

The problem with this statement is that it doesn't mean what you think it means, because _code is never useful to non-programmers_. It's CODE! And we all know that there's more than one way to program a particular feature. The reason that Windows will be gone long before Unix is that to developers, it's the code that matters and its developers that decide which tools to use. So you're right, developers prefer Unix because of its philosophy but your assumption that this precludes useful use by non-technical users is false because you can build the non-technical features in either style. Again, the codes doesn't matter AT ALL to the end user.

In the end, Windows will lose and you've already agreed.

Mousie on June 8, 2009 10:22 AM

How does the "end-users are programmers vs end-users are non-programmers" dichotomy explain Mac OS X, though?

aswang on June 8, 2009 10:30 AM

Good post Jeff. I especially like the link from Joel. It really does explain a lot. I always hated the smug superiority complex attitude that I'd get from Linux devs and users but this at least sheds some light on why I've always clashed so heavily with their views. They believe that all software should be free and scriptable from the command-line; whereas, I prefer software to be paid for (so I can pay for new rims for my Benz) and to have a nice usable GUI for ease of use for non-programmers. It really all boils down to me targeting my software to non-programmers to make money and them targeting programmers with their software for communism(I'm kidding)...er I mean for free. It makes a lot more sense now really...

o.s. on June 8, 2009 10:30 AM

Good post Jeff. I especially like the link from Joel. It really does explain a lot. I always hated the smug superiority complex attitude that I'd get from Linux devs and users but this at least sheds some light on why I've always clashed so heavily with their views. They believe that all software should be free and scriptable from the command-line; whereas, I prefer software to be paid for (so I can pay for new rims for my Benz) and to have a nice usable GUI for ease of use for non-programmers. It really all boils down to me targeting my software to non-programmers to make money and them targeting programmers with their software for communism(I'm kidding)...er I mean for free. It makes a lot more sense now really...

o.s. on June 8, 2009 10:32 AM

I've always felt a little uncomfortable about Joel Spolsky's line about Unix vs. Windows culture ("Unix culture values code which is useful to other programmers, while Windows culture values code which is useful to non-programmers.")

I'm way more "user" than "programmer" but every time I use Windows I feel like it positively drips contempt for the end user.

Unix might not be "user friendly" in that it requires typing commands or whatever, but it doesn't talk down to me. I learned the hard way that rm * is VERY SHARP, but at least Unix lets me play with knives. (Yes, I know about CMD.EXE but somehow that's just not the same)

OS X really hit the balance here: I get Photoshop AND the Bash shell. If I'm too lazy to handle the knives carefully, I let the Finder do it for me. But when I really need to ginsu the crap out of something, hey, here are all my old Unix friends waiting in the Terminal.

Paul Souders on June 8, 2009 10:42 AM

@ Tom Clarke

I should apologize for my troll comment but I actually believe in that. The lack of standards for the GUI is really a big problem.

Hoffmann on June 8, 2009 10:44 AM

"How does the "end-users are programmers vs end-users are non-programmers" dichotomy explain Mac OS X, though?"

Ignoring mach, NeXT programmers were able to focus on building a beautiful and useful application framework because they could rely on a richly evolved sub-layer of programer useful code. Subsequently Mac OS users now get grep.

This worked like tight jeans in drawing eyes toward both NeXT and Be as they competed for the Apple Board's panic capital.

Vaughn on June 8, 2009 10:45 AM

the real difference is: In Unix an Linux you will find the fan-boy users ( a.k.a. whatever an other user asks,the answer is RTFM). In Windows you have developers who know incredible stupid users can be. In MacOS you have developers who can design software which even the stupiest user can use.

offler on June 8, 2009 10:53 AM

@Mousie: way to put an exclamation point on the idea Jeff's trying to get across. By breaking it down into semantics that a majority of people don't actually care about (we all understood the meaning) you've highlighted your conceit and ignorance. *nix won't "win" and neither will Windows because it's not a contest.

It's like saying that a nail wins over glue because you just happen to build houses. People who need to put a couple pieces of paper together might disagree.

I have plenty of applications that work, and that customers use to solve their day-to-day problems. *That* is the win, whether is was written for *nix, Windows, Mac, C64 or a macaroni processor.

ctacke on June 8, 2009 11:02 AM

His wife was gone for a month? No wonder he called it Eunuchs!

PRMan on June 8, 2009 11:05 AM

I didn't realize there were so many definitions of the acronym NB. Please pick the one you intended us to magically know:
Acronym Definition (from http://acronyms.thefreedictionary.com/NB)

NB Nota Bene (Latin: Note Well)
NB New Brunswick
NB Notebook
NB National Bank
NB Newborn
NB Not Bad
NB Niobium
NB New Braunfels (New Braunfels, Texas)
NB Noord Brabant (Netherlands province)
NB No Brainer
NB North Bend (Washington)
NB Notice Board
NB New Balance Athletic Shoe, Inc.
NB North Bridge
NB Mathematica Notebook (file extension)
NB Nude Beaches
NB Naval Base
NB Narrow Band
NB Newsboys (band)
NB Notified Body (European Commission)
NB Norges Bank (Norway)
NB Non-Binding (chemistry)
NB No Base
NB North Brookfield
NB Nieuw Buinen (town in The Netherlands)
NB No-Bid
NB North Bergen (New Jersey)
NB North-Bound
NB No Ball
NB Neighborhood Business
NB Newbreed (TFC Clan)
NB Nitrogen Balance
NB Nominal Bore (internal diameter of a pipe/fitting)
NB Notchback (automobile body style)
NB Nice Boys (Guns N' Roses song)
NB Neutral Buoyancy
NB Nightbreed (The Clan)
NB No Brown (fish)
NB Night Below (fantasy novel)
NB Non Billable
NB Sterling European Airlines (airline code)
NB Nordlandsbanken
NB New Bombay
NB Ninja Burger (humor website)
NB Negative Burn (Quake 3 Clan)
NB Nonabyte (1e+27 bytes)
NB National Bookstore (Philippines)
NB New Babylonian
NB Nassif Building (Falls Church, Virginia)
NB Nonbattle
NB Noisy Bus
NB Nuclear Boiler
NB Occupation Semipostal (Scott Catalogue prefix; philately)
NB Non-Bound Application (insurance)

Ed on June 8, 2009 11:24 AM

@Melinda linux actually grew out of a love for unix. Sure in modern linux development there might be a lot of people with an anti-MS sentiment but to state that the driver for it was hate of MS is I think a little belittling of all the hard work the linux (kernel) and GNU people put into the basic tools.

Hate is a bad motivator anyway, nobody wouldn't work on linux if it wasn't fun.

wds on June 8, 2009 11:43 AM

New Brunswick

CynicalTyler on June 8, 2009 12:07 PM

@Mousie: You are nearly trolling. It's the code that builds up features users will see.

>you can build the non-technical features in either style.
>Again, the codes doesn't matter AT ALL to the end user.

First, I don't even know how you are defining "technical" features but
your conclusion is just really radical. You CAN build non-technical features in either style but that doesn't mean that quality user interfaces come up from either style equally.

In the end, the only thing I see from your post is the hatred against Windows. You can't predict 5 years after in this industry.

wbk on June 8, 2009 12:12 PM

@ctacke

I have read several biographies, both of Bill Gates and in particular Steve Ballmer and I can tell you that _they see themselves in a contest_. Ballmer especially puts everything he does into a competitive context and frames debates and decisions on what will make Microsoft "win" and all others "lose". That is why I feel it's appropriate for me to discuss these issues in that context.

And, anyway, instead of attacking my point against the Spolsky quote, you chastised me for how I framed my conclusion. My position stands:

to the end user, the coding philosophy is irrelevant. Since Spolsky has already conceded that the unix philosophy is preferred by the people who are writing the software, it is tautological to say that in the long run the unix philosophy will remain as the more popular method long after the Microsoft philosophy has become a footnote of programming history.

Mousie on June 8, 2009 12:13 PM

The art of unix programming was the first real eye opening programming book for me. Eric Raymond has some sort of large hate club going on, and I don't know what that's all about, but that book rocks.

Brad on June 8, 2009 12:16 PM

@wds: You know GNU project was a seperate project from Linux, and its motivation had nothing to do with a love for UNIX. It's based on Stallman's definition of "Freedom" and the GNU manifesto.
And yes, it is the ultimate goal of Stallman to put an end to all proprietary softwares on Earth. No wonder Linux development IS driven with hatred against MS.

http://broadcast.oreilly.com/2009/04/stallman-discusses-free-softwa.html

Unfortunately, negating MS does not make Linux better.

---
And I really think Jeff needs to start distinguishing OSS and Free Software Movement. They are two seperate camps with radically different goals.

wbk on June 8, 2009 12:20 PM

@Mousie:
Given the same resource, if two developers were given different quality UI tools, the outcome WILL differ. In the real world, cost/benefit ratio matters. I know it's possible with both models.

wbk on June 8, 2009 12:22 PM

Windows (historically) assumes there will be only one user per computer - the attempt at fixing this is a bit of a hack. Unix assumes there will be multiple user accounts. Windows assumes the user will have admin privilege. Many windows apps assume this, too. The fix for this is a bit of a hack. Running as a 'limited user' breaks many apps. Unix doesn't assume you're running as root. Apps don't break if you're not root. The concept of "who can do what where" is much more clear in unix. The user access flaws in windows are responsible for the huge proliferation of computer viruses seen online. How can anyone trust such an OS to do business?
I like the way Mac OSX is derived from unix. I think linux distributions like Ubuntu prove that it's possible to have the power of unix with a "windows like" GUI. I hope to one day see a version of windows that is derived from unix. This would help merge the two camps back together. Backwards compatibility could be done via virtual machine - an idea Microsoft is already planning to use.

DMR on June 8, 2009 12:25 PM

Does this validate W.C. Field's statement that "women are a bottleneck in the progress of man?"

Steve on June 8, 2009 12:27 PM

@wbk

Interesting postulation regarding the quality of development tools. I think I agree with you, which is why my personal view is that Apple's Mac OS X will enter a period of great growth and appreciation almost entirely at the expense of Windows.

The GNU folks will remain, since they are motivated by moral concerns-- the tools themselves are secondary. Watch for growth from QT in this space, as the toolchain is very good and recent moves to GPL will gain them even more traction than they currently have.

GTK as it is today will go away and be replaced with something else.

C# will continue to rule on Windows, but that ecosystem is in danger of ending up like GM has ended up today, or IBM in the 90s. It works in cycles.

Mousie on June 8, 2009 12:45 PM

"Unix culture values code which is useful to other programmers, while Windows culture values code which is useful to non-programmers"

This was true when there wasn't web applications and coding for the "end-users" meant to write MS Windows Applicationss.

Now things are changed, and most of the coding is about web, and I'm a very happy Web Application developer that uses only Linux.

So i believe that slowly Linux will win over Windows :)

Fabio on June 8, 2009 12:55 PM

@Fabio: The thin-thick client computing trend has been swinging around for decades...

wbk on June 8, 2009 1:01 PM

MFC is no part of Windows, but a C++ library that you are not required to use. It is also only an abstraction of the Win32 C API. You are free to use something more modern like wxWidgets or Qt, which I highly recommend ;)

Axel on June 8, 2009 1:10 PM

> I didn't realize there were so many definitions of the acronym NB.
> Please pick the one you intended us to magically know:
> Acronym Definition (from http://acronyms.thefreedictionary.com/NB)

LMAO!

MrcredsAlex on June 8, 2009 1:37 PM

@Jaster:
"the GUI of Linux is not GNU"

Q: What is the most popular UNIX shell?
A: BASH. The Bourne Again Shell. By GNU.

Q: What is the most popular UNIX GUI desktop environment?
A: Gnome. The GNU Network Object Model Environment.

R. Bemrose on June 9, 2009 2:00 AM

You Missed Irix. Thwe SGI flavor of unix. Now there is one soon to be dead version. Although I spent years in front of a couple of thoses boxes.

PJX on June 9, 2009 2:10 AM

"So on one side, you have hundreds of command line applications, built in wildly different styles, with thousands of arcane command line parameters, all of which can be flexibly combined together to accomplish almost anything."

Think the next wave of the same was/is software-as-configuration (ERP-style).

"are we programming for programmers or end users? Everything else is commentary. "

In-between there are knowledge holders; which are neither of the other two.

Programmers are translators.

Alex on June 9, 2009 2:18 AM

Missing is one of the biggest differences between UNIX and Windows-how the systems have evolved over time. UNIX development has been dispersed across many groups (starting with the AT&T/BSD split and GNU), as can seen from the family tree. In a typical linux distribution, there are hundreds of different packages from multiple sources.

Windows is controlled by a single company who decides what features are implemented. This allows Microsoft to present a more easily implemented environment (see Active Directory/Exchange over the LDAP/mail mess in the UNIX world)

However, UNIX has the ability to fail more often. If a UNIX/Linux flavor like Slackware or SCO disappears due to mismanagement, there is another "species" to fill its niche. If Microsoft mismanages Windows, who will step in to save the product? If you look at the current trends (Cloud computing, netbooks, mobile), these are all areas where UNIX variants are very strong and seem to be getting stronger).

sb on June 9, 2009 2:54 AM

Let's get the lingo right.

This has nothing to do with trademarks, but with the origins of the code. Wine is not Windows. And if I take Match 3.0 and write from scratch something that looks like Mac OS X, that is not Mac OS X.

So:

1. Linux is not UNIX.
"Linux is a free Unix-type operating system"
(http://www.linux.org/)
"Linux ... is a generic term referring to Unix-like computer operating systems based on the Linux kernel."
(http://en.wikipedia.org/wiki/Linux)

2. MINIX is not UNIX.
"MINIX is a Unix-like computer operating system based on a microkernel architecture."
(http://en.wikipedia.org/wiki/Minix)

3. "GNU is Not UNIX"
(that's the definition, really)

Mihai on June 9, 2009 3:30 AM

"@Ed

I think it's safe to assume that he meant http://en.wikipedia.org/wiki/Nota_bene, which is a fairly common notation in technical writing."

I learned that stuff in primary school. In a non english one as well.
No excuses for that one 'Ed'

TrXtR on June 9, 2009 3:40 AM

Ed, no.
Big lists are for the LISP hackers, not for kids like us.
http://starwars.wikia.com/wiki/Palleus_Chuff

Ned on June 9, 2009 4:41 AM

For us is the time to demonstrate power of our forearms. When things don't work well, we use our forearms for communication. Subject of course, to agreement of the LISP clan ;-)

Ned on June 9, 2009 4:42 AM

What is with all the Windows hate?

I really don't understand all this ranting about things in windows, where you see that the person doesn't have a clue.

User-Accounts
=> The security system in windows is thought out and (for domains) leaps and bounds 'better' then the old Unix way of user/group/world. (Yes I know, many variants have caught up with ACLs, and maybe there were better implementations before the NT-Kernel-Security-Architecture)

Why is the Unix way believed to be better?

Because it is better supported, but it really is the same concept as the much hated UAC from Vista.


"Those who don't get Unix are doomed to re implement it poorly"
=> Sorry to that the windows kernel is really well thought out. Very flexible and portable.

Why doesn't NT work on any hardware?

Because Microsoft has to make money, so they don't provide a port for every Architecture out there.


"As a programmer, the biggest difference I see between UNIX and Windows culture is error-checking."
=> This argument is extremely flawed, especially when pointing to samples which want to show, how to use something and do not how to get error-checking right.


What is the great thing about windows?

Nothing, it sucks. Like every other OS (even your flavor of the month/decade OS).

FrankGrimes on June 9, 2009 4:51 AM

Some of UNIX problems as desktop system comes from gross simplifications. Yes, everything should be as simple as possible but *no simpler*. Some things are just better off not being a file.

wbk on June 9, 2009 5:14 AM

Some of UNIX problems as desktop system comes from gross simplifications. Yes, everything should be as simple as possible but *no simpler*. Some things are just better off not being a file.

wbk on June 9, 2009 5:15 AM

Everyone has valid points for "either side". Some of us do not look at this in terms of "either side". It is all just hardware and software. And making it all work together, is what it is all about.

hyperspace on June 9, 2009 6:02 AM

People often like to say that OSX is some sort of haven for windows and unix programmers; I'd say it's got the worst of both the worlds too. Windows has the mechanics of "it breaks a lot but you can fix and tweak it". UNIX has the principle "if it breaks you need to call a mechanic". Mac, mine atleast, works on the principle "If it breaks you should throw it out". Different people different views..

Leafy on June 9, 2009 6:06 AM

"...spending one week each on the operating system, a shell, an editor and an assembler."

That's an impressive demonstration of timeboxing!

scafativ on June 9, 2009 8:00 AM

Unix-land is definitely the power of simplicity.

To use a metaphor, if you have to build a house, Unix will give you a really nice hammer. Windows will give you a fancy electric nailgun. The hammer is simple, robust, and known to do the job nicely. The nailgun is easier in some ways, but also has this annoying habit of not working correctly in environments with a lot of sawdust flying around. Both will get the job done, but both will be irritating for different reasons.

ThatGuy on June 9, 2009 8:16 AM

The Windows NT kernel was written by a team bought in from DEC, who knew how to write a proper kernel (and very nice it is too, I just don't like the stuff on top of it [My Opinion])

Linux is not GNU and the GUI of Linux is not GNU either
The FSF have a philosophy, The kernel team have a philosophy, GNU have a philosophy, X.Org have a philosophy, Gnome have a philosophy, KDE have a philosophy, Debian have a philosophy, RedHat have a philosophy, etc ... they do not all agree

I like some of some Linux Distros..... just like I like some of Windows (although I think the interface is worse not better in Vista)

Linux is a kernel (GNU has Hurd - when it is ready)
The GNU system is a set of tools that make up an operating system a Linux distro uses these and others, the largest being..
X + GTK Or Qt (or other) a Windowing system

Linux systems should not copy Windows since Windows appears to be copying Linux and OSX - When Vista came out I saw a talk by Microsoft explaining the new interface, and also version with the same commentary but where the graphics were OSX or KDE ... they all did the same thing in very similar ways ....

Jaster on June 9, 2009 8:35 AM

to be safe you have to use windows and unix variants... but still you can't serve two masters at the same time... if you're a programmer you know that unix variants are one of the safest os and windows is the opposite. if only unix variants are properly marketed...

JD Salinger on June 9, 2009 10:15 AM

I think Windows PowerShell is a grand step in the right direction.

Bill Sorensen on June 9, 2009 11:18 AM

10 years ago I did hobbyist Windows development. I used Windows for everything else too. I didn't know alternatives.

I discovered Linux, I found that it solved a lot of the things I thought sucked about Windows. I started getting into the Open Source community. I developed some applications myself. I joined the Amarok project and gave 3 solid years to it, this was before it was popular (I like to think I made it popular ;)

I joined Last.fm (for professional work duh), I developed their cross-platform radio player (Windows, Mac and Linux). I developed with all three operating systems. I began to realise where the strengths in each system lie.

So what are my current conclusions?

Linux isn't practical. At least, the GUI layer isn't. It is 90% unfinished or continually changing (for dubious rationale).

Windows is a mess. It was "designed" in a hurry, and is now painful to develop on, and they can't fix it.

OS X is the good bits of Linux (although I miss the kernel, the Linux kernel is great), but with the most polished software in the world, and the most powerful UI toolkit (cocoa is amazing, dev with it before you say otherwise).

I'll continue trying out everything viable, but I can't see myself switching away from OS X anytime soon.

ps it took me FOUR tries to get the captcha!

Max Howell on June 9, 2009 12:13 PM

As an entry level Software Developer/Software Engineer,it is good to dream big.UNIX lives on...

Victor Bidokwu on June 9, 2009 1:54 PM

Minix is actually not a real *nix derivate. It's a bare microkernel and just provides a POSIX-compliant interface (as does Windows NT) so you can recompile and run your standard *nix tools on it.

BjoernD on June 9, 2009 1:55 PM

More comments»

The comments to this entry are closed.

Content (c) 2012 . Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved.