The ongoing debate continues!
The term UNIX is a registered trademark by The Open Group, and is used within this document
for the purpose of generically describing all BSD and System V derived operating systems.
After looking back over the last 8 years of security craters, serious virus infections, instability
problems, and a general lack of REAL innovation, I can ONLY conclude that Windows NT-based technologies
for SERVER platforms have not kept up with the improvements seen in both Linux and BSD-based operating
systems, INCLUDING Apple's OS/X. Suffice it to say that Microsoft's NT technology, in my view, has
effectively LOST the competition, or at least allowed their competition to TIE with them. With the
exception of some of the enterprise management features in the Windows Server platforms, pretty much
everything ELSE falls short to their equivalents in the open source or commercial 'UNIX-like OS' world.
As such, I am updating this somewhat out of date commentary, which held that Microsoft's platforms were about the same by comparison, with significant advantage to Microsoft's support of their technology. I'm also GREATLY revising my commentary regarding X Windows and FreeBSD which has ALSO undergone a great deal of improvement, including support from NVidia and ATI for their hardware (thereby fixing a lot of the performance-related issues). Include that with the prevalence of UNIX-like operating systems on embedded devices (including television sets and 'droid phones) over Microsoft Windows solutions and you can see which model is clearly winning.
UNIX® is an operating system that was originally designed on a PDP-11 computer,
a 16-bit mini-computer that was designed in the late 1960's by
Digital Equipment Corporation (DEC).
The mini-computer was designed to meet the need by small businesses and educational
institutions for a medium-sized computer capable of timesharing and handling basic
accounting and other needs for which an expensive mainframe computer was impractical,
but a relatively inexpensive minicomputer was ideal. As such it became an ideal development
platform for UNIX, ported from a system called 'UNICS' that was written in a languaged
called 'B' in 1969. The additional requirement for UNIX was that it be PORTABLE, and
its development coincided with that of the 'C' programming language in which nearly all
of the operating system was written, an important feature for Operating System
These were the days before the microprocessor, when the Intel 8080 was still being developed, as well as the Motorola 6800 and Zilog Z80. Mini-computers were the size of filing cabinets, and 500Mb disk drives had 12 platters and were housed in cabinets the size of a washing machine (and they bore an interesting resemblance...).
At that time, the PDP-11 (and other machines) had all been using proprietary operating systems, requiring that programmers (and software) specialize for a particular piece of hardware. Obviously this caused an increase in operating cost, plus higher prices for the complete system, and the obvious compatibility problems for a single software application to run on multiple operating systems, which plagued the software industry, making it hard to sell large numbers of copies of any piece of software, making the software more expensive to the consumer. And for independent developers, it was impractical to produce programs that could run on multiple platforms. Within a few years, most PDP-11's were running 3 basic operating systems: RT-11 (a simple single-user system with rudimentary foreground/background task capability), RSX-11 (an advanced multi-user system), and RSTS/E (a compiled-BASIC (PCode) system that allowed RT-11 and RSX-11 to run as "subsystems" within it). Also during that time, particularly in the latter half of the 1970's, the PDP-VAX was being developed, with its new VMS operating system. In parallel, Bell Labaratories was inventing the 'C' programming language (Kernighan and Richie, et. al) beginning in 1970, and along with it, the UNIX operating system. As a direct result of this, ANSI 'C' and UNIX have always been closely related.
The intent was to invent an operating system for which a common high-level language could perform most of the tasks, but it had to be a language that was close to the assembly level. Therefore, 'C' contains a few "PDP"-isms, such as pre-increment/decrement and post-increment/decrement, a feature that is inherent within the PDP-11's CPU instruction set. However, 'C' was close enough to the operating system (especially with its pointers and pointer operators), and offered sufficient high level language capability, re-casting of types, and so forth to be very flexible, enough to write most of the operating system code. Any remaining assembly code had to be tailored to a specific machine, as well as the 'C' compiler and libraries, but this became a small fraction of the total code base. The result: a truly portable operating system. In addition, improvements such as tree-structured directories, and "piping" of commands through "filter" applications, were significant advantages over many other existing operating systems at that time.
However, since UNIX was originally designed in the 1970's (some have erroneously stated 1960's,but they're wrong), it was character based, with cryptic (but powerful) command line arguments, JCL's, and features. UNIX traditionally requires a full-time staff 'C' programmer to maintain, as with other mini-computer operating systems of that time period. As such, it has traditionally been reserved for file servers and database servers (but not desktop workstations), where it has done very well, competing against proprietary OS's like MPE/XL (HP), VMS (DEC), and OS/1 (IBM). Eventually UNIX was installed on workstations as well, but long after MS-DOS, MAC-OS, and Windows had dominated the OS market for desktop machines. These UNIX workstations were typically the kind of "high-end" workstations that needed complex graphics software, such as CAD/CAM (which often ran an X-Windows client to take advantage of a client/server environment with a UNIX-based mainframe server doing most of the work), and the high-end workstation's CPU horsepower was necessary to run the software. At least two GUI systems were developed, Motif and X-Windows, which added some complexity and non-portability to an otherwise portable operating system. As well, the various "*nix ports" added their own shares of compatibility problems. Fortunately, with the advent of LINUX (a free *nix port) and GNU (an organization for the free distribution of software), as well as 'OpenBSD' and 'FreeBSD' (my personal favorite), a reliable and stable UNIX port for 80x86 CPU's has been maintained by allowing the source and binaries to be freely distributed by anyone, and though "code forking" (multiple parallel revisions of the same software) has occured, GNU has attempted to standardize the LINUX port by releasing their own version, the "GNU Hurd". Of more worthy note is the FreeBSD release, which I have installed on MANY different machines, starting with an 'old klunker' (read this as "substitute for an anchor") 486 DX2 66Mhz ISA-only box (with VLB I/O card but that's its only saving grace) and a used PII workstation, followed by 2 laptops, several workstations (including a quad core box with 8G RAM), and my main server box (which uses a 1.7Gb ZFS partition for ultra-reliable storage). The initial results of my performance and operability tests were only 'so-so' (more later), but after 8 more years of OS and hardware development, I now use FreeBSD as my primary work environment, because it works BETTER than windows, at least for me, specifically for software development.
In 1992, Windows NT 3.1 was released by Microsoft following the release of Windows 3.1, a significant upgrade to their highly successful Windows 3.0 product released in 1990. Microsoft dared to oppose IBM's will by releasing Windows 3.0 as a "general use" operating system, compatible with a wide variety of CPU's and peripherals, instead of taking the IBM route of OS/2 and targeting PS/2 machines (and a small number of others). During this time, Microsoft gained the lions' share of the desktop computing market for GUI, previously held by Apple, and was subsequently sued (unsuccessfully) as a result of their success. Windows 3.1, followed by Windows NT 3.1, was an attempt to separate the "standard" from the "high end" operating systems. However, Windows NT 3.1 was kludgy (running poorly on an 80386 CPU), required 16Mb of memory (which was a substantial expense at that time), required 100Mb of disk space (not a small investment at that time either), and wouldn't run a large number of existing 16-bit applicaitons. In short, it was a fun toy for developers and for high-end users, but impractical for everyone else.
In late 1993 Microsoft held a conference in Anaheim California (where Bill Gates rented Disneyland for an evening for the 6000+ developers and their guests, and the Penn and Teller show was awesome!) where Microsoft announced their plans to continue 2 lines of operating systems for a few years, after which they would eventually merge into one, an NT-like operating system. Windows '95 was announced (code-named 'Chicago') and fully supported the same 'Win32' programming interface found in NT, with some minor features removed (such as high security and certain server functions, among others) to reduce the memory footprint. Windows NT 3.5 was released in 1995, a few months before Windows '95. Windows NT 3.5 still kept the old 'Windows 3.x' Program Manager, whereas Windows '95 provided an improved desktop and program launcher. Windows NT and '95 both had the ability to run a 'DOS Box' where batch files and MS-DOS commands could be typed in, and Windows '95 now allowed 32-bit "console applications" to run from the command line, even using MS-DOS appliations as 'filters', as well as Win32 console applications, just as NT had always done - thus allowing many UNIX 'character mode' applications to be compiled for 32-bit windows with few modifications, to run on either Windows 'NT or Windows '95. Windows NT took the command interpreter one step further, offering an improved command shell 'CMD.EXE' that extended the MS-DOS commands. And, both Windows '95 and Windows 'NT supported file names larger than "8x3". However, Windows NT still lacked some of the features (such as multi-user timesharing) for which high-end mini-computers were still being used.
The primary design of Windows NT was a departure from MS-DOS, using the NT Kernel written mostly in 'C' (like UNIX) and with a "Hardware Abstraction Layer" (known as HAL - 2001 joke obvious), that allowed 'C' language programs to be used for the majority of device driver functionality (like UNIX), something impossible on earlier releases of Windows. Windows NT also initially supported the OS/2 file system "HPFS", and added their new system, "NTFS", that greatly improved upon it, since NTFS was designed primarily by former engineers from Digital Equipment Corporation, who helped to design the VAX VMS operating system. And, Microsoft did one of its first non-Intel ports of Windows NT for the DEC Alpha RISC system, and continues to support the DEC Alpha CPU with current releases of Windows NT and NT development tools.
In 1997, Microsoft released Windows NT 4.0, then the most stable version of Windows NT. With it's "Windows '95" interface, and Microsoft's push to developers to use it for writing 32-bit applications (primarily for Windows '95, but also to run on Windows NT) Windows NT became more common on user desktops. Its use with file servers was also replacing UNIX and Novell operating systems in many corporations, often by being bundled with file servers as a result of an aggressive marketing campaign by Microsoft to get computer manufacturers to pre-install Windows on their computers, which has ALSO caused a lot of controversy (and legal troubles for Microsoft). Since then Microsoft has pushed their NT operating system to dominate all areas of the market, from RISC machines to desktops to palmtops to device controllers running a scaled-down version of NT called "Windows CE". Not a surprise for a company that won the IBM contract for PC-DOS by purchasing and adapting an 8086 operating system used by a device controller.
Microsoft later released a multi-user version of Windows NT, called "Windows NT Terminal Server", that finally enabled Windows NT to compete head to head against UNIX systems that provide timesharing capability, something still needed by bank tellers, cash registers, and even those "hamburger order" machines at fast food restaurants. A world dominated by Microsoft software seemed to be their goal - and why not, isn't that what business is all about?
And, of course, subsequent releases included Windows 2000 (1999) and XP (2001), both based upon the Windows NT kernel. Windowx XP could be considered the final stake in the heart for MS-DOS, as even the 'home' version uses the same Kernel as it's 'big brother' (the 'PRO' version). As earlier versions of windows, even Windows '95, '98, and ME, were all plagued with the "windows on top of DOS" paradigm that began with Windows 1.0, and was later popularized by Windows 3.0 and 3.1, XP has finally crossed the gap and produced it's 'home' version with a nearly identical kernel and identical device driver model. It was looking pretty good for Microsoft.
Still, as a result of its popularity, as well as some bad experiences from the past, the 'NT vs UNIX' controversy continued on, and Microsoft continued to dominate the marketplace for operating systems in spite of it all. Let's face it, large companies that gobble up the market scare people, and though competition exists from *NIX systems (especially FreeBSD and LINUX, which are essentially free, if you can support the OS yourself, or cheaper than a Microsoft OS if you buy LINUX from companies that package it for you and support what they sell), Microsoft still dominates the market. Already the majority of developers, like myself, are targeting Win32 systems (like NT/2k/XP and Windows '9x/ME) and it's no surprise, as THAT is the largest chunk of customers in the marketplace. If you wanted to make money, you would have to cater to the market - and that became Win32. But all good things must someday come to an end, or evolve to survive.
Unfortunately, Microsoft did not evolve. They tried to, but ran in the WRONG direction. They started with their '.Net' initiative, re-invented a few programming languages to suit their own needs. Java became J++, then J#, then F#, and Microsoft created C# to be a 'catch all' for Java-like languages, NONE of which have gained even a FRACTION of the popularity of Java. And THEN, Microsoft release Windows Vista, which re-defined the term FLOP on a massive scale. And they quickly released Windows 7, which backed off most of the irritations of Vista, but wasn't quite the XP that people had grown used to. Still, it better supported 64-bit and didn't 'suck'. On the server side, they focused on enterprise administration and won some converts in the "large installation" admin market. But the STORM of security vulnerabilities and virus outbreaks have KILLED THEM in the server market, giving Microsoft server OS's a reputation of having serious security problems.
Additionally, in 1994, Berkely Systems Division (aka 'BSD') released their source code for BSD 4.4 to the public domain, free of AT&T encumberances, as 'BSD Lite'. Several operating systems 'forked' from this, including FreeBSD, OpenBSD, NetBSD, and so on. Initial releases were a bit klunky, but efforts by developers brought them into the 21st century to provide advanced multi-task and multi-thread scheduling, multi-CPU support, advanced disk storage systems (both journaling and non-journaling) and RAID support.
And so a large number of developers began creating (or porting) software packages to this new UNIX-like operating system, primarily for server applications. Over time, X Windows became available (as XFree86, then Xorg), and a large number of X11 toolkits (some commercial, some free) made X11 development practical. Many NEW applications were being developed using Linux or BSD, and then ported to windows using Cygwin or other 'compatibility' libraries. The 'MinGW' system was developed so that anyone could create windows applications, even on non-Windows operating systems, with tools NOT controlled by Microsoft, and thereby making it possible to write CROSS-PLATFORM applications that could be cross-compiled for multiple targets on just about any system.
And along came Java, which made cross-platform its primary benefit. All you would need is a functional 'JVM' on your operating system in order to run Java. And major corporations like Oracle used Java for their applications, helping to make it THE most popular computer language at this time. With Java, you are NOT tied into a specific operating system, making real choice practical.
So, in summary, here are some really good reasons against using Windows NT-based Operating Systems.
To be fair, I should list some of the arguments AGAINST UNIX-like operating systems:
In the past, I often heard people argue in favor of UNIX, saying how much better it is than NT (when it was not), how much that NT-derived OS would crash, and so forth. I had yet (at that time) to see anything that would strongly support UNIX that I would change operating systems. Since then, I have.
That is exactly how others must see it too if UNIX-like operating systems are to be a viable competition for Microsoft operating systems. And, apparently UNIX-based operating systems ARE "all that better" than Microsoft's NT-based operating systems, for people ARE switching over, whether they realize it or not. But rather than upgrading their Windows systems, they are purchasing NEW devices that run an operating system that may very well be UNIX-like (such as Android OS, or a Linux-based notebook computer). With Apple's OS/X being UNIX-like, you can also include those who switch from Windows to a Mac.
Still, I shall state some of the ORIGINAL reasons I had seen or heard that favored UNIX-like operating systems over Windows NT/2k/XP (and later), with my comments added, and more recent comments that may refute the original(s). Keep in mind, these were OLD reasons and comments. Some of these arguments no longer apply.
Now it's time to give you all my reasons as to why an existing UNIX system should be ported over to a Windows NT/2k/XP system, and why Windows-based operating systems are a better choice than UNIX OS's, for most applications. This doesn't mean I advocate doing that. I'm simply arguing both sides of the issue.
So, it seems to me that UNIX-like operating systems aren't necessarily "better" than Windows but are DEFINITELY a competitive alternative. Additionally, Microsoft's corporate policies are shooting themselves in the foot as the world of hardware and software continues to innovate WITHOUT them. In the past, all of the arguments used by '*nix' advocates fell flat on their face in the bright light of reality. More recently, NEW arguments that show the deficiencies of Microsoft's business strategy, and their lack of innovation, while everyone ELSE has chosen a UNIX-like model, indicate that UNIX-like operating systems may soon be BETTER than those based on Windows NT. Sure, Windows platforms have significant advantages to them that UNIX-like systems do not. And most developers were targeting Windows platforms in the past. At this point it is worth saying that there IS a choice, and open source has its advantages as well as commercial UNIX-like operating systems.
That does NOT mean that this could NOT change at any time in the future. In fact, it already HAS changed since the original version of this web page. It can also change again. Trends as I read them STILL point to stagnation in technological breakthroughs by Microsoft, and a vacuum of competing OS's has caused UNIX-like operating systems to fill that gap. We can see a predominance of one model over another, perhaps changing positions at various times, but I think this 'controversy' will continue for a very long time.
This was entirely MY experience with FreeBSD. Many of you will have different results, as Your Mileage May Vary.
That being said, I'd like to point out that I have loaded both FreeBSD and Linux on MANY different platforms, from desktops to laptops to servers and 'virtual machines'. My experience with FreeBSD was initially SOMEWHAT NEGATIVE (mostly due to the hardware it was running on) and my comparison to an equivalent version of Windows on that platform was kinda, bad. Since then I have seen GREAT INNOVATION on the Linux/BSD side and NOT SO GREAT (lack of) INNOVATION on the Microsoft Windows end.
When I FIRST loaded FreeBSD on an old 486 computer, I ran out of disk space. This was due to a lack of understanding of the nuances of disk drive partitioning and how to set it up so that it actually works. As it was somewhat confusing, I went through the 'F1' help during SETUP, and it informed me that I needed at least 3 'sections', one for '/', one for swap space, and one for '/usr', and recommended a 4th section for '/var'. Guessing the size requirements required SEVERAL retries of SETUP, each of which took hours before blowing up. I had copied the 1st CD ROM into an 'image' on my local FTP server, so I did the freebsd.org guys a favor by NOT transferring all of this stuff from them multiple times. I recommend THIS also...
Ultimately I ended up making an entire 3Gb hard drive into a BSD partition, because the partition manager couldn't handle having a 1Gb FAT partition on the same drive without causing a lot of WEIRD stuff to happen (namely I couldn't make a section for 'root' with the 'label' utility unless the partition was < 512Mb or the entire disk had been 'partitioned'). But this worked ok, with a config kinda like this: 512Mb for '/', 96Mb for swap, 512Mb for '/var', and the remainder of the drive (about 1.4 Gb) as '/usr'. Since SETUP puts nearly everything into the '/usr' partition that isn't "just the operating system", and temp files end up in '/var', this is probably a good configuration to use. But finding this - well, that was a bit tough, and required "all too much experimentation" to figure out.
I had additional performance issues with X11. Granted, Windows NT and 2000 ran much better on this platform, primarily with X11 loaded. In many ways I can blame the gnome desktop, for at that time they were JUST migrating to gnome 2 and there were SERIOUS performance issues, in many ways rivaling Microsoft's '.Net'.
SINCE then, however, I have gotten used to the 'quirks' in the SETUP for FreeBSD. As it was in the early days of Windows, you have to know what you're doing. With Linux, however, the setup process has become relatively EASY, especially with releases like Ubuntu, which were specifically DESIGNED to be used by 'average people'.
Also since 2004 (the last update to this page), Apple has contributed SIGNIFICANTLY to the CUPS print system, which has turned around the majority of the compatibility issues. Not only has Apple's OS/X benefitted, but so has the open source community at large. Further, both ATI and NVidia have provided driver code for X11 that SIGNIFICANTLY improves video performance, as well as taking advantage of specific hardware features, and eliminating the vast majority of the performance issues that I noted with earlier releases of FreeBSD and Linux and X11.
So, for MODERN releases of UNIX-like operating systems, there have been GREAT advances in compatibility, so great that notebook computers often ship with Linux pre-loaded on them, as well as hand-held devices that run the Android OS (which, as I understand, is based on Linux). So now we have REAL CHOICE, and that's a GOOD thing.
FreeBSD web site (get it if you want a good UNIX-like OS)
Debian Linux web site (my favorite Linux distribution)
SAMBA web site (for Windows networking)
MySQL Database web site - one of the more popular open source SQL engines
Origin of the word 'daemon' as applied to computing
History of UNIX over at 'unix.org' Using Interix - helpful tricks and hints for the Interix subsystem under Windows 2k/XP
UNIX Migration Guides - MSDN web pages that document a 'how to' for migrating from UNIX to Win32 - also a good reference migrating FROM Win32 to UNIX