Employees of Lawrence Livermore National Laboratory have ported Sun’s/Oracle’s ZFS natively to Linux. Linux already had a ZFS port in userspace via FUSE, since license incompatibilities between the CDDL and GPL prevent ZFS from becoming part of the Linux kernel. This project solves the licensing issue by distributing ZFS as a separate kernel module users will have to download and build for themselves.
I’m assuming most of us are aware of the licensing issues when it comes to the CDDL and the GPL. ZFS is an awesome piece of work, but because of this, it was never ported to the Linux kernel – at least, not as part of the actual kernel. ZFS has been available as a userspace implementation via FUSE for a while now.
Main developer Brian Behlendorf has also stated that the Lawrence Livermore National Laboratory has repeatedly urged Oracle to do something about the licensing situation so that ZFS can become a part of the kernel. “We have been working on this for some time now and have been strongly urging Sun/Oracle to make a change to the licensing,” he explains, “I’m sorry to say we have not yet had any luck.”
There’s still some major work to be done, so this is not production-ready code. The ZFS Posix Layer has not been implemented yet, therefore mounting file systems is not yet possible; direct database access, however, is. Supposedly, KQ Infotech is working on this, but it has been rather quiet around those parts for a while now.
“Currently in the ZFS for Linux port the only interface available from user space is the zvol,” the project’s website reads, “The zvol allows you to create a virtual block device dataset in a zfs storage pool. While this may not immediately seem like a big deal it does open up some interesting possibilities.”
As for the ZFS FUSE implementation, Behlendorf hopes that they can share the same codebase. “In the long term I would love to support both a native in-kernel posix layer and a fuse based posix layer,” he explains, “The way the code is structured you actually build the same ZFS code once in the kernel as a set of modules and a second time as a set of shared libraries. The in-kernel version is used by Lustre, the ZVOL, and will eventually be used by the native posix layer.”
This sounds like good news, but a lot of work still needs to be done. By the way, I hope I got all the details right on this one – this is hardly my field of expertise. Feel free to correct me.