My impression of Mac OS X

For the past few weeks I have been using Mac OS X extensively. My main activities are web browsing, email, listening to music, and programming. The hardware is Apple's fully-loaded, top-of-the-line laptop. The OS version is 10.3 Panther.

Browser

Mac OS X comes with Apple's Safari browser. This is probably the best part of the experience. Safari has a clean look and renders webpages nicely. It is compatible with all of the various semi-standards that are used to make the webpages that I visit. I can feel that Apple deliberately held back and tried to keep Safari simple. There are some features that I wish it had, but it isn't a big deal. Safari is a good browser. The browser has crashed about three times in the months that I have been using it. That might sound like a lot, but that is actually much less frequent than the crashes that I experienced with other browsers on other platforms.

Window System

For some reason, Mac OS X uses some other window system that is not the the regular UNIX X windows. They do have X11 (X windows) available as a kind of compatibility layer. I don't really understand why Apple didn't use X windows. Maybe it had something to do with compatibility with old programs written for Mac OS versions before OS X. I don't see any useful functionality in Apple's window system that couldn't be done on an X windows system.

iTunes

Mac OS X comes with iTunes, which is Apple's program for dealing with audio files. It aims to provide a mandatory access control environment where you can download files that you have licensed on Apple's website. You can easily transfer the files to your iPod and the iTunes software keeps track of the licensing issues so the files are presumably never in two places at the same time when they are only licensed for use in one place. The idea is that the music companies will allow you to download the file for 99 cents using the iTunes software because then it will be trapped inside the iTunes access control environment and, supposedly, will be protected from illegal copying. The iTunes program enforces access and copying control policies for music files that are obtained on Apple's website, but allows the user to freely copy audio files that are obtained from outside of the mandatory access control environment, for example ripped from an audio CD.

UNIX in Mac OS X

Mac OS X runs on a UNIX kernel. It has what appears to be a POSIX environment. The system resembles a BSD. I hoped that the Mac would provide all of what Linux provides combined with better end user stuff. It is a big disappointment in this regard. It seems that Apple brought too much of their old philosophy to the new system when they wrote OS X. They have significantly moved away from the UNIX philosophy. UNIX is about writing small tools that do something well. UNIX is about blurring the distinction between users and programmers. UNIX is about blurring the distinction between function calls within a program and human invocation of programs. Shell scripting is the best illustration of this. Traditionally, when shell scripting in UNIX you could just use whatever programs you normally use on the command line. Scripting is great for turning a manual process on the command line into an automatic process, using the looping and conditional constructs that the shell provides. Among other things, this means that in UNIX, you can take any command and use it as a component of some other program that you are constructing. It is common for fifteen little programs to get combined together to do some special task. It is very easy to build these aggregate software systems because of the similarity between simply running a program on the command line and having it run as part of your shell script. Furthermore, UNIX has an extremely easy and convenient form of interprocess communication: pipes. Although pipes are limited in many ways, it turns out that the pipeline concept of computing can express most of what anybody uses a computer for. The programmability of UNIX is why it became successful and has remained successful for 35 years. That is the main thing UNIX has going for it. The greatness of UNIX comes from its programmability. There isn't really any one technical feature that is the embodiment of UNIX's strength. It is really a cultural thing, a philosophical thing.

But Mac OS X is not UNIX in the way that one might hope. It is more like Mac OS X has a UNIX kernel but everything else from some other culture, some other traditions, some other philosophy. It is Apple, not UNIX. Apple culture is very different from UNIX. In Apple culture users don't write software. They either buy it or steal it. Free software is a foreign concept to them. Mac OS X supports this culture more than it supports the culture of technically empowered users. I don't think that Apple wants to keep their users dumb. They just want to stay in business. Actually it is quite ironic that Mac OS is based on UNIX since UNIX is a system that offers rich rewards to expert users but no benefit to naive users. Apple has survived for decades on the idea of making computing simple, and to a certain extent keeping people blissfully unaware of the hairy realities of how computers work. People have proved to be willing to pay double for a Mac instead of a PC so they can stay ignorant about technical computer stuff. So, all else being equal, Apple users are the most technically ignorant computer users on the planet. The principal benefit of UNIX, its ease of programmability, is not of any value to them at all. Apple is a smart company and they know this.

