Feature Flags

ZFS on-disk formats were originally versioned with a single number, which increased whenever the format changed. The numbered approach was suitable when development of ZFS was driven by a single organisation.

For distributed development of OpenZFS, version numbering was unsuitable. Any change to the number would have required agreement, across all implementations, of each change to the on-disk format.

OpenZFS feature flags – an alternative to traditional version numbering – allow a uniquely named pool property for each change to the on-disk format. This approach supports:

  • format changes that are independent

  • format changes that depend on each other.

Compatibility

Where all features that are used by a pool are supported by multiple implementations of OpenZFS, the on-disk format is portable across those implementations.

Features that are exclusive when enabled should be periodically ported to all distributions.

Reference materials

ZFS Feature Flags (Christopher Siden, 2012-01, in the Internet Archive Wayback Machine) in particular: “… Legacy version numbers still exist for pool versions 1-28 …”.

zpool-features(5) man page - OpenZFS

zpool-features (5) – illumos

Feature flags implementation per OS

ZFS Feature Matrix
Feature FlagRead-Only
Compatible
OpenZFS (Linux, FreeBSD 13+)FreeBSD pre OpenZFSIllumosJoyentNetBSDNexentaOmniOS CEOpenZFS on OS X
0.6.5.110.7.130.8.62.0.4master11.4.012.1.012.2.08.4.0mastermaster9.1main4.0.5-FP5.3masterr151034r151036master1.9.21.9.31.9.4master
org.zfsonlinux:allocation_classesyesnonoyesyesyesnonoyesnoyesyesnononononoyesyesyesyesyesyesyes
com.delphix:async_destroyyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.datto:bookmark_v2nononoyesyesyesnonononoyesyesnononononoyesyesyesyesyesyesyes
com.delphix:bookmark_writtennonononoyesyesnononononononononononononononononono
com.delphix:bookmarksyesyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.nexenta:class_of_storageyesnononononononononononononoyesyesyesnonononononono
org.openzfs:device_rebuildyesnononoyesyesnononononononononononononononononono
com.delphix:device_removalnononoyesyesyesyesyesyesnoyesyesnononoyesyesyesyesyesyesyesyesyes
org.openzfs:draidnononononoyesnononononononononononononononononono
org.illumos:edonrnonoyesyesyesyesnonononoyesyesnononoyesyesyesyesyesyesyesyesyes
com.delphix:embedded_datanoyesyesyesyesyesyesyesyesnoyesyesyesyesnoyesyesyesyesyesyesyesyesyes
com.delphix:empty_bpobjyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.delphix:enabled_txgyesyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.datto:encryptionnononoyesyesyesnonononoyesyesnononononoyesyesyesyesyesyesyes
com.delphix:extensible_datasetnoyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.joyent:filesystem_limitsyesyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.delphix:hole_birthnoyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyesyesyesyesyesyesyes
org.open-zfs:large_blocksnoyesyesyesyesyesyesyesyesnoyesyesyesyesnoyesyesyesyesyesyesyesyesyes
org.zfsonlinux:large_dnodenonoyesyesyesyesnonoyesnoyesyesnononononoyesyesyesyesyesyesyes
com.delphix:livelistyesnononoyesyesnononononononononononononononononono
com.delphix:log_spacemapyesnononoyesyesnonononoyesyesnononononoyesyesyesnononono
org.illumos:lz4_compressnoyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.nexenta:meta_devicesyesnononononononononononononoyesyesyesnonononononono
com.joyent:multi_vdev_crash_dumpnonoyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.delphix:obsolete_countsyesnonoyesyesyesyesyesyesnoyesyesnononoyesyesyesyesyesyesyesyesyes
org.zfsonlinux:project_quotayesnonoyesyesyesnonononoyesyesnononononoyesyesyesyesyesyesyes
com.delphix:redacted_datasetsnonononoyesyesnononononononononononononononononono
com.delphix:redaction_bookmarksnonononoyesyesnononononononononononononononononono
com.datto:resilver_deferyesnonoyesyesyesnonononoyesyesnononononoyesyesyesyesyesyesyes
org.illumos:sha512nonoyesyesyesyesyesyesyesnoyesyesyesyesnoyesyesyesyesyesyesyesyesyes
org.illumos:skeinnonoyesyesyesyesyesyesyesnoyesyesyesyesnoyesyesyesyesyesyesyesyesyes
com.delphix:spacemap_histogramyesyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.delphix:spacemap_v2yesnonoyesyesyesyesyesyesnoyesyesnononononoyesyesyesyesyesyesyes
org.zfsonlinux:userobj_accountingyesnoyesyesyesyesnonononoyesyesnononononoyesyesyesyesyesyesyes
com.nexenta:vdev_propertiesyesnononononononononononononoyesyesyesnonononononono
com.nexenta:wbcnononononononononononononononoyesyesnonononononono
com.delphix:zpool_checkpointyesnonoyesyesyesyesyesyesnoyesyesnononononoyesyesyesyesyesyesyes
org.freebsd:zstd_compressnonononoyesyesnononononononononononononononononono

Table generates by parsing manpages for feature flags, and is entirely dependent on good, accurate documentation.
Last updated on 2021-04-06T20:38:45.749651Z using compatibility_matrix.py.