Way back in 1991, Avadis Tevanian
wrote a 'file system exerciser'. It stayed hidden away within NeXT for many years, until it resurfaced again in 1998,
after being rewritten by Conrad Minshall from Apple. It still remained somewhat
unknown, until 2001, a decade after its original inception, Jordan Hubbard
announced on freebsd-hackers a new tool called 'fsx', which
found major NFS bugs in FreeBSD.
At the time I was working for SuSE, and didn't waste much time before I started
experimenting with this on Linux. The 'porting' effort was trivial, a few
missing #include's & defines iirc. Needless to say, it broke numerous Linux
filesystems then, and even today, it occasionally turns up something
Whilst it's an awesome tool, Apple really kind of dropped the ball on this
project imo. I mailed back my small diffs to Conrad, and he integrated them,
however there was no central place to download fsx. Everyone in the Linux
community started going to my website to grab it. What happened next is
something of a opensource disaster.
A copy ended up in the ext3tools,
which gained O_DIRECT & AIO support. The XFS folks decided they liked it, and improved on it further, and
stuck their variant in their xfstests
CVS. The Samba folks didn't want to be left out of the fun, they snagged a copy, made some changes,
and stuck it in with their junkcode.
Finally, wouldn't it have been awesome if The Linux Test Project
folks rolled up their own variant in their test-the-world katamari's ? Well, they did.
Meanwhile, back at the ranch in BSD-land.. The FreeBSD folks (Matt Dillon in
particular) were going nutso fixing up NFS bugs left and right, and eventually
a copy of fsx ended up
in their regression testsuite. This got regularly synced
with Apple's sources, and also got a few other changes. A while later, Matt
gets bored, goes off and starts his DragonFly thing. Clearly every Unix needs
it's own fsx variant (I was surprised to not find a openbsd/netbsd variant),
and so it came to be.
Dfly's changes seem to be limited to adding a segfault trap handler though.
I spent some time, and gathered up all these things (thankfully all single .c file's except
for the ext3 variant which needs a header) with a view towards trying to unify
them into 'the one true fsx'. After a half hour or so, I ran out of energy. The
trivial diffs are easily ported, but there's a ton of changes that seem to have
been done with little thought towards portability. Maybe I'll revisit it at
The really sad part is what got me down this path in the first place was the
fact that I was running the original first version to run on Linux, and it was
pointed out tonight that it dies horribly if run on an architecture with
something other than 4KB pages. Ie, it died horribly on PPC64. This is sad,
because it was fixed in one of the later flavours, but with so many variants
based on the original, this is busted on most of the copies out there.
There's also some fun with the license. When Conrad posted the original, it had no
license. This is the one lots of people forked from. Subsequent updates came
under various versions of the APSL. What a mess.
FWIW, I updated the 'reference' copy of fsx-linux on my webserver (I use the
word reference loosely, it was linked to from many Linux websites, but is
in no means canonical), so at least people will stop downloading the ancient
version. For my sins however, I've created yet another fork by fixing up some
compiler warnings. Sigh.
Update: I found a newer version from Apple from circa 2009 on the macosforge site.
That site seems to now be on autopilot, with no new commits to the fs tools.
The svn/git servers stopped responding a while ago.
Who knows how much longer the archives will be around. Just in case, I put
a copy of the last public version of fsx sent there here.