Personal tools
You are here: Home Projects Why MacOS X is what I want
Document Actions

Why MacOS X is what I want

by kena last modified 2007-01-06 18:04

Why MacOS X is better where it should not.

Warning 1: this was written during June 2005. This kind of information decays quickly.

Warning 2: subjective thoughts ahead. I do not like proprietary operating systems. I like to read the source code of my system and applications at breakfast. This to say that MacOS X being a closed-source operating system really hurts my feelings, especially the trust I feel towards my computer. In fact, I would really use something else to run Vodka-Pomme (that's the name of my iBook). I've been using FreeBSD, Debian GNU/Linux and Knoppix for a very long time (8 years) on a multitude of computers, and I am still using them. But right now MacOS X is my main desktop operating system. Only because it offers features I was lacking when using the other systems, and I just cannot afford to spend time to wait for these features to appear in open-source distributions or develop them myself.

Actually, I do not care about fancy graphics, integrated Java support, universal PDF support, Exposé, file metadata, and all these fashionable business keywords. However, usual free software Unix distributions make me feel like I'm stuck in the 90's. Apple makes me feel like it has successfully put a step in the twenty-oneth century. Why?

Here is the list of things I am waiting for to appear in other free operating systems to get rid of MacOS X.

User-level disk images

I want to be able to package stuff into a mountable disk image files. I do not want to need administrator priviledge to mount disk image files.

MacOS X allows any user to create and mount disk images.

Easy-to-use filesystem encryption

I want to encrypt my files. That's easy enough for most systems. Afterall, GnuPG works pretty well. However...

I want transparent, filesystem-level encryption. I do not want to explain to my applications that my files are encrypted. I want my files unreachable when I am not logged in.

I want to be able to save my files encrypted easily. I want to be able to restore them on another computer temporarily in minimum time.

For this, I use Apple's FileVault which puts my home directory in an encrypted disk image file. The system mounts (unix-wise) the file when I log in, and unmounts it when I log off. I can copy this file and mount it on any other MacOS X system.

I can even create encrypted image files wherever and wheneven I want for distribution to other people.

FreeBSD and Linux allow for filesystem encryption. But it works over block devices, not files. And using it requires administrator priviledges.

Linux' kernel CryptoAPI is great, but it's very low-level and I do not know of any working user-level integration tools that work on all distributions.

CFS (user-level NFS server to encrypted files) looked promising. However it provides poor encryption and seems deprecated.

PPDD looks promising too, but is not mature.

EncFS does not count. It requires custom and non-standard kernel extensions.

Filesystem-level charset conversion support in filenames

I want all my filenames stored using UTF-8 by default. I want all applications to see UTF-8 in filesystem operations, even if the underlying filesystem does not use UTF-8 for storage.

I want all my application to display filenames in file dialog boxes correctly, even those filenames with non-ASCII characters in them.

I want mounted foreign filesystems to use UTF-8 for filename encoding, even when the source filesystem encodes filenames with another charset. Automatically, i.e. without having to provide arcane options to a command-line mount tool.

MacOS X does all that by default.

User-level fault-tolerant remote filesystem mounts

I want to mount remote filesystems without administrative priviledges.

I want to be able to mount WebDAV, FTP, SMB (CIFS) and NFS remote filesystems and use the files within as if they were local. That is, real mounts (not that KIO crap from KDE), so that applications without specific support can use the files.

Of course, I don't want filename charset encoding issues with filesystems mounted remotely, even if the remote filesystems does not use UTF-8.

I want to be able to choose between telling my system to forget the mount when the remote server or the network link fails, or to hold the mount until I reconnect.

I want my applications to behave properly when the files they access become unreachable. In the worst case, I want to be able to kill them completely.

MacOS X's Finder does all that.

User-level fault-tolerant removable device handling

I want my system to mount floppy, CD-ROMs, DVDs, USB, Firewire and PCMCIA disks automatically.

I want to be able to unmount the removable filesystems without administrative priviledges.

I want my system to forget the mounts completely and keep sane when I remove a device without unmounting the filesystems.

I want my applications that are able to use the scanners, printers and photo cameras I plug in, to behave correctly when the devices are unplugged without warning the applications first.

MacOS X does all that.

Universal and extensible printing API

I want all my applications to use the same subsystem when I print.

I want to be able to choose to export the printed data to a file in a reusable format, for each print. I want to be able to choose the printer I'm printing to for each print, too.

Other unix distribution do all that already: the "lpr" command is intended to be the universal printing service. When an application knows how to output PostScript data, the "lpr" command allows to choose the printer (one parameter), redirect to a file (command-line pipe filter). However, few applications allow to choose arguments to pass to "lpr" at each print.

Besides I want to be able to set up advanced printer settings differently for each application. Like the type of paper, resolution, number of pages per sheet, margins, print quality, and so on.

Also, I want to be able to configure my printers in only one place. I want to be able to configure them without administrative priviledges.

All that "lpr" does not allow.

CUPS does, and is even used by MacOS X for low-level print handling. However CUPS is hard to install, and the standard configuration interface of CUPS just plainly sucks.

MacOS X takes the power of CUPS and integrates it to every application with a slick user interface. That's what I want.

Automatic font selection for Unicode display

I want all my application to display Unicode properly. I want them to use another font to display characters that the current font does not define.

I want the fallback font to be as close as possible in shape to the current font.

That's done by default in MacOS X.

Multimedia clipboard and drag-and-drop

I want to be able to cut-and-paste and drag-and-drop files, images, sounds, bookmarks and rich text.

I want all applications that support multimedia data to be able to exchange data with each other through the clipboard.

Most Mac applications do that already.

Universal password and certificates database

I want all my passwords and sensitive data stored in a unique database. I want to be able to control what application can access this database, and when. And the database should be encrypted with state-of-the-art algorithms.

I know that Mozilla derived products already have such a database. But I want that feature for all applications.

MacOS X provides the Keychain Access utility, and most applications talk to it to manage passwords and other sensitive data. That's what I want.

User-level network configuration switcher

I want to be able to globally change all my network settings when I move my laptop around.

I want my system to handle such switches for network interfaces, network address configuration and proxy settings.

I do not want to restart my applications to take this kind of change into account.

MacOS X does all that, already.

(feedback by tsuna)

Posted by tsuna at 2007-05-28 13:09
Most of it is still true today and since I recently sold my soul to Apple here is what make me want to stay on MacOSX:

- No crappy X11
One of the things that annoy me most with UNIX is X11. It's always been a real pain to get it to work properly, especially when you want to work on more than one screen. I always succeeded though, but it's always been a great source of annoyance and waste of time. Moreover, whenever you want to change your configuration, you have to restart your X session. This is utterly annoying because this is just like a reboot: you have to shutdown your entire session (beside screens). On MacOSX, there is an almost zero-configuration setup, you just plug another screen and it will show up. No restart necessary. The system is clever enough to make the difference between screens and projectors. The former will automagically setup a dual screen, the later a mirror screen. Of course, if this default does not suit you, you can change the settings in a couple of clicks. One of the other cool things is that once you choose a given setup for a screen, MacOSX will re-use it the next time you use that screen. This is extremely handy. For instance, in the lab where I work, my second screen is located above my laptop, so I want it to be really on the top of my main screen. In another place where I occasionally work, my second screen is located on the right of my main screen. MacOSX remembers the position of the different screens I used so far.

- Builtin suspend to RAM/disk support
It just works. I challenge you to get it to work on Linux especially if you use USB devices, a second screen and generally speaking: a graphic card. If your laptop runs out of battery, the system will suspend to disk and you will be able to resume your session (and work) as soon as you find an electrical plug.

- System wide network configuration
You already mentionned it but I'd really like to emphasize the fact most MacOSX applications can use the system-wide setting including proxy settings which is really damn useful.

- Clever headphone plug
At least on MacBook, the headphone plug is very clever. The system knows whether headphones are plugged or not. If you mute the system without headphones and then plug headphones, the system will unmute. This is very handy. Say you listen to some MP3 and you make an abrupt movement which unplugs the headphones, then no worry, nobody will be disturbed because the system detected this and went mute.

- Handy MagSafe
On MacBook the power cord is attached by magnetic connection which already saved my MacBook several times. This is a very simple idea, I wonder why we had to wait until 2006 to have this on our laptops.

- Lots of system tools
Although MacOSX comes with a bunch of new things compared to traditionnal UNIX systems (like most proprietary systems), you can do most of the things from a shell because their nice configuration interfaces are mostly wrappers around system tools provided with the system. For instance I was very happy to be able to install complete systems remotely. One just had to install the base system from the CD and give me the login/password of an admin account so I could sudo as root and then I could everything from a shell (including install XCode (Apple's GCC) from the shell, that is downloading the .dmg image, mounting it, installing the package without using the GUI installer, umounting it). I wish I could do this when I have to install VC++ on Windows :)

- Homogeneous configuration files
Although the base system really feels like a traditionnal UNIX, there are many new configurations to deal with. These configurations as well as the configuration of most application written with Apple's SDK use a common file format based on XML to describe configuration data (the plist files). Apple provides tools in the base system to manipulate these XML files from command line.


Now let's be honest, there are several things on MacOSX that really sux.
- Custom dynamic loader
Although they based their system on BSD, I think they changed too many low level things. Before using MacOSX I was told that Apple was clever because they re-used a system that just works and simply sold it along with a nice user interface. But the fact is that they heavily changed the underlying OS. The idiosyncrasies of their exotic linker and dynamic loader has always been a great source of annoyance for the Free Software community. It made it harder to port applications to MacOSX whereas it could've been trivial if the application was already working on some BSD. MacOSX does not support rpath and whole-archive among other options. They use *.dylib instead of *.so and DYLD_* env var instead of LD_*. I think this is plain stupid.

- Inefficient memory manager
Many people confirmed this feeling I always had since I'm using MacOSX: the kernel handles the memory very badly. MacOSX uses most of the free memory pages as disk access cache which is a good thing, but the problem is that when you suddenly need more memory, the system reclaims these cache pages too slowly. I used to compile big C files which would lead GCC to consume up to 600M. It would take HOURS on MacOSX whereas on Linux it would be way faster, even with less free memory, because the system would suddenly decide to free lot of memory (including memory used by other programs that is swaped out to the disk) and give it to GCC. When the system starts swapping MacOSX often becomes unusable up to a point where I need 10 minutes to stop the screensaver and wait for the login screen to appear. I had to buy a MacBook with 2G RAM to avoid this kind of problems.

- No direct X11 compatibility
The whole GUI of MacOSX is very cool and all but... you have to run a separate X11 server if you want to run X11 applications. This sucks, they should've made their graphical system compatible with X11. At least, I would complain less if the integration of X11 applications was better, but it's not the case. All X11 applications are not seen as separate applications in the GUI, they all appear like windows launched by the X11 server. It's always a real pain to copy/paste anything from X11-app to OSX-app or even from X11-app to X11-app. Moreover the overall look-and-feel of X11 apps does not match the comfort of OSX-apps.

- Too many applications running with elevated privileges
Many applications of the base system including iTunes and PhotoBooth run with elevated privileges. They do appear to run as user in ps, but sometime they get stuck while accessing some device (eg: a CDROM or a mounted image) and you can't kill them even with a sudo kill -KILL <pid>.

- Not enough devices under /dev
Many devices are not accessible from the command line because they don't have a device associated under /dev. I'm thinking about the iSight but also other devices such as USB and Firewire ports. Moreover they don't provide tools such as lspci, lsusb and the like. One of the other things I'm missing is /proc. It has always been a handy interface for many applications which can't work on OSX because of this (eg: GNU ps, GNU top).

skin by PYBOOM