18 April 2010

Living with Firefox, 2004-2010

Well, it’s been a mostly enjoyable 5 or so years, but I’ve just ditched Firefox.

Back in the mid 90s I heard rumors from Netscape people that their browser code was a barely maintainable mess. Apparently jwz didn’t believe in object-orientation, threads, or unit tests. Still, he thinks the code was fine until Collabra employees got their hands on it, and tried to turn the browser into a groupware suite.

Whatever the cause, by 1998 there was no overlooking that Netscape’s browser was slow, bloated, and riddled with bugs. I was one of the people calling for a fast, lean browser to replace the increasingly cumbersome Mozilla. I referred to the hypothetical product as Mozuki, others called it Lesszilla. In the mean time, I switched to Internet Explorer, which on the Mac was pretty good and more standards compliant than Netscape’s offering. So did most other people.

Unknown to me at the time, Netscape accepted that their code was an unmaintainable mess, and threw most of it away. They spent five long years developing a new lightweight browser mostly from scratch. In 2003, Mozilla officially abandoned the old Mozilla Suite codebase, in favor of the new Firefox browser. The following year, Firefox 1.0 was released.

In the meantime, Microsoft had won the browser wars, and became the browser for 95% of web users. Mission accomplished, they sat back and did nothing to improve IE, and web standards stagnated.

Then Firefox 1.0 appeared. It was lean. It was fast. It followed newer web standards better than IE. It was pretty awesome for a 1.0 release, and most of us early adopters switched to it immediately. Firefox 2 and 3 continued to improve on it, and the extensions mechanism allowed all kinds of interesting innovations. Firefox started to win back browser market share from Internet Explorer, and Microsoft were forced to start improving their browser again. (Though not on the Mac; they’d abandoned that platform after Apple shipped Safari.)

Why do I briefly repeat this history? Because as the saying goes, studying history helps us to recognize our mistakes when we repeat them.

A funny thing happened during the Firefox development process. They made the browser UI single-threaded, with a single-threaded JavaScript engine and a single-threaded page renderer. Instead of using native controls, they once again implemented an entire UI rendering engine and XML-based widget toolkit. Although jwz was gone, his design philosophy lived on. So heavy pages could make the UI less than responsive, and one bad web page could lock up the entire browser, or even crash it.

Then with Firefox 3, once again the decision was made to forget about the boring business of building a browser that didn’t lock up or crash, and start building new and exciting things like an address book, a spelling checker, a second theme engine (because apparently one wasn’t enough), and built-in audio and video codecs for file formats nobody uses. They could have just called the similar functionality provided by every OS, but instead it all became part of Firefox’s ever-growing footprint.

In the mean time, hackers were making use of JavaScript to install malware distributed via major online ad networks, and major web sites had started using cookies to pass user data on to advertisers. People concerned about security and privacy began running NoScript and CookieSafe, or similar extensions, as a matter of course.

By the time you had Firefox, NoScript, AdBlock, CookieSafe, FlashBlock, Web Developer, Firebug and GreaseMonkey installed, you had a pretty good browser for web development. You also had a huge heap of code from multiple sources that would crash several times a day, in my experience. Firefox was no longer working for me, and seemed to be getting worse, not better. I tried asking if at least basic script and cookie security could be made part of the core Firefox product, but the developers were uninterested.

And then Google Chrome appeared. It was based on the same WebKit engine built by the KDE team, with contributions from Apple. It was blindingly fast and supported web standards. It was stable, and it ran each tab as a separate process, so that if one page caused a crash you only lost that tab–the rest of the browser kept running.

That’s not all. As of the latest release, Chrome has the equivalent of NoScript and CookieSafe built in. You can turn off scripting and cookies by default, then turn them on only for sites you trust. When you hit a site that tries to set cookies or run scripts but is denied, you get icons in the address bar that you can click, to go to the preferences and adjust its permissions.

Better still for me, Chrome has a complete set of web developer tools built in–a DOM explorer, JavaScript debugger and command line, CSS browser, all the things I had to install as (often problematic) add-ons in Firefox. I never quite got to grips with Firebug; maybe it clashed with NoScript, but I couldn’t seem to get the debugger to work. The Chrome debugger just works.

In fact, I was basically happy with just Chrome’s built-in functionality, until an Engadget ad for Tivo blasted unasked-for rock music at me. (I hadn’t moused over it or anything.) At that point, I gave in and installed AdBlock for Chrome. Advertisers are their own worst enemies.

So, goodbye Firefox. I’m sorry to do it, really I am. I was never a fan of Netscape Navigator, but Firefox, you were a good friend. I feel like I should take you out back and ruffle your head one last time before I lift up the shotgun and put you out of my misery. Don’t worry, I’ll still dig you up every week or two for compatibility testing.

© mathew 2017