What do they say about looking gift horses in the mouth? Microsoft announced (opens in new tab) Wednesday that it's "supporting the addition of [its] exFAT technology to the Linux kernel." The company positioned that as a win for Linux users, but developers were quick to voice their displeasure.
Microsoft introduced exFAT in 2006 to improve upon existing FAT file systems with better performance, larger volume limits and other changes. Many SD cards and USB flash drives--"hundreds of millions" according to Microsoft--use exFAT. Because it's a proprietary technology, however, companies looking to support the file system with their own products have to license it from Microsoft.
Samsung released a Linux driver for exFAT under the GPL license in 2013. Microsoft's announcement marked the first time it would officially support the file system's expansion to Linux, however, which should at least theoretically improve the platform's compatibility with exFAT. Here's how the company explained why it decided to support the development of exFAT compatibility on Linux in the announcement:
"It’s important to us that the Linux community can make use of exFAT included in the Linux kernel with confidence. To this end, we will be making Microsoft’s technical specification for exFAT publicly available to facilitate development of conformant, interoperable implementations. We also support the eventual inclusion of a Linux kernel with exFAT support in a future revision of the Open Invention Network’s Linux System Definition, where, once accepted, the code will benefit from the defensive patent commitments of OIN’s 3040+ members and licensees."
Phoronix reported today that Linux developers weren't particularly enthused about what Microsoft released, with one kernel developer calling it a "pile of crap," which is exactly the kind of frankness we've come to expect from Linux developers. The primary complaint appears to be that Microsoft re-implemented much of the Linux kernel's existing FAT driver rather than building exFAT on top of that driver.
The exFAT file system specification is available now from Microsoft's website (opens in new tab). Discussion about the file system's implementation in the Linux kernel can be found here.
The primary complaint appears to be that Microsoft re-implemented much of the Linux kernel's existing FAT driver rather than building exFAT on top of that driver.
There's also technical issues involved - the code started off life as an out-of-tree driver, and it's really hard to build "out of tree" on top of an in-tree driver.
Now that the code is headed for in-tree status, there's a lot more flexibility to where to go with it. Some people want it to mount exfat only, others want something that will do fat16/fat32/exfat, and it's possible that once the code is cleaned up more, it becomes more obvious how to add the equivalent functionality to the current in-tree vfat driver.
I'm not married to any particular approach, as long as it results in a stable in-tree exfat driver. :)
(And if you think the code is ugly now, you should have seen it as I got it. I think I'm now at 1,500 lines of code heaved over the side entirely, another 3,000 or so restructured and relocated. It's gone from 28 source files down to 10. :)