What is Mac OS X?© Amit Singh. All Rights Reserved.Written in December 2003
Conclusion: Why Mac OS X?
I have positive feelings about Mac OS X. If I were to choose a computing platform today to run my "digital life", it would be Mac OS X, unless my line of work or specific needs require/dictate otherwise.
This doesn't mean what works for me would work for others. This also doesn't mean Mac OS X has no "issues". It has many: it carries a lot of "old" technology and baggage, it is not bleeding edge in many respects, several things are ugly below Apple's pretty interface, it costs money, it needs Apple hardware (although I personally like Apple's machines very much), and it even has kernel panics on its own once in a while. Still, Mac is currently the most worthy client platform in my opinion: the only operating system currently in production that, within reason, lets you have your cake and eat it too.
In Search of an Ideal Client Computer
Of the operating systems I have used on my primary workstations (for extended periods of time), I believe currently three are "in the running" for client computing: the Linux family, Mac OS X, and the Windows family (in alphabetical order).
*BSD and Solaris
The various BSDs are well suited for servers and embedded applications. They are great if you want to follow a pedantic approach to learning about operating systems, and might even be ideal primary machines for people with either specific or limited needs, but I don't think any of the BSDs are going to be the client computers of tomorrow by themselves (of course, they might very well be the critical underlying technology of tomorrow's clients, as evidenced by the presence of FreeBSD in Mac OS X). I have great affinity for Solaris, and I think it still looks very promising (as a server) despite Sun's recent fortunes.
Let us reflect on the three client computing "candidates" briefly.
The existing "numbers" are ridiculously lopsided in favor of Windows. I have had a more or less neutral attitude towards Windows: I sometimes feel claustrophobic while using Windows, but I do not despise the platform (I think some people do have rather strong emotions against Windows). I have usually ascribed my "discomfort" with Windows to my background: my first operating system was SVR4, followed by Linux and *BSD. Windows alienates me from my familiar environments, and has several nuances of its own. I have tried various *nix-like environments for Windows over the years: the MKS toolkit for DOS, Cygwin, MKS for Win32, Microsoft Services for Unix, etc. They all try, admirably, but it's not the same. I admit that the lack of a "true Unix environment" isn't much justification against Windows. In fact, it's a fine platform in many respects - if you have seriously developed on multiple platforms, including Windows, you might agree with this.
I think there is too much entropy on Windows. The operating system is too "busy" (in the colloquial sense). Legacy baggage and backward-compatibility contribute to software malice and malfunction, whether it be doctored or accidental. Gigantic user base amplifies flaws (particularly security related) to epidemic proportions. Many experts disagree with numerous aspects of the Windows UI. A number of small "everyday" annoyances cumulatively make life difficult. Consider some examples: the entire system gets unresponsive when you empty a very full recycle bin, or copy large files, IE gets unresponsive when you empty its cache, even though XP boots very quickly to the point of showing the desktop, it takes a long while before the system is usable - and this is without having anything in "Startup". Do you know how many keys there typically are in the Registry - do you know how many Office alone has, and what this does to maintainability? Have you ever installed Windows and spent hours, if not days, downloading and installing drivers specific to your machine (such as for Sony VAIOs, IBM ThinkPads, ...)? Have you ever had stability issues with Windows?
There are even books dedicated to Windows annoyances.
That said, Windows can be a fun platform, even if you are a hacker (in the good connotation of the word). Consider: you can get all the nice developer tools, debuggers like SoftICE, figure out lots of undocumented APIs, overtake some system calls, extend the system, find and fix security flaws, and so on. The fact that it has a huge market share might just make your efforts worthwhile. However, since Windows is largely disjoint with the *nix Universe, many (traditional) hackers steer clear of it for the fear of being "left out". Source code unavailability doesn't help either.
Nevertheless, an overwhelmingly large majority of computer users are on Windows. A lot of software is available for Windows as a result - it's a feedback loop perhaps, although for the typical end-user, the amount of important Windows-only software is probably decreasing. Still, many people don't have a choice, often because they don't know that they have a choice. There is a lot of inertia in moving away from Windows, both real (and justifiable) and imaginary. Often, there are existing investments in Windows: monetary, intellectual, legal, political, etc. Most importantly, a lot many people simply don't care - they have no motivation, or interest, in "experimentation". They have better things to do in life than evaluate computing platforms and switch. Many people don't even like computers - they just have to use them.
Microsoft could address some or most of the existing problems with Windows in future versions. They do seem to have the opportunity and the resources. I opine that they did several nice things with Windows 2000. Windows has a lot of things in place (including the user base). Microsoft has a lot of technology (theirs, licensed from 3rd parties, and even open source) to draw from. Thus, even though they probably will be the de facto client platform of the future, they might actually make Windows worthy of being so.
Currently Mac OS X is, for lack of a more appropriate word, better in my opinion: for those who have a choice, and can make it.
I have great fondness for Linux. In fact, I feel much indebted to the GNU, Linux, and BSD communities for providing me (and others) with excellent sources of usable, no strings attached knowledge all these years. I have made heavy use (sometimes exclusive use) of Linux in academics and my jobs, including my current job. My extreme interest in Linux is one reason why I am somewhat disappointed in the way Linux as a client platform has evolved.
I think Linux is an excellent, if not the best, operating system for a variety of uses: in server applications, all kinds of embedded applications, in research and academia, for technology companies looking for an operating system as a base to develop their offerings; almost every domain except mainstream client computing.
Linux (as a client operating system), like Windows, has a lot of entropy, although of a different kind.
Choice, Choice Everywhere
Linux provides an incredible amount of choices - for everything. You can choose your distribution (and/or flavor) from an insane number of them, although the mainstream ones are not that many (I'm lying: even they are too many, and they all differ, sometimes subtly, sometimes vastly). You can run Linux on an even more incredible array of platforms - some of which one would never imagine could run anything, let alone an operating system. You can put Linux on watches and PDAs, or make clusters using it cheaply and efficiently. There are all kinds of devices that run Linux. You can install Linux in seemingly infinite number of ways. You can even compile the entire system from source (Gentoo Linux) - optimized for your particular machine to extract the last ounce of speed. You can have more number of different filesystems on Linux than you had total files on some older operating systems. You can have a similar number of packet classifiers in the kernel, and far too many other entities to be mentioned here. You can have support for devices you never knew existed, for protocols nobody even uses, and of course, for those that everybody uses. You can have almost all the window managers ever invented for X11. You can program in a zillion programming languages on Linux. You can choose from among more than one desktop environments, based on your personal preferences, taste, working style, religion, or whatever else. You can have APIs from myriad systems and environments on Linux, either natively, or retrofitted/emulated. There's even STREAMS for Linux. Countless organizations, people, software, ... have benefited from Linux (including Mac OS X).
None of the above is exaggeration - I only used some minor figures of speech. Rather than go on and on haphazardly with this, I think that Linux essentially represents the union of a lot of, if not most, operating system (and related) technology ever created. I think it's a marvel that such a thing could be created, has been created, and is available for free!
Even with all these great things, Linux is lacking, perhaps seriously so, when it comes to the specific case of a client platform. It is not so much because of technology deficiencies as it is because of the fact that despite many (some of them very well-meaning and noble) attempts by several entities (people, organizations, businesses, ...) to create operating systems around Linux, a cohesive enough system hasn't resulted.
If you intend to develop a client computing application for Linux, life is not easy for you. This sounds counter-intuitive to some. Life is supposed to be great if you are a developer on Linux. You have the source code for everything. You have countless eyes looking at all this source, finding problems, improving performance, and so on. There are libraries to do everything: the most glorious "parts-bin" that there can be. You can choose from numerous toolkits and even multiple desktop environments, each of which provides good, sometimes excellent, APIs.
Do you see a problem?
All this is great if you are a student, a researcher, a hobbyist, a company trying to use Linux to come up with something they can sell, or anybody trying to morph Linux into a very custom operating system for arbitrary use, etc.
It is not great if your domain of development is client computing. Say, you are a developer (individual, or part of a team, etc.) working on, for example, a professional quality movie editing software for Linux (yes, I have looked at Kino - it's a great effort). How long do you think it would take (compared to other platforms)? Which toolkit(s) would you use? Which desktop environment would you integrate it with? Which distribution would you target it for? How do you know what you "like" is "right"? Which all libraries would you leverage so that you don't reinvent the wheel? How would you ensure it works seamlessly on a random installation? Do you think there are system wide, distribution agnostic, desktop environment independent "frameworks" that expose various components of the system's functionality? Is it even clear what "the OS" is? Surely, there are numerous ways to do most things, so which would you choose? In this situation, too much choice isn't such a wonderful thing after all. Think about the feasibility and effort requirements of creating something professional level, or even something non-trivial consumer level.
In the context of client computing, Linux's greatest strengths are somewhat offset by this fragmentation and lack of consistent, overall architecture. There is no common "glue" tying the system together. Having a bleeding edge kernel with large number of pieces of wide-ranging technology clubbed together, even decently, in an operating system might make a hacker's dream come true, but you need a stronger fabric that runs through the system if you want to contend with Windows and Mac OS X.
Linux indeed gives you an incredible number of choices, except the most important choice: suppose I do not want to think of, worry about, or handle any of this. Suppose I want everything that I need to be there, and to "just work". Suppose I wish to be oblivious of everything that's "under the hood" (maybe I am technically ill-equipped, maybe I do not have the time or inclination, maybe I want to use the computer as a tool so I can create other things, rather than be my own system administrator or software harvester, ...) - would Linux as a client platform "handle it" for me? No. Not today. Not yet.
I think sometimes the "choice" argument is misused. Consider this: how many people write their own disk drivers on Linux because they have the choice to do so? Very few, if any, because it needs uncommon expertise, it's too low-level for most programmers, it's not necessary because the default ones are good enough, etc. Well, for client computing, the same logic applies to a lot more things than disk drivers. A lot of paying customers probably find everything to be as low-level as a disk driver. If one wants to sell them Linux, one can't tell them to read a recipe of black-magic look alike instructions to do something, go find software on Freshmeat, or read Word documents with
strings if OpenOffice failed to read them ...
There have been several steps in the right direction, though the efforts are often not collaborative, thereby not synergistic. People have tried to standardize things, from rather lower-level standards such as the LSB, to entire human interface guidelines (GNOME, KDE, ...) A historically popular remedy has been to create a new Linux distribution.
It is extremely encouraging to see the amount of attention Linux based operating systems have gotten, even from a client computing perspective. Governments and businesses seem to be very interested in Linux, for cost reasons, as a reaction against Microsoft's monopoly, and other political reasons. Linux is very popular in emerging countries. While this does give Linux headway, it's no guarantee for success. I believe the "concerns" mentioned above are still valid (and they are not the only obstacles Linux is facing - there are numerous other issues that are beyond the scope of this discussion). Somebody (a company, perhaps) needs to stand behind Linux in a different way (rather than only coming up with yet another "distribution"). I would like to see somebody take a different approach with Linux - maybe even something like what Apple did while coming up with Mac OS X.
I have stopped using Linux on my primary computer (in favor of Mac OS X). I work on Linux at my work, and run it under Virtual PC at home. In general, it is possible to do most things that one does on Linux on Mac OS X, usually with less effort.
As a digression, I can't help but point out that I believe there exists a psychological trap, wherein one spends a lot of time, over and over, tweaking, configuring, making things work, on an installation, while being under the impression that it's a worthwhile activity ... [more]
Mac OS X
It hasn't been a very long time since I got my first Apple computer (April fool's day in the year 2003, complete with drama), but I agree with Apple's general direction with Mac OS X. I have tried to present a view of the current state of Mac OS X in the previous pages, so that you can judge for yourself if it suits your needs.
Mac OS X has managed to become rather Utopian with time. If you care, it doesn't alienate you from *nix. In fact, it gives you a very colorful environment to play with: you have Mach, FreeBSD, a nice driver development environment, and a lot of the system's source code to go with it.
If you are used to *nix (including Linux), you can get a lot of the same, or similar software on Mac OS X. You can compile it yourself, or hope to find it in one of the port collections.
As discussed in Available Software on Mac OS X, there is a lot of professional quality (mostly commercial) software available for the Mac. In its current form, Mac OS X is uniquely positioned, unlike any other system, to offer the benefits of the *nix Universe as well as counterparts (either the same or with similar functionality) of important software from the Windows Universe. Apple have been busy adding to Mac OS X a lot of valuable software they created in-house.
Apple's traditional emphasis on ease-of-use seems to work most of the time, although there are exceptions. In my opinion, Mac OS X is representative of a "best-effort" approach - Apple took technology they had collected over the years, along with technology that had flourished in the open source world, and put together a reasonable system.
Currently there is nothing that I want to be able to run (as per my needs and wants) that does not run on Mac OS X.