Unix is Dead, Long Live Unix

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.

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

Just kidding! Just kidding!

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

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.

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

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!

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]

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!!

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?

“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.

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.

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.

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.

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!)

“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.

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.

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.

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.

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

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…).