There's clearly plenty of stuff broken in Firefox 3, and the "fsync seemed cheap because my OS
doesn't actually implement it /at all/" thing has beaten them up worse than they're admitting.
Here's a trivial example from the beta 5 browser in front of me. I hit "Zoom in" and it blocks
on a disk write. Hit "Zoom out" and it blocks again. In, out, in out, in, in, out out, each
time the disk blocks. Somehow, this tiny change in visual state got such a priority inside
Firefox that it needs not just to be written to permanent storage for future reference, but
actively forced to disk as an urgent priority.
The "cool feature" that's being used over and over to justify the need for yet another
database inside the Mozilla engine is that when I type a partial URL, instead of completing
the URL Firefox now needlessly searches my bookmarks, the titles of every page I've ever read,
and any other data it can get its hands on, so that it can offer ridiculous suggestions, e.g.
Previously typing L offered me various LWN URLs I'd recently visited, a Livejournal page, and
a few other things beginning with L. But now, thanks to Firefox 3's new database, I'm offered
"Garfield vs Garfield" and "JWZ Mixtape on Blogspot" because I've visited those more recently
and they have an L in them somewhere. Yes, it is that stupid.
About a dozen new hidden about:config options were introduced in the creation of this feature,
not a single one of which restores the old, well loved functionality. I've yet to decide
whether I should learn to put up with this (whereupon core Firefox devs will declare it's a
"success" even though many of their users hate it) or add to the growing numbers who've
installed a Firefox extensions solely to put it back how it was....
For most of the data the Firefox developers are offering a false dilemma. They suggest that
the alternatives are using fsync() or giving up all data integrity. In fact this applies only
because they wanted to use database structures. If you're willing to write a log structure
instead of building a database, you lose nothing. If you write both, you lose nothing, avoid
fsync() and can restore when, inevitably, the database corrupts itself without any help from
the OS or the power company.