Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Tagged plain file system in which a file can only have multiple tags and nothing more.
Haskell
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
System/TPFS
.gitignore
LICENSE.md
README.md
Setup.hs
TPFS.cabal

README.md

TPFS

TPFS (the Tagged Plain File System) is a revolutionary new file system developed by ΩF:∅ that aims to move beyond the rut of hierarchical file systems through a purely tag based model. There are only two objects in TPFS: files and tags. They share a many-to-many relationship; files can have many different tags, and tags can have many different files. It is designed to be quick to look up in both directions.

TPFS is simple, but powerful. Tags can store any string data and are not restricted in size. They can be looked up quickly, through SHA-256 hashing and a B-tree index. While TPFS is not designed to be the fastest or the most reliable, it should be enough to satisfy most users. The loss is a small price to pay for such an innovative filesystem.

The reference implementation of TPFS is written in Haskell. Lots of help is currently needed, but please note that the challenges are often not for the faint of heart. It is recommended to be quite comfortable with Haskell and the barebones basics of filesystems before attempting this project.

That said, if you're interested, here's a rough idea of what needs to be done:

  • Block allocation.
  • A B-Tree implementation in Haskell using the Device API. This will be used for the file and tag indexes.
  • Implementation of the low level part of System.TPFS.Objects. This, of course, is dependent on the B-Tree implementation.
  • Design of the high level access API for the Haskell implementation.
  • A FUSE driver, probably using HFuse if it works. The FUSE driver will need to be very carefully planned; mapping TPFS to the conventional POSIX system in an obvious manner won't be easy.
Something went wrong with that request. Please try again.