1000/1000
Hot
Most Recent
The history and implementations of ZFS covers the development of the ZFS file system. ZFS began as part of the Sun Microsystems Solaris operating system in 2001. Large parts of Solaris - including ZFS - were published under an open source license as OpenSolaris for around 5 years from 2005, before being placed under a closed source license when Oracle Corporation acquired Sun in 2009/2010. During 2005 - 2010, the open source version of ZFS was ported to Linux, Mac OS X (continued as MacZFS) and FreeBSD. In 2010, the illumos project forked a recent version of OpenSolaris, to continue its development as an open source project, including ZFS. In 2013 the co-ordination of open source ZFS moved to an umbrella organization, OpenZFS, which allowed any person or organization that wished to use the open source version of ZFS, to collaborate in developing and maintaining a single common version of ZFS. illumos remains very closely involved with OpenZFS. As of 2018, there are two main implementations of ZFS, both quite similar: Oracle's implementation, which is closed source and part of Solaris, and OpenZFS, which is widely used to provide ZFS on many unix-like operating systems.
In 1987, AT&T Corporation and Sun announced that they were collaborating on a project to merge the most popular Unix variants on the market at that time: Berkeley Software Distribution, UNIX System V, and Xenix. This became Unix System V Release 4 (SVR4).[1] The project was released under the name Solaris, which became the successor to SunOS 4 (although SunOS 4.1.x micro releases were retroactively named Solaris 1).[2]
ZFS was designed and implemented by a team at Sun led by Jeff Bonwick, Bill Moore[3] and Matthew Ahrens. It was announced on September 14, 2004,[4] but development started in 2001.[5] Source code for ZFS was integrated into the main trunk of Solaris development on October 31, 2005,[6] and released for developers as part of build 27 of OpenSolaris on November 16, 2005. In June 2006, Sun announced that ZFS was included in the mainstream 6/06 update to Solaris 10.[7]
Historically, Solaris was developed as proprietary software. Sun Microsystems was a strong proponent of open source software. In June 2005, Sun released most of the codebase under the CDDL license, and founded the OpenSolaris open-source project.[8] Sun was an early proponent of open source software, and with OpenSolaris, Sun wanted to build a developer and user community around the software. In Solaris 10 6/06 ("U2"), Sun added the ZFS file system. During the next 5 years (2006 to 2010), Sun frequently updated ZFS with new features, and ZFS was ported to Linux, Mac OS X (continued as MacZFS) and FreeBSD, under this open source license.
The name at one point was said to stand for "Zettabyte File System",[9] but by 2006 was no longer considered to be an abbreviation.[10] A ZFS file system can store up to 256 quadrillion zettabytes (ZB).
In September 2007, NetApp sued Sun claiming that ZFS infringed some of NetApp's patents on Write Anywhere File Layout. Sun counter-sued in October the same year claiming the opposite. The lawsuits were ended in 2010 with an undisclosed settlement.[11]
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.[12][13] 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.[14][15] However, the April 2016 release of Ubuntu 16.04 LTS includes CDDL-licensed ZFS on Linux[16] as a kernel module that is maintained as a separate project, outside the Linux kernel mainline, claiming license compatibility.[17][18][19]
In January 2010, Oracle Corporation acquired Sun Microsystems, and quickly discontinued the OpenSolaris distribution and the open source development model.[20][21] In August 2010, Oracle discontinued providing public updates to the source code of the Solaris kernel, effectively turning Solaris 11 back into a closed source proprietary operating system.[22]
In response to the changing landscape of Solaris and OpenSolaris, the illumos project was launched via webinar[23] on Thursday, 3 August 2010, as a community effort of some core Solaris engineers to continue developing the open source version of Solaris, and complete the open sourcing of those parts not already open sourced by Sun.[24] illumos was founded as a Foundation, the illumos Foundation, incorporated in the State of California as a 501(c)6 trade association. The original plan explicitly stated that illumos would not be a distribution or a fork. However, after Oracle announced discontinuing OpenSolaris, plans were made to fork the final version of the Solaris ON kernel allowing illumos to evolve into a kernel of its own.[25] As part of OpenSolaris, an open source version of ZFS was therefore integral within illumos.
ZFS was widely used within numerous platforms, as well as Solaris. Therefore, in 2013, the co-ordination of development work on the open source version of ZFS was passed to an umbrella project, OpenZFS. The OpenZFS framework allows any interested parties to collaboratively develop the core ZFS codebase in common, while individually maintaining any specific extra code which ZFS requires to function and integrate within their own systems.
The following is a list of open-source ZFS ports and forks:[27][28]
Old release |
Latest FOSS stable release |
Latest Proprietary stable release |
Latest Proprietary beta release |
ZFS Filesystem Version Number | Release date | Significant changes |
---|---|---|
1 | OpenSolaris Nevada[29] build 36 | First release |
2 | OpenSolaris Nevada b69 | Enhanced directory entries. In particular, directory entries now store the object type. For example, file, directory, named pipe, and so on, in addition to the object number. |
3 | OpenSolaris Nevada b77 | Support for sharing ZFS file systems over SMB. Case insensitivity support. System attribute support. Integrated anti-virus support. |
4 | OpenSolaris Nevada b114 | Properties: userquota, groupquota, userused and groupused |
5 | OpenSolaris Nevada b137 | System attributes; symlinks now their own object type |
6 | Solaris 11.1 | Multilevel file system support |
ZFS Pool Version Number | Release date | Significant changes |
---|---|---|
1 | OpenSolaris Nevada[29] b36 | First release |
2 | OpenSolaris Nevada b38 | Ditto Blocks |
3 | OpenSolaris Nevada b42 | Hot spares, double-parity RAID-Z (raidz2), improved RAID-Z accounting |
4 | OpenSolaris Nevada b62 | zpool history |
5 | OpenSolaris Nevada b62 | gzip compression for ZFS datasets |
6 | OpenSolaris Nevada b62 | "bootfs" pool property |
7 | OpenSolaris Nevada b68 | ZIL: adds the capability to specify a separate Intent Log device or devices |
8 | OpenSolaris Nevada b69 | ability to delegate zfs(1M) administrative tasks to ordinary users |
9 | OpenSolaris Nevada b77 | CIFS server support, dataset quotas |
10 | OpenSolaris Nevada b77 | Devices can be added to a storage pool as "cache devices" |
11 | OpenSolaris Nevada b94 | Improved zpool scrub / resilver performance |
12 | OpenSolaris Nevada b96 | Snapshot properties |
13 | OpenSolaris Nevada b98 | Properties: usedbysnapshots, usedbychildren, usedbyrefreservation, and usedbydataset |
14 | OpenSolaris Nevada b103 | passthrough-x aclinherit property support |
15 | OpenSolaris Nevada b114 | Properties: userquota, groupquota, usuerused and groupused; also required FS v4 |
16 | OpenSolaris Nevada b116 | STMF property support |
17 | OpenSolaris Nevada b120 | triple-parity RAID-Z |
18 | OpenSolaris Nevada b121 | ZFS snapshot holds |
19 | OpenSolaris Nevada b125 | ZFS log device removal |
20 | OpenSolaris Nevada b128 | zle compression algorithm that is needed to support the ZFS deduplication properties in ZFS pool version 21, which were released concurrently |
21 | OpenSolaris Nevada b128 | Deduplication |
22 | OpenSolaris Nevada b128 | zfs receive properties |
23 | OpenSolaris Nevada b135 | slim ZIL |
24 | OpenSolaris Nevada b137 | System attributes. Symlinks now their own object type. Also requires FS v5. |
25 | OpenSolaris Nevada b140 | Improved pool scrubbing and resilvering statistics |
26 | OpenSolaris Nevada b141 | Improved snapshot deletion performance |
27 | OpenSolaris Nevada b145 | Improved snapshot creation performance (particularly recursive snapshots) |
28 | OpenSolaris Nevada b147 | Multiple virtual device replacements |
29 | Solaris Nevada b148 | RAID-Z/mirror hybrid allocator |
30 | Solaris Nevada b149 | ZFS encryption |
31 | Solaris Nevada b150 | Improved 'zfs list' performance |
32 | Solaris Nevada b151 | One MB block support |
33 | Solaris Nevada b163 | Improved share support |
34 | Solaris 11.1 (0.5.11-0.175.1.0.0.24.2) | Sharing with inheritance |
35 | Solaris 11.2 (0.5.11-0.175.2.0.0.42.0) | Sequential resilver |
36 | Solaris 11.3 | Efficient log block allocation |
37 | Solaris 11.3 | LZ4 compression |
38 | Solaris 11.4 | xcopy with encryption |
39 | Solaris 11.4 | reduce resilver restart |
40 | Solaris 11.4 | Deduplication 2 |
41 | Solaris 11.4 | Asynchronous dataset destroy |
42 | Solaris 11.4 | Reguid: ability to change the pool guid |
43 | Solaris 11.4, Oracle ZFS Storage Simulator 8.7[30] | RAID-Z improvements and cloud device support. Vdev remove of basic, mirror and RAID-Z[1-3] vdevs, ZFS embedded/ kernelbased servers support SMB3 and NFS 4.1 |
44 | Solaris 11.4 | Device removal |
Note: The Solaris version under development by Sun since the release of Solaris 10 in 2005 was codenamed 'Nevada', and was derived from what was the OpenSolaris codebase. 'Solaris Nevada' is the codename for the next-generation Solaris OS to eventually succeed Solaris 10 and this new code was then pulled successively into new OpenSolaris 'Nevada' snapshot builds.[29] OpenSolaris is now discontinued and OpenIndiana forked from it.[31][32] A final build (b134) of OpenSolaris was published by Oracle (2010-Nov-12) as an upgrade path to Solaris 11 Express.
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.[33] 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.[34][35][36] Future on-disk format changes are enabled / disabled independently via these feature flags.