Extended attributes (xattr) are a standardized, generic method for storing additional metadata along with a file (inode). Most modern UNIX filesystems support xattrs.

In general, xattrs should be used sparingly, as they are less transparent than data stored as explicit file contents; however, there are some cases where they really make sense. The Hurd's variant of ext2 presently uses some additional fields in the inode to store Hurd-specific metadata: most notable passive translator settings. As these fields are Hurd-specific, they can't be accessed by the standard methods from Linux for example, so it's not possible to fully work with a Hurd filesystem on GNU/Linux (copy, backup etc.); and also, even when on Hurd, only tools that explicitly support the Hurd-specific information can handle them.

Using extended attributes instead of custom fields for the Hurd-specific information would be very helpful.

The most important goal of this project thus is to make the Hurd ext2fs server able to store and read the Hurd-specific information with extended attributes instead of the custom fields, so it become accessible from other systems. Being able to access the information through the standard xattr API instead of Hurd-specific calls is also desirable. (And in turn requires implementing the generic xattr API first, which can be useful for other purposes as well.)

Completing this project will require digging into some parts of the Hurd, but it should be quite doable without previous Hurd experience. Some experience with xattrs might help a bit, but shouldn't be really necessary either.

Some previous work on xattr support is available, and might serve as a starting point.

Possible mentors: Justus Winter (teythoon), Samuel Thibault (youpi)

Exercise: Implement support for different inode sizes (other than 128 bytes) in Hurd's ext2fs.