Firefox: Product or Platform?

Steve Yegge's sprawling Amazon vs. Google platform rant (linking to Hacker News as Steve has since pulled his original post) has finally spurred me to expand on something I wrote recently about Firefox:

In essence, Mozilla wants to focus on creating the best browser possible. The distractions inherent in maintaining a platform for third-party developers (then XULRunner, now sophisticated extensions) undeniably detract from this goal. But what if being the best browser, in the sense of being truly differentiated from the competition, actually means that Firefox must be a great platform? In tackling the Chrome insurgent by seeking parity with its rapid release schedule, simple extension API, sparser user interface, process-isolated tabs and so forth, Firefox may be losing its strongest reason for existing.

Firefox is underpinned by a remarkably flexible platform. Most of the core functionality of the browser is organized around components that can be accessed (usually from JavaScript as well as C++) via well-defined interfaces. The user interface is specified using a declarative markup language and can be modified almost arbitrarily using overlays that add, change or remove stuff. The component model resembles and is doubtless inspired by Microsoft, which has a muscular platform of its own (as Steve points out). The UI extensibility is far beyond anything I've seen in other desktop software.

The peerless extension ecosystem that has grown up around Firefox is a direct result of the strength of its platform. You can make Firefox do pretty much anything with an extension, including many things that the browser's creators could never have imagined when they designed it. The platform is also the reason why many parties (present company included) have tried at various junctures to promote the platform-as-a-product known as XULRunner. Considering the scope of its ambitions, the platform seemed underutilized to them. This idea was considered and eventually rejected by Mozilla in 2007.

Various subsequent decisions and initiatives imply that Mozilla is now pursuing a path of "deplatformization" for Firefox: deCOMtamination, the thawing of all XPCOM interfaces, the death blow struck to binary XPCOM components and the new, much more limited Add-on SDK.

Granted, the Firefox platform faces many intimidating challenges. Inevitably, many interfaces could do with a redesign. XUL is proprietary and being overtaken by newer revisions of HTML. XBL is great when it works and baffling when it doesn't, due to patchy error reporting. There is a general lack of good tools when compared to other modern software platforms. The macro-laden C++ syntax is ponderous and doesn't make much use of the last 15 years of language innovations. More fundamentally, all the cool but unexpected extension functionality that hooks into relatively low-level platform features has put Firefox into a straightjacket that inhibits its evolution.

Killing off the platform is one solution. It's hard not to be jealous of Chrome, a green-field development free of the shackles of third-party legacy code. Why not become more like Chrome then? Not a platform, just a damn good browser. Focus on responsiveness and minimalistic user interface design, arguably the main drivers of Chrome's rise to 25% (or so) market share in only three years. Slim down the add-on SDK so that extension developers have enough rope to skip but not enough to hang themselves.

Perhaps this path will prove fruitful, but to me it's hard to see how Chrome can be dethroned by chasing its tail. Firefox has a much stronger play to make: face the issues with the current platform head-on. Replace the XUL user interface with HTML 5. Develop and deploy tools on par with those available for iOS and .NET. Redesign interfaces that have proven inadequate (they're mostly pretty good in my experience). Make a commitment to Firefox developers to converge on a set of stable, actively maintained and well-documented interfaces.

I won't dwell on the arguments for why a strong platform is important. Steve Yegge makes a more compelling case in his 4500-odd words than I ever could. For Firefox the case has even more resonance because it represents a return to its platform-centric roots.