Robust support for metadata in file operations

Registered by Mechanical snail on 2010-09-19

Currently, many tools cannot be relied upon to preserve file system metadata (such as timestamps, permissions, and xattrs). For example, many FUSE file system drivers only save timestamps to 1 s resolution, even when both FUSE and the file system itself support nanosecond timestamps. Metadata support is generally poorly documented, so for applications that rely on the metadata, careful experimentation is now needed to ensure it is preserved. This blueprint will provide guidelines to ensure that all programs provide end-to-end support for (and sensible defaults for) preserving metadata when performing file operations across filesystems.

Blueprint information

Status:
Not started
Approver:
None
Priority:
Undefined
Drafter:
None
Direction:
Needs approval
Assignee:
None
Definition:
Discussion
Series goal:
Proposed for natty
Implementation:
Not started
Milestone target:
milestone icon ubuntu-11.04

Whiteboard

Some tools for checking:
* jacksum (http://www.jonelo.de/java/jacksum/#History) (somewhat out of date)
* ls --full-time shows times in full nanosecond resolution
* mtree, from FreeBSD

Sensible defaults: programs should preserve metadata by default, unless there is a compelling reason not to. Possible changes to make:
cp could have --preserve or --preserve=all by default (but since it's such a basic utility, could be scripts relying on current behavior?) (what about mv across filesystems?)
optipng: -preserve by default
jpegoptim: --preserve by default
firefox: downloads' timestamps saved from the HTTP header, like wget does
Many archiving programs don't save much metadata. Often this is an underlying limitation of the file format though, so often hard to change.

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.