One example of the way that Mac OS X is really not made for easy programmability is the use of filenames with spaces in them. UNIX supports filenames with spaces but it is a pain in the ass because spaces are used as separators between words on the command line. To avoid this confusion, UNIX folks usually use underscores or hyphens instead of spaces to separate words within a filename. To type filenames with spaces in them on the command line and not get the spaces misinterpreted, one must quote the whole filename. But that isn't the end of the trouble. When writing shell scripts one has to use quotes when variables are being interpolated that may contain spaces. For this reason, if the system is to be conveniently scriptable (and command line operable) then filenames with spaces should be deprecated. But Mac OS is full of filenames that contain spaces. Apple must have had a meeting about this issue and decided that since 99.9% of their users don't program, they will design their system to be idiot friendly instead of expert friendly. They probably figured that it isn't too much of a big deal for the experts to quote the filenames when they write programs or type commands in the shell. This example just illustrates how Mac OS X is not a product of the UNIX tradition. Much of what makes UNIX great has been broken in Mac OS X.

Hardcore UNIX people have always felt that graphical user interfaces (GUIs) are dead-ends from a tool building standpoint. It is usually difficult to embed a GUI program into another program. It is much easier to embed a command-line program into another program. Therefore, command-line programs are seen has having infinite potential as components of future programs. And if those future programs also have command-line interfaces, then they might one day become part of other higher-level programs, and on and on. This is one important aspect of the fertility that is created by the UNIX culture. But when a GUI program is written, there is a very good chance that it will never be used as part of anything else. It will either be used by a human clicking on it or it will not be used at all. Mac OS X is full of GUI tools. It is not easy to use their tools as components of higher-level tools that I would like to write. Their OS is strictly for the end user. It is not really intended to be extended by an expert user to optimally suit his uses. It comes with a scripting language, AppleScript. Although it is a textual language, the metaphors used to make things happen are GUI metaphors. The GUI is a very clumsy thing that only makes sense in a very narrow set of situations. In modern computing, 99% of the programs never interface with a human at all. Regular imperative programming languages are pretty good most of the time.

Horribly Bloated Software

Everything on Mac OS is hugely bloated. I can't understand why, but even trivial programs written by Apple are obese. For example, Mac OS comes with a cute little text editor called TextEdit. The size of the TextEdit executable is 3.3MB. TextEdit has almost no features. Indeed, it uses externally provided OS services for spell checking and has no features that would be interesting to a programmer. But somehow it is 3.3MB. Meanwhile, vim, which is tremendously more powerful is only 967KB. Vim opens fast. TextEdit opens slow. What's up with that? What's up with big slow programs that don't have any features? Is that good software?

Many things that one does on Mac OS X take several seconds to happen. The computer that I am using is currently top-of-the-line. Even some really simple things take time. I am assuming that the mentality at Apple is that they will write the lowest-performance, most bloated code that just barely stays inside of the "acceptable" range for most users. This is why this laptop doesn't feel fast, despite having a fast CPU and lots of RAM. In 18 months when computers are twice as fast, Apple will release a new version of their OS which is twice as bloated and inefficient despite having only a couple of trivial new features. The superfast computers will feel OK running the new superbloat OS. Laptops bought in 2004 will be obsolete, perhaps not even supported.

For several decades, computer scientists and programmers have devoted themselves to finding good algorithms. Good algorithms are a central aspect of the craft of programming. Other than being functionally correct, good algorithms are the ones that accomplish some task in the minimum amount of time using the minimum amount of system resources. Good programming involves applying good algorithms correctly to a solve a practical problem. High quality code is fast and correct. That is what books like "The Art of Computer Programming" by Knuth are about. Maybe people who write bad code have Knuth on their shelf but didn't read it. Or maybe they don't see how to apply all of the theory to their work. Or maybe they are working under management that rewards them for writing high quantities of low quality code. I

I don't like it when people write bloated code. Bloated code says to me, "I don't give a fuck about the consumers or the environment." It is an ugly statement, not nice at all. The apparent beauty of the Mac is fake. Beauty comes from balance, and limitless bloat doesn't seem like balance to me.

I miss Linux.

I wish that Mac OS X were cooler that it is. I wish Apple was interested in UNIX. GNU/Linux is currently my favorite operating system. GNU utilities are wonderful, much better than the BSD stuff that Mac OS includes. Linux has a lot more hardcore UNIX culture in it, although there is a lot of stupid stuff in Linux too, due to people's efforts to use Linux as an anti-Microsoft weapon. Isn't it ironic that to fight Microsoft, they would make their system resemble Microsoft. For guys like me, it makes Linux less attractive when a standard installation includes lots of silly bloatware like GNOME and KDE. All of that nonsense just weakens my loyalty to Linux and has me trying out other systems like Mac OS. Still, Linux is the most friendly system to a user like me. Most likely, my next computer will be a PC laptop running Linux. Unfortunately, Linux does not run on the PowerBook G4 that I have, otherwise I would install it today.