A Call For A Filesystem Abstraction Layer
Filesystems are fundamental things for computer systems: after all, you need to store your data somewhere, somehow. Modern operating systems largely use the same concepts for filesystems: a file’s just a bucket that holds some bytes, and files are organised into directories, which can be hierarchical. Some fancier filesystems keep track of file versions and have record-based I/O, and many filesystems now have multiple streams and extended attributes. However, filesystem organisation ideas have stayed largely the same over the past few decades.
I’d argue that the most important stuff on your
machine is your data. There are designated places to
put this data. On Windows, all the most important
stuff on my computer should really live in
C:\Documents and Settings\Andre Pang\My
Documents. In practice, because of lax
permissions, almost everyone I know doesn’t
store their documents there: they splatter it over a
bunch of random directories hanging off
C:\, resulting in a giant lovely mess of
directories where some are owned by applications and
the system, and some are owned by the user.
Mac OS X is better, but only because I have
discipline: /Users/andrep is where I put
my stuff. However, I’ve seen plenty of Mac users have
data and personal folders hanging off their root
directory. I’m pretty sure that my parents have no
idea that /Users/your-name-here is where
you are meant to put your stuff, and to this
day, I’m not quite sure where my dad keeps all his
important documents on his Mac. I hope it’s in
~/Documents, but if not, can I blame
him? (UNIX only gets this right because it enforces
permissions on you. Try saving to / and
it won’t work. If you argue that this is a good
thing, you’re missing the point of this entire
article.)
One OS that actually got this pretty much correct was classic Mac OS: all system stuff went into the System folder (which all the Cool Kids named “System ƒ”, of course). The entire system essentials were contained in just two files: System, and Finder, and you could even copy those files to any floppy disk and make a bootable disk (wow, imagine that). The entire rest of the filesystem was yours: with the exception of the System folder, you organised the file system as you pleased, rather than the filesystem enforcing a hierarchy on you. The stark difference in filesystem organisation between classic Mac OS and Mac OS X is largely due to a user-centric approach for Mac OS from the ground-up, whereas Mac OS X had to carry all its UNIX weight with it, so it had to compromise and use a more traditionally organised computer filesystem.
As an example, in Mac OS X, if you want to delete
Photoshop’s preferences, you delete the
~/Library/Preferences/com.adobe.Photoshop.plist
file. Or; maybe you should call it the Bibliothèque
folder in France (because that’s what it’s displayed
as in the Finder if you switch to French)… and why
isn’t the Preferences folder name localised too, and
what mere mortal is going to understand why it’s
called com.adobe.Photoshop.plist? On a technical
level, I completely understand why the Photoshop
preferences file is in the
~/Library/Preferences/ directory. But at
a user experience level, this is a giant step
backwards from Mac OS, where you simply went to the
System folder and you trashed the Adobe Photoshop
Preferences file there. How is this progress?
I think the fundamental problem is that Windows
Explorer, Finder, Nautilus and all the other file
managers in the world are designed, by definition, to
browse the filesystem. However, what we really want
is an abstraction level for users that hides the
filesystem from them, and only shows them relevant
material, organised in a way that’s sensible for
them. The main “file managers” on desktop OSs (Finder
and Windows Explorer) should be operating at an
abstraction level above the filesystem. The operating
system should figure out where to put files on a
technical (i.e. filesystem) level, but the filesystem
hierarchy should be completely abstracted so that a
user doesn’t even realise their stuff is going into
/Users/joebloggs.
iTunes and iPhoto are an example of what I’m advocating, because they deal with all the file management for you. You don’t need to worry where your music is or how your photos are organised on the filesystem: you just know about songs and photos. There’s no reason why this can’t work for other types of documents too, and there’s no reason why such an abstracted view of the filesystem can’t work on a systemwide basis. It’s time for the operating system to completely abstract out the filesystem from the user experience, and to turn our main interaction with our documents—i.e. the Finder, Windows Explorer et al—into something that abstracts away the geek details to a sensible view of the documents that are important to us.
One modern operating system has already done this: iOS. iOS is remarkable for being an OS that I often forget is a full-fledged UNIX at its heart. In the iOS user experience, the notion of files is completely gone: the only filenames you ever see are usually email attachments. You think about things as photos, notes, voice memos, mail, and media; not files. I’d argue that this is a huge reason that users find an iPhone and iPad much more simple than a “real” computer: the OS organises the files for them, so they don’t have to think that a computer deals with files. A computer deal with photos and music instead.
There are problems with the iOS approach: the enforced sandboxing per app means that you can’t share files between apps, which is one of the most powerful (and useful) aspects of desktop operating systems. This is a surmountable goal, though, and I don’t think it’d be a difficult task to store documents that can be shared between apps. After all, it’s what desktop OSs do today: the main challenge is in presenting a view of the files that are sensible for the user. I don’t think we can—nor should—banish files, since we still need to serialise all of a document’s data into a form that’s easily transportable. However, a file manager should be metadata-centric and display document titles, keywords, and tags rather than filenames. For many documents, you can derive a filename from its metadata that you can then use to transport the file around.
We’ve tried making the filesystem more amenable to
a better user experience by adding features such as
extended attributes (think Mac OS type/creator
information), and querying and indexing features, ala
BFS. However, with the additional complexity of
issues such as display names (i.e. localisation),
requiring directory hierarchies that should remain
invisible to users, and the simple but massive
baggage of supporting traditional filesystem
structures (/bin/ and /lib/
aren’t going away anytime soon, and make good
technical sense), I don’t think we can shoehorn a
filesystem browser anymore into something that’s
friendly for users. We need a filesystem abstraction
layer that’s system-wide. iOS has proven that it can
be done. With Apple’s relentless progress march and
willingness to change system APIs, Linux’s innovation
in the filesystem arena and experimentation with the
desktop computing metaphor, and Microsoft’s ambitious
plans for Windows 8, maybe we can achieve this
sometime in the next decade.