=== Named attribute support (Solaris style extended attributes)

Contact: Rick Macklem <rmacklem@FreeBSD.org>

Named attributes is the NFSv4 term for what is also known as Solaris style extended attributes.
Since ZFS has its origins in Solaris, the wiring for these exists in OpenZFS.
This little project consists of connecting that wiring up.
This is not intended to replace the extended attribute support already in FreeBSD.
It provides an alternate mechanism for manipulating extended attributes that will be supported for ZFS and NFSv4.
There are a few reasons I think this could be useful (as indicated via email discussion).
This mechanism allows for extended attributes as large as any regular file, which can be partially updated.
Some NFSv4 clients, such as MacOS and Windows, can use these extended attributes but not the FreeBSD/Linux style ones.
(I think MacOS calls these extended attributes fork files and Windows calls them alternate data streams.)
There is software, such as bash, that know how to manipulate these extended attributes.

The fundamental difference is that this mechanism provides a directory that is not in the file system's namespace, but is associated with a file object.
This named attribute directory can then be read via man:readdir[3] to get the list of extended attributes, which are really just regular files.
These extended attributes are then read/written like any regular file.

The top level system call interface is man:open[2]/man:openat[2] with the new O_NAMEDATTR flag (called O_XATTR on Solaris).

Most of the work has been committed to FreeBSD's main for FreeBSD 15.
Once the ZFS patch makes it through review and gets pulled into OpenZFS, the ZFS and NFSv4 support should work.
There are also a couple of manual pages currently under review in phabricator.

The main thing left to do is update libarchive/tar so that large extended attributes can be archived/retrieved.
(The current FreeBSD extended attribute mechanism is supported by libarchive, but will have size constraints.)
