JNode System-file Tree Structure

It is time for us to start thinking about how JNode should run from a normal harddisk based system, how it should be installed and maintained.

An essential part of this, is how and where system files should be stored, and what system files are. This page answers the question of what system files are and proposes a tree structure for system files to be stored.

What are system files

In JNode there are a few different types of system files. These are:

  1. Kernel image, (jnodesys.gz) which contain the nano-kernel, the system plugins and the system classes.
  2. Initial jars, (e.g. default.jgz) which contain the plugins needed to start the system.
  3. Plugins, which contain services (drivers, apps, ...) and are loaded on demand.
  4. Configuration data, which contain configuration data specific to the device it is installed on.
  5. Bootloader files, (stage2, menu.lst) used by Grub to boot the system.

Tree structure

In JNode system files should be placed in a container in a structure that is "well known".

A container can be a filesystem, but can also be some kind of database. See the next paragraph for a discussion on this.

The proposed tree is as follows:

/jnode The root of the container
/jnode/system Contains kernel and the initial jars
/jnode/plugins Contains the plugins
/jnode/boot Contains the bootloader files
/jnode/config Contains the configuration data

System file container

Traditionally the system files are stored in a directory on a "root" filesystem. This filesystem is identified by a parameter, or some flag in a partition table.

This method is easy, because all normal filesystem tools can be used on them, but makes it harder to protect these files against virusses, ignorent users etc. Also this method limits the system files to being harddisk based. (E.g. look at the trouble Linux had to have an NFS root filesystem).

For these reasons, I propose a more generic method, that of an abstract container interface for system file access. This interface can have implementation ranging from a single file based container to a network loader. The essential part is that the actual implementation is hidden from the part of JNode that uses it (either to load files, or to install them).

This is all for now, please comment on this proposal.

Ewout