libferris: features

What can libferris do for me?

Donate - logo


EA Descriptions

Build Order
Source Control

Mailing Lists
GPG Keys

Source hosted at:

This page gives a very high level of what features the libferris semantic virtual filesystem has. The main library is, graphical support is in and XSLT support is in

There are optional wrapper libraries allowing Perl, Python and OCaml to access libferris.

The core of libferris is to provide a C++ abstraction over many tree like structures and present the main content of each object in the tree as an IOStream. This core abstraction also provides STL style iterators for a begin() to end() iteration of a directory. Arbitrary metadata for a file is accessable via getStrAttr() and setStrAttr(). Some of the metadata is automatically extracted from files and presented through this same interface, some of the plugins to extract / handle such attributes are listed below.

Many other features like transparent compression of content, xml serialization, metadata indexing, full text indexing, automatic file classification through manchine learning agents are also provided to enhance the VFS.

The following sections describe what things libferris can mount, what sort of metadata is supported and what clients currently exist.

The following clients exist in the tarball, graphical versions use GTK+2:

  • ferriscp, a superset of coreutils 'cp' command. A graphical version of cp called gfcp which has progress displays and nice 'cp -i' interface.

  • ferrisls, a superset of coreutils 'ls' command.

  • ferrisrm, replacement for coreutils 'rm' command. A graphical version called gfrm.

  • ferrismv, replacement for coreutils 'mv' command. A graphical version called gfmv.

  • fcat, replacement for coreutils 'cat' command.

  • ferriscd, bash2 'cd' which handles XPath resolution

  • ftouch, a superset of coreutils 'touch' command.

  • fmkdir, replacement for coreutils 'mkdir command.

  • fclipcopy, fclipcut, fcliplink, fclippaste, fclipredo fclipundo: command line tools for performing file movements. (Cut a file and paste it someplace to "move" that file).

  • findexadd, feaindexadd: clients to add new items to fulltext and EA indexes.

  • findexquery, feaindexquery: clients to query to fulltext and EA indexes.

  • findexcompact, feaindexcompact: clients to compact indexes, performing costly reclaim operations. Such tools are needed to allow index evolution without loosing great deals of query performance.

  • fschema: interaction with attribute schemas

  • fmedallion: querying and setting emblem associations for files.

  • fcompress: setting up and removing transparent (un)compression for files.

  • ferris-import-desktop-file, adding new ".desktop" files to the apps:// filesystem.

  • ferris-first-time-user: setting up "~/.ferris"

  • gfdl: download manager using the http and ftp filesystems (which use libcurl).

  • gfproperties: view all the lstat(2) information for a file in a GTK2 GUI. Also presents the emblem attachemnts for a file.

  • FerrisXalanTransform: like XalanTransform except some libferris functions are exported for the XSLT to use (see xsltfunctions/ for more detail).

  • ferris-capplet-auth, ferris-capplet-curl-ftp, ferris-capplet-general, ferris-capplet-index, ferris-capplet-locale, ferris-capplet-logging, ferris-capplet-version: tools for setting up libferris.

The following attributes are supported:

  • native kernel XFS EA

  • data available from lstat(2)

  • cryto hashes like md5 and sha1

  • as-xml serialization

  • schema data

  • emblem attachment metadata

  • many file system synthetic EA

  • ID3 tags in mp3/ogg files

  • jpeg images

  • png images

  • images loadable via ImageMagick

  • mpeg2 video

  • dolby ac3 information

  • djvu images

  • images loadable via imlib2

  • jasper images

  • Take a look in Ferris.cpp and Native.cpp for tryAddStateLessAttribute() for many other attributes of interest.

libferris can mount the following:

  • http

  • ftp

  • berkeley db4

  • sleepycats dbxml (libferris 1.1.11+)

  • video dvd

  • edb

  • eet

  • tdb

  • gdbm

  • ssh

  • rpm files

  • tar files

  • sysv IPC (shared memory)

  • LDAP

  • mbox

  • sockets

  • mysql

  • XML