Sunday, September 02, 2007

Sad Apple moments: Apple abandons file reference indirection

I think the single greatest innovation of the original MacClassic OS was the implementation of unique file identifiers.

Instead of hard coded paths and file names, files were identified by permanent unique identifiers. Applications called the Toolbox to get the current path as needed. Files could be "moved" (renamed, relationship to folders changed, etc), but references didn't break. Everything just worked (as long as the files stayed on the same physical drive).

Since Apple migrated to OS X they've been moving away from this. I looked a few months back and could find almost no documentation of indirection at the file system level in OS X HFS+. Increasingly Apple's applications seem to require fixed paths.

Apple's warped iClip (called iMovie '08 by Apple) is another nail in the coffin for indirection:
Gordon's Tech: iMovie '08: How the heck is it supposed to work?

As an experiment I relocated the iPhoto Library that iClip (iMovie '08) was referencing. I found, again, confirmation that Apple has abandoned file redirection in favor of hard coded paths.
Somewhere an group of former Apple engineers are mourning a great contribution that has been pointlessly abandoned. Whoever you are, wherever you are, thanks team. I appreciate what you did.

Update 2/26/09: A Stack over flow question pointed to the an Apple tech doc on The "/.vol" directory and "volfs" that demonstrates how badly this key innovation was hurt in the switch to OS X:
... This directory is used as the mount point for the "volfs" file system. The "volfs" file system is a key component for supporting the Carbon File Manager APIs on top of the BSD file system. Historically, BSD systems only allow you to access a file or directory by its POSIX path. However, the Carbon File Manager API also allows you to access an item by its catalogue node ID (CNID, a file ID reference or a directory ID). "volfs" provides a bridge between these two models, allowing the Carbon File Manager APIs to work on top of the BSD file system.
So Apple hacked BSD to enable file IDs with OS X, but Carbon is their deprecated API and file IDs are tied to HFS, a decrepit file system. I wasn't able to find mention of a Cocoa API for accessing CNIDs...

No comments: