##(see the SpecSpec for an explanation) '''NOTE''': This page is part of the Ubuntu Specification process. Please check the status and details in Launchpad before editing. If the spec is Approved then you should contact the Assignee, or another knowledgeable person, before making changes. ## Register at https://launchpad.net/distros/ubuntu/+specs * '''Launchpad entry''': * '''Packages affected''': == Summary == This specification aims to implement directory-level compression settings controlled by the user. == Rationale == Data consumes space on disk, and disks are of a limited size. The ability to compress data in a flexible manner allows users to reduce the size of some data, such as their `$HOME`. == Use cases == There are several. * Alice decides to compress the contents of `~/.xchat2` to condense the space used by her IRC logs. * Bob decides to compress `~/secret` to eliminate redundancy and make files encrypted by EncFSIntegration more resistant to cryptanalysis. == Scope == Our scope is individual folders owned by the user and selected for encryption. Whole `$HOME` compression is not supported. == Design == `LayerFS` will be used for compression. Control should be managed by the same user-level daemon specified in EncFSIntegration. Compressed folders should always automatic mount. Compression should always activate before encryption. Interface to Compressed Folders should be placed in the Basic properties tab of the file browser. == Implementation == See Design; this probably needs work. === Code === * Some work to add the interface in Nautilus and whatever KDE uses will have to be done. * The EncFSIntegration daemon will have to be written. == Unresolved issues == * LayerFS is not currently as robust as I'd like for this. * It does not mount in place; but rather mounts one directory onto another. This is probably due to the design of FUSE; I've requested a transparent access mechanism be added to FUSE, see [[http://thread.gmane.org/gmane.comp.file-systems.fuse.devel/3595/focus=3595|the fuse-devel mailing list]]. * It does not mount in place over existing files; rather it hangs on uncompressed files. It should instead somehow tag compressed files and transparently compress uncompressed files on modify. * I would prefer a special file interface which keeps a database at `/path/to/mount/..layerfs.meta.db` and exports `..layerfs.meta.db` as a character special device or socket. Writes to this device would be handled associated with the process (concurrent by multiple processes would not interleave). This would allow file-granularity compression, with files not explicitly compressed/uncompressed inheriting from the directory setting. * LayerFS is not currently given a proper license; I have contacted the author, it seems he may be willing to LGPL it. == BoF agenda and discussion == * LayerFS is [[http://north.one.pl/~kazik/pub/LZOlayer/]] ---- CategorySpec