OpenZFS


OpenZFS is an open-source storage platform that encompasses the functionality of traditional filesystems and volume manager. It includes protection against data corruption, support for high storage capacities, efficient data compression, snapshots and copy-on-write clones, continuous integrity checking and automatic repair, remote replication with ZFS send and receive, and RAID-Z.
The eponymous OpenZFS project brings together developers from the illumos, Linux, FreeBSD and macOS platforms, and a wide range of companies - both online and at the annual OpenZFS Developer Summit. High-level goals of the project include raising awareness of the quality, utility and availability of open-source implementations of ZFS, encouraging open communication about ongoing efforts toward improving open-source variants of ZFS, and ensuring consistent reliability, functionality and performance of all distributions of ZFS.
Illumos, which is derived from OpenSolaris, provides upstream source code for other ZFS implementations. While there are various differences between the illumos ZFS codebase and other open-source implementations of ZFS, OpenZFS is strategically reducing existing platform-related differences in order to ease sharing of the source code.
Founding members of OpenZFS include Matt Ahrens, one of the main architects of ZFS.
The OpenZFS project is an open source derivative of the Oracle ZFS project.
, OpenZFS is gradually being pivoted to be based upon ZFS on Linux, which has developed faster than other variants of OpenZFS and contains new features not yet ported to those other versions. The merged code-base will include a number of new features and performance enhancements, and is proposed to be known as OpenZFS 2.0.

History

The ZFS file system was originally developed by Sun Microsystems for the Solaris operating system. The ZFS source code was released in 2005 under the Common Development and Distribution License as part of the OpenSolaris operating system, and it was later ported to other operating systems and environments.
As the FSF claimed a CDDL and GPL legal incompatibility in 2005, Sun's implementation of the ZFS file system wasn't used as a basis for the development of a Linux kernel module; it wasn't merged into the Linux kernel mainline, and Linux distributions did not include it as a precompiled kernel module. As a workaround, FUSE, a framework that allows file systems to run in userspace, was used on Linux as a separation layer for which the licensing issues are not in effect, although with a set of its own issues that include a performance penalty. However, the April 2016 release of Ubuntu 16.04 LTS includes CDDL-licensed ZFS on Linux as a kernel module that is maintained as a separate project, outside the Linux kernel mainline, claiming license compatibility.
The following is a list of key events to the development of ZFS and its various implementations, leading to the creation of OpenZFS as an umbrella project:
As the FSF claimed a CDDL and GPL legal incompatibility in 2005, Sun's implementation of the ZFS file system wasn't used as a basis for the development of a Linux kernel module, it wasn't merged into the Linux kernel mainline, and Linux distributions did not include it as a precompiled kernel module. As a workaround, FUSE, a framework that allows file systems to run in userspace, was used on Linux as a separation layer for which the licensing issues are not in effect, although with a set of its own issues that include performance penalty. However, the April 2016 release of Ubuntu 16.04 LTS includes CDDL-licensed ZFS on Linux as a kernel module that is maintained as a separate project, outside the Linux kernel mainline, claiming license compatibility.

Apple/MacOS

The first indication of Apple Inc.'s interest in ZFS was an April 2006 post on the opensolaris.org zfs-discuss mailing list where an Apple employee mentioned being interested in porting ZFS to their Mac OS X operating system. In the release version of Mac OS X 10.5, ZFS was available in read-only mode from the command line, which lacks the possibility to create zpools or write to them. Before the 10.5 release, Apple released the "ZFS Beta Seed v1.1", which allowed read-write access and the creation of zpools; however, the installer for the "ZFS Beta Seed v1.1" has been reported to only work on version 10.5.0, and has not been updated for version 10.5.1 and above. In August 2007, Apple opened a ZFS project on their Mac OS Forge web site. On that site, Apple provided the source code and binaries of their port of ZFS which includes read-write access, but there was no installer available until a third-party developer created one. In October 2009, Apple announced a shutdown of the ZFS project on Mac OS Forge. That is to say that their own hosting and involvement in ZFS was summarily discontinued. No explanation was given, just the following statement: "The ZFS project has been discontinued. The mailing list and repository will also be removed shortly." Apple would eventually release the legally required, CDDL-derived, portion of the source code of their final public beta of ZFS, code named "10a286". Complete ZFS support was once advertised as a feature of Snow Leopard Server. However, by the time the operating system was released, all references to this feature had been silently removed from its features page. Apple has not commented regarding the omission.
Apple's "10a286" source code release, and versions of the previously released source and binaries, have been preserved and new development has been adopted by a group of enthusiasts. The MacZFS project acted quickly to mirror the public archives of Apple's project before the materials would have disappeared from the internet, and then to resume its development elsewhere. The MacZFS community has curated and matured the project, supporting ZFS for all Mac OS releases since 10.5. The project has an active . As of July 2012, MacZFS implements zpool version 8 and ZFS version 2, from the October 2008 release of Solaris. Additional historical information and commentary can be found on the MacZFS web site and FAQ.
The 17 September 2013 launch of OpenZFS included ZFS-OSX, which will become a new version of MacZFS, as the distribution for Darwin.

