The repository

In compliance with the basic principles of NorthernWind that mandate for avoiding unnecessary complexity, the repository is designed with the simplest semantics that accompishes the task of storing, serving and allowing the manipulation of resources: filesystem semantics. In particular:

  1. resources are identified by their name (path)
  2. resources are organized in folders
  3. it is possible to create, move, rename and delete resources

In function of one's owns needs, there might be additional semantics and the implementation of the filesystem can be provided by different facilities. For instance:

  • a plain filesystem, as it is provided by an operating system, its a simple solution with no additional semantics. For instance, it doesn't provide support for concurrent editing, revisions, branching, etc.
  • a zip filesystem is represented by the contents of a zip file, just adding to the semantics of a plain filesystem a simpler way to be copied and moved around.
  • a SCM-based filesystem (Source Control Management), relying on Subversion, Mercurial or Git, can easily provide support for concurrent editing, transactions, versioning and branching.
  • advanced filesystems, such as ZFS and BTRFS, might as well provide support for transactions and versioning.
  • other solutions might be picked, such as relying on a relational database, a NoSQL database, or a JSR-170 implementation.

It is possible to use mixed approaches too: for instance, a complex repository could publish to a plain filesystem (e.g. by means of rsync) or a single zip file.

Filesystem-based solutions offer the additional advntage of allowing multiple and cheap ways for performing ordinary and extra-ordinary maintenance. The best trade-off is probably offered by a solution based on a Distributed SCM such as Mercurial of Git.

As you can see, the choice of keeping the basic requirements for the repository to a simple level of abstraction, such as the filesystem one, makes it possible to adopt simple solution for simple needs and optionally increase the complexity only in more demanding cases.

The current early access version of NorthernWind provides support for plain and zip filesystem. Mercurial support will be available soon.