Overview
This page complements a proposal of implementing file system operations in Lua via a virtual filesystem layer in the lua interpreter. It describes the Proof-Of-Concept implementation comprising luafs
and fsio
.
Virtualizing file system operations has several advantages:
- portability:
- the platform differences are hidden in the driver layer, Lua programs stay the same on different platforms
- the Lua interpreter sources can reduce platform dependend code
- extensibility:
- filesystems can be added without recompilation of the Lua interpreter
- generalization:
- anything which looks like a filesystem can be processed like a filesystem
reuseabilty:
- tools which work on filesystems work on anything what can be made to look like a filesystems Disadvantages:
more code:
- you need the virtual filesystem functions and the physical filesystem functions
efficiency
- an additional function call level is interposed between the Application and the filesystem itself Specific motivations to propose a virtual filesystem layer for Lua:
want to mount "remote" filesystems like http, imap, smb
- want to make Starkit like One-File Lua applications
- want a comprehensive, clean interface to file and filesystem operations in Lua
- want to port my "Baccus" archival backup system to Lua, since it seams easier to make C-extensions to Lua than to Tcl
Some Specifics of the Proposal
- path separator is '/'
- path names are Lua strings
- Unified namespace, volumes (real filesystems) are mounted at arbitrary places in the namespace
- See http://doc.cat-v.org/plan_9/4th_edition/papers/lexnames for the inspiration
- Permissions not handled here, we only operate on accessible filesystem objects.
- Authentication not handled here, can be done when setting up a volume before mounting it. The proposal also has been inspired by the Tcl Virtual File System
Proof-Of-Concept Implementation
A simplistic implementation of a virtual filesystem layer has been made which is comprised of two modules:
luafs
the virtual filesystem layer as anfs
module.fsio
a filesystem (volume) driver using onlyio
andos
library functions and the following POSIX utilities:ls
,test
,mkdir
andrmdir
. Caution: The implementation does not support union mounts, but rather features a simple mount/unmount mechanism via a single mount table withmountpoint
=>volume
entries.
The whole sample amounts to about 400 commented lines of Lua code. It has been tested under Debian Gnu Linux with the standard Lua 5.1.4 package but should be trivially adaptable to other platforms or configurations
Files
The following files are available
fs
module, the virtual file system operationsfsio
module, the sample implementation of a volume driver- A test/demo script:
test.lua
- A data file used by the test/demo script:
- The output of a sample test/demo run:
Instructions
Download all files into one directory, run test.lua
and compare with the sample session output in test.output