Implementations

Solaris

OpenSolaris

2008.05, 2008.11 and 2009.06 use ZFS as their default filesystem. There are over a dozen 3rd-party distributions.

OpenIndiana

uses OpenZFS with feature flags as implemented in Illumos. ZFS version 28 used up to version 151a3.
By upgrading from OpenSolaris snv_134 to both OpenIndiana and Solaris 11 Express, one also has the ability to upgrade and separately boot Solaris 11 Express on the same ZFS pool, but one should not install Solaris 11 Express first because of ZFS incompatibilities introduced by Oracle past ZFS version 28.

BSD

macOS

OpenZFS on OSX is an implementation of ZFS for macOS. O3X is under active development, with close relation to ZFS on Linux and illumos' ZFS implementation, while maintaining feature flag compatibility with ZFS on Linux. O3X implements zpool version 5000, and includes the Solaris Porting Layer originally written for MacZFS, which has been further enhanced to include a memory management layer based on the illumos kmem and vmem allocators. O3X is fully featured, supporting LZ4 compression, deduplication, ARC, L2ARC, and SLOG.
MacZFS is free software providing support for ZFS on macOS. The stable legacy branch provides up to ZFS pool version 8 and ZFS filesystem version 2. The development branch, based on ZFS on Linux and OpenZFS, provides updated ZFS functionality, such as up to ZFS zpool version 5000 and feature flags.
A proprietary implementation of ZFS was available at no cost from GreenBytes, Inc., implementing up to ZFS file system version 5 and ZFS pool version 28. Zevo offered a limited ZFS feature set, pending further commercial development; it was sold to Oracle in 2014, with unknown future plans.

DragonFlyBSD

Edward O'Callaghan started the initial port of ZFS to DragonFlyBSD.

NetBSD

The NetBSD ZFS port was started as a part of the 2007 Google Summer of Code and in August 2009, the code was merged into NetBSD's source tree.

FreeBSD

Paweł Jakub Dawidek ported ZFS to FreeBSD, and it has been part of FreeBSD since version 7.0. This includes zfsboot, which allows booting FreeBSD directly from a ZFS volume.
FreeBSD's ZFS implementation is fully functional; the only missing features are kernel CIFS server and iSCSI, but the latter can be added using externally available packages. Samba can be used to provide a userspace CIFS server.
FreeBSD 7-STABLE uses zpool version 6.
FreeBSD 8 includes a much-updated implementation of ZFS, and zpool version 13 is supported. zpool version 14 support was added to the 8-STABLE branch on January 11, 2010, and is included in FreeBSD release 8.1. zpool version 15 is supported in release 8.2.
The 8-STABLE branch gained support for zpool version v28 and zfs version 5 in early June 2011.
These changes were released mid-April 2012 with FreeBSD 8.3.
FreeBSD 9.0-RELEASE uses ZFS Pool version 28.
FreeBSD 9.2-RELEASE is the first FreeBSD version to use the new "feature flags" based implementation thus Pool version 5000.

MidnightBSD

, a desktop operating system derived from FreeBSD, supports ZFS storage pool version 6 as of 0.3-RELEASE. This was derived from code included in FreeBSD 7.0-RELEASE. An update to storage pool 28 is in progress in 0.4-CURRENT and based on 9-STABLE sources around FreeBSD 9.1-RELEASE code.

TrueOS (formerly PC-BSD)

is a desktop-oriented distribution of FreeBSD, which inherits its ZFS support.

FreeNAS

, an embedded open source network-attached storage distribution based on FreeBSD, has the same ZFS support as FreeBSD and PC-BSD.

ZFS Guru

, an embedded open source network-attached storage distribution based on FreeBSD.

pfSense

, an open source BSD based router, supports ZFS, including installation and booting to ZFS pools, as of version 2.4.

XigmaNAS

, an embedded open source network-attached storage distribution based on FreeBSD, has the same ZFS support as FreeBSD, ZFS storage pool version 5000. This project is a continuation of FreeNAS 7 series project.

Debian GNU/kFreeBSD

Being based on the FreeBSD kernel, Debian GNU/kFreeBSD has ZFS support from the kernel. However, additional userland tools are required, while it is possible to have ZFS as root or /boot file system in which case required GRUB configuration is performed by the Debian installer since the Wheezy release.
As of January 31, 2013, the ZPool version available is 14 for the Squeeze release, and 28 for the Wheezy-9 release.

Linux

Although the ZFS filesystem supports Linux-based operating systems, difficulties arise for Linux distribution maintainers wishing to provide native support for ZFS in their products due to potential legal incompatibilities between the CDDL license used by the ZFS code, and the GPL license used by the Linux kernel. To enable ZFS support within Linux, a loadable kernel module containing the CDDL-licensed ZFS code must be compiled and loaded into the kernel. According to the Free Software Foundation, the wording of the GPL license legally prohibits redistribution of the resulting product as a derivative work, though this viewpoint has caused some controversy.

ZFS on FUSE

One potential workaround to licensing incompatibility was trialed in 2006, with an experimental port of the ZFS code to Linux's FUSE system. The filesystem ran entirely in userspace instead of being integrated into the Linux kernel, and was therefore not considered a derivative work of the kernel. This approach was functional, but suffered from significant performance penalties when compared with integrating the filesystem as a native kernel module running in kernel space. As of 2016, the ZFS on FUSE project appears to be defunct.

Native ZFS on Linux

A native port of ZFS for Linux produced by the Lawrence Livermore National Laboratory was released in March 2013, following these key events:
, ZFS on Linux uses the OpenZFS pool version number 5000, which indicates that the features it supports are defined via feature flags. This pool version is an unchanging number that is expected to never conflict with version numbers given by Oracle.

KQ InfoTech

Another native port for Linux was developed by KQ InfoTech in 2010. This port used the zvol implementation from the Lawrence Livermore National Laboratory as a starting point. A release supporting zpool v28 was announced in January 2011. In April 2011, KQ Infotech was acquired by sTec, Inc., and their work on ZFS ceased. Source code of this port can be found on GitHub.
The work of KQ InfoTech was ultimately integrated into the LLNL's native port of ZFS for Linux.

Ubuntu integration

The question of the CDDL license's compatibility with the GPL license resurfaced in 2015, when the Linux distribution Ubuntu announced that it intended to make precompiled OpenZFS binary kernel modules available to end-users directly from the distribution's official package repositories. In 2016, Ubuntu announced that a legal review resulted in the conclusion that providing support for ZFS via a binary kernel module was not in violation of the provisions of the GPL license. Others, such as the Software Freedom Law Center followed Ubuntu's conclusion, while the FSF and SFC reiterated their opposing view.
Ubuntu 16.04 LTS, released on April 21, 2016, allows the user to install the OpenZFS binary packages directly from the Ubuntu software repositories., no legal challenge has been brought against Canonical regarding the distribution of these packages.
As of 2019, Ubuntu supports experimental installation of ZFS as a root filesystem, starting with the 19.10 release, to support coexistence of a nearly pure ZFS OS with GRUB and other operating systems on the same disk.

Microsoft Windows

A port of open source ZFS was attempted in 2010 but after a hiatus of over one year development ceased in 2012. In October 2017 a new port of OpenZFS was announced by Jörgen Lundman at OpenZFS Developer Summit.

Releases and feature histories

Within illumos and (from 2013) OpenZFS

The following is a list of open-source ZFS ports and forks:
With ZFS in Oracle Solaris: as new features are introduced, the version numbers of the pool and file system are incremented to designate the format and features available. Features that are available in specific file system versions require a specific pool version.
Distributed development of OpenZFS involves feature flags and pool version 5000, an unchanging number that is expected to never conflict with version numbers given by Oracle. Legacy version numbers still exist for pool versions 1–28, implied by the version 5000. Illumos uses pool version 5000 for this purpose. Future on-disk format changes are enabled / disabled independently via
feature flags.

Version history

ZFS Pool Version NumberRelease dateSignificant changes
OpenZFSUnchanging pool version to signify that the pool indicates new features after pool version 28 using ZFS feature flags rather than by incrementing the pool version

Pool versions and feature flags

Originally, version numbers of the pool and file system were incremented as new features were introduced, in order to designate the on-disk file system format and available features. This worked well when a single entity controlled the development of ZFS, and this versioning scheme is still in use with the ZFS in Oracle Solaris.
In a more distributed development model, having a single version number is far from ideal as all implementations of OpenZFS would need to agree on all changes to the on-disk file system format. The solution selected by OpenZFS was to introduce feature flags as a new versioning system that tags on-disk format changes with unique names, and supports both completely independent format changes and format changes that depend on each other. A pool can be moved and used between OpenZFS implementations as long as all feature flags in use by the pool are supported by both implementations.
In OpenZFS, the pool version is permanently set to 5000, signifying that the pool indicates new features by setting or unsetting ZFS feature flags rather than by incrementing the pool version. The number 5000 was chosen because it is expected to never conflict with version numbers given by Oracle. Legacy version numbers still exist for pool versions 1–28. Future on-disk format changes are enabled / disabled independently via these feature flags.
Legacy version numbers still exist for pool versions 1–28, and are implied by the pool version 5000; the initial proposal was to use 1000 as the pool version. Future on-disk format changes are enabled and disabled independently via feature flags.
Feature flags are exposed as pool properties, following these naming scheme rules:
For example, is a valid property name, and it could be shortened to.
Each pool feature can be in either disabled, enabled, or active state. Disabled features are those that will not be used, and no on-disk format changes will be made; as a result, such features are backward-compatible. Enabled features are those that will be used, no on-disk format changes have been made yet, but the software may make the changes at any time; such features are still backward-compatible. Active features are those that have made backward-incompatible on-disk format changes to the pool.
When any pool feature is enabled, legacy version of the pool is automatically upgraded to 5000 and any other prerequisite features are also enabled. By default, new pools are created with all supported features enabled. In general, state of a feature can be changed from active back to enabled, undoing that way performed on-disk format changes and making the pool compatible again with an older OpenZFS implementation; however, for some features that might not be possible.
On-disk format changes can be associated with either features for write or features for read. The former are the features that an OpenZFS implementation must support to be capable of writing to the pool, while supporting such features is not mandatory for opening the pool in read-only mode. The latter are the features that an OpenZFS implementation must support to be able to read from the pool or to just open it, because opening a pool is not possible without actually reading from it.
For example, feature adds a new on-disk data structure to keep track of freed datasets, but an OpenZFS implementation does not need to know about this data structure to access the pool in read-only mode. Additionally, writing to a pool that has some features in active state is not possible by an OpenZFS implementation that does not support the same features.
A list of feature flags and which operating systems support them is available from the Open-ZFS.org Web site

OpenZFS 2.0

Historically, OpenZFS has been implemented as a core ZFS code, with each operating system's team adapting it to fit into their projects. This led in some cases to feature stagnation and divergence of features and command lines, as different operating systems developed divergent features and bug fixes, often for a single platform rather than across all platforms. Over time, new feature development shifted from Illumos to Linux. These new features and fixes then had to be back-ported to Illumos before they could be re-ported for FreeBSD. But this was difficult because the Linux version also included many smaller changes, which were hard to disentangle.
In 2018, it was agreed that OpenZFS development would be overhauled to remedy these issues. Rather than try to import all the Linux changes to other platforms piecemeal, the entire Linux ZFS code would be 'pivoted' as a whole, with other platforms being based on the more actively developed Linux version. A wide range of ported and new features, including many long-desired enhancements, would also be rolled out or ported across platforms, and future changes would be discussed across platforms before being implemented. The plans included appropriate porting layers to prevent Linux, GPL or Linux-KPI shim code from being introduced to other platform kernels.
The features in progress or ported for OpenZFS 2.0 is lengthy, and includes: