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.