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(7) 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.72.1.162.2.72.3.0master12.2.0mastermaster10.19.44.0.5-FPmasterr151050r151052master2.2.22.2.32.3.0rc1main
org.zfsonlinux:allocation_classesyesnonoyesyesyesyesyesyesyesyesyesnonononoyesyesyesyesyesyesyes
com.delphix:async_destroyyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
org.openzfs:blake3nonononononoyesyesyesnonononononononononoyesyesyesyes
com.fudosecurity:block_cloningyesnononononoyesyesyesnonononononononononoyesyesyesyes
com.datto:bookmark_v2nononoyesyesyesyesyesyesnoyesyesnonononoyesyesyesyesyesyesyes
com.delphix:bookmark_writtennonononoyesyesyesyesyesnonononononononononoyesyesyesyes
com.delphix:bookmarksyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.nexenta:class_of_storageyesnononononononononononononoyesyesnonononononono
org.openzfs:device_rebuildyesnononoyesyesyesyesyesnonononononononononoyesyesyesyes
com.delphix:device_removalnononoyesyesyesyesyesyesyesyesyesnononoyesyesyesyesyesyesyesyes
org.openzfs:draidnononononoyesyesyesyesnonononononononononoyesyesyesyes
org.illumos:edonrnoyes1yes1yes1yes1yes1yes1yes1yesnoyesyesnononoyesyesyesyesyesyesyesyes
com.delphix:embedded_datanoyesyesyesyesyesyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyes
com.delphix:empty_bpobjyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.delphix:enabled_txgyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.datto:encryptionnononoyesyesyesyesyesyesnoyesyesnonononoyesyesyesyesyesyesyes
com.delphix:extensible_datasetnoyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.klarasystems:fast_dedupyesnonononononoyesyesnonononononononononononoyesyes
com.joyent:filesystem_limitsyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.delphix:head_errlognonononononoyesyesyesnonononononononononoyesyesyesyes
com.delphix:hole_birthnoyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
org.open-zfs:large_blocksnoyesyesyesyesyesyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyes
org.zfsonlinux:large_dnodenonoyesyesyesyesyesyesyesyesyesyesnonononoyesyesyesyesyesyesyes
com.klarasystems:large_microzapyesnonononononoyesyesnonononononononononononoyesyes
com.delphix:livelistyesnononoyesyesyesyesyesnonononononononononoyesyesyesyes
com.delphix:log_spacemapyesnononoyesyesyesyesyesnoyesyesnonononoyesyesyesyesyesyesyes
org.zfsonlinux:longnamenononononononoyesyesnonononononononononononoyesyes
org.illumos:lz4_compressnoyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.nexenta:meta_devicesyesnononononononononononononoyesyesnonononononono
com.joyent:multi_vdev_crash_dumpnonoyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.delphix:obsolete_countsyesnonoyesyesyesyesyesyesyesyesyesnononoyesyesyesyesyesyesyesyes
org.zfsonlinux:project_quotayesnonoyesyesyesyesyesyesnoyesyesnonononoyesyesyesyesyesyesyes
org.openzfs:raidz_expansionnononononononoyesyesnonononononononononoyesyesyesyes
com.delphix:redacted_datasetsnonononoyesyesyesyesyesnonononononononononoyesyesyesyes
com.delphix:redaction_bookmarksnonononoyesyesyesyesyesnonononononononononoyesyesyesyes
com.delphix:redaction_list_spillnononononononoyesyesnonononononononononoyesyesyesyes
com.datto:resilver_deferyesnonoyesyesyesyesyesyesnoyesyesnonononoyesyesyesyesyesyesyes
org.illumos:sha512nonoyesyesyesyesyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyes
org.illumos:skeinnonoyesyesyesyesyesyesyesyesyesyesyesyesnoyesyesyesyesyesyesyesyes
com.delphix:spacemap_histogramyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes
com.delphix:spacemap_v2yesnonoyesyesyesyesyesyesyesyesyesnonononoyesyesyesyesyesyesyes
org.zfsonlinux:userobj_accountingyesnoyesyesyesyesyesyesyesnoyesyesnonononoyesyesyesyesyesyesyes
com.nexenta:vdev_propertiesyesnononononononononononononoyesyesnonononononono
com.klarasystems:vdev_zaps_v2nonononononoyesyesyesnonononononononononoyesyesyesyes
com.nexenta:wbcnononononononononononononononoyesnonononononono
org.openzfs:zilsaxattryesnononononoyesyesyesnoyesyesnonononoyesyesyesyesyesyesyes
com.delphix:zpool_checkpointyesnonoyesyesyesyesyesyesyesyesyesnonononoyesyesyesyesyesyesyes
org.freebsd:zstd_compressnonononoyesyesyesyesyesnonononononononononoyesyesyesyes

Table generates by parsing manpages for feature flags, and is entirely dependent on good, accurate documentation.
Last updated on 2025-03-05T15:27:10.045816Z using compatibility_matrix.py.