On Hierarchical File Systems


#hfs #fs

Hierarchical file systems (HFS) are used by all popular modern operating systems such as Windows, macOS, or Linux distributions. They have been in use for a long time and become more efficient. However, without tooling, they fail to provide an efficient sorting and searching interface for humans.


HFS are an alignment of files and directories in a top-to-bottom structure (i.e. files and directories are aligned in a hierarchy).

Files are by definition a collection of the smallest addressable unit of memory (most commonly an 8-bit byte/octet) distinguished by a unique path (the concatenation of one or more directories and a file name, each delimited by a path separator (e.g. /)). For users, files also serve a separation semantic. Either by file type or the content of a file.

Directories serve as a subdivision of storage. They can be nested and allow the hierarchy of a file system.

When interacted with by a computer this is often no problem, however for users it is.

Problems #

As described above files serve as a separation semantic. However, in almost any case, multiple measures can be used to separate files and directories. HFS force the user to choose one.

Say one practices the separation in the typical documents-pictures-videos-downloads-split. They now want all the picture and video files from one trip they took. Without further scripting or tedious clicking, there is no straightforward approach to accomplish the action other than breaking the aforementioned structure and sorting every file by trip. This might work if your need is only to structure your files by trip, but if a file cannot be assigned to one, this structure also fails demonstrably.

This problem can also been seen when sorting books or any other form of information. Does one sort them by author, genre, or title?

Solution #

Since the problems of HFS arise from the urge to sort files while the seperation semantic used does only respect one property of the file, the solution would be to assign multiple properties to a file. This could be done in a tag-based approach.