Okay, folks. This is new territory for me. I'm stepping into the world of....

t h i n k p i e c e s 💥🤯💥

I've been thinking a lot about an oooold problem in the web dev community, one that's been the subject of 🔥flamewars🔥 basically since web browsers have existed: "browser monoculture". This topic has flared up again recently as a result of Microsoft dropping their EdgeHTML browser engine and moving Edge to Google's Chromium engine.

I have a crazy idea. I'm not entirely sold on it myself; I'm sure there are aspects I'm not considering. So I want some feedback on it. But first, I need to lay some groundwork.

What does "browser monoculture" even mean, and why should we care?

A "browser monoculture" is when a single browser becomes so dominant that it triggers a chain reaction: it's effectively the only choice, so it's the only browser anyone uses, so it's the only one anyone cares about, so it's the only one developers write code for.

That's one main worry: the concern is that if one browser becomes too dominant, developers may begin to ignore other browsers and just target the set of CSS and JavaScript features supported by the dominant browser, never bothering to test for cross-compatibility in other browsers.

And this isn't unfounded: this is exactly what happened in the early 2000s, at the height of the browser wars: Internet Explorer became so absolutely dominant that devs often specifically targeted IE, and many websites simply didn't work in any other browsers. The worst part was that IE was super quirky, didn't follow the standards, and was very slow to change or improve.

And this is another major concern: when there's really only one player in the market, the push for that browser vendor to follow standards and play by the rules declines; they can effectively do whatever they want. You might think that the developer community would get mad and start moving away from that browser, providing a check to their power, but the thing is, most browser users aren't web developers. Most users don't know or care about this stuff, and they aren't going to start moving to a different browser just because some 🤓nerds🤓 are complaining about "APIs" and "standards".

That said, there is a third, less technical concern that non-developers do care a bit about: when everyone uses a single vendor, that vendor then has access to everyone's user habits, data, etc. This is not exactly unfounded, either; many people have big problems with how Google has handled user privacy issues in the past.

An emerging Chromium monoculture?

And that brings us to recent events. Google Chrome's underlying browser engine is developed as an open source project known as Chromium. It's designed such that it can be used as the basis for new browsers, and many browsers have been built on top of it, including browsers you've heard of. Opera and Samsung Internet both moved to Chromium-based builds in 2013, and of course, as mentioned earlier, the big news this year is that Microsoft Edge will be moving to Chromium as well.

So this is the concern: what if enough of the market share ends up on Chromium based browsers that we end up with a Chromium monoculture?

Looking at current statistics, we do seem to be heading that way:

Browser % of global usage Chrome 62.70% Safari 15.89% Firefox 5.07% Samsung Internet 3.38% UC Browser 3.16% Opera 2.55% IE 2.51% Edge 2.17% (Others, each <1%) 2.57% May 2019 global browser usage statistics for browsers with >1% usage

(retrieved June 7, 2019, from statcounter.com)

Chrome alone has over 60% of the global browser market share. Add in Samsung Internet, Opera, and Edge, the top Chromium-based (or soon-to-be-Chromium-based) browsers, and the figure goes up to 70.8%!!! Imagine if Apple decided they were tired of everyone moaning about Safari's missing features (as Safari now tends to lag the furthest behind in implementing cool new web platform APIs) and decided to go the same way as Microsoft. It's unlikely, but I could see it happening.

Many of the new experimental browser projects of the last several years have also been based on Chromium, such as Vivaldi, Brave, and Epic. And this makes sense to me: Chromium is a very well-established, actively maintained, and easily extensible browser engine. The task of creating complete JavaScript, HTML, and CSS engines from scratch is absolutely monumental; Chromium has literally decades of work behind it (considering it's based on a WebKit fork), and catching up seems impossible, especially for an independent startup. Plus, these browsers aren't primarily trying to improve the state of web languages; they're focused on higher level features like security, privacy, etc. I don't fault them for using Chromium as a base and focusing on the features they care about.

And that's kind of the point I want to get to: Chromium is beginning to be positioned as a de facto standard for browser engines, sort of a canonical implementation of W3C specifications. But we'll put a pin in that. 📌

What about Firefox? 🔥🦊

Back in the days of the browser wars, Firefox was the hero we all needed, breaking up the Internet Explorer monopoly and charging gloriously into the new era of browser diversity and cooperative web standards.

But unfortunately, tragically, Firefox usage has been falling over the years, really ever since Chrome came on the scene. I think Mozilla has done heroic work recently with Quantum, and they've often led the charge on implementing new web platform features, especially in CSS (subgrid!!! 😭).

But here's the bottom line: Google is huuuuuuuuge. They just have so many people working there. I don't think Mozilla or the open source community around Firefox has enough manpower or institutional support to keep pace with Google.

And I don't think the right solution is for Google to fire a bunch of their browser team so that Firefox can keep up, either. I love that they're constantly trying cool new things. So what do we do?

Do we have a monoculture?

In an important sense, yes. There seems to be at least a good chance of a browser engine monoculture emerging in the next 5-10 years. At the moment, the two primary opponents to Chromium are Safari and Firefox, who collectively hold about 21% of usage. Chrome's usage numbers have been slowly but steadily increasing for years now, and probably will continue to do so. Now that Edge is Chromium based, I imagine its numbers will go up a bit as well.

Buuuut... here's where I'm going to get controversial. I want to posit that this is a different kind of monoculture than what we saw in the 2000s with Internet Explorer 6, and it has the potential to become a very different kind, one that may not really deserve the name "monoculture". Stick with me here!

Is it bad?

Okay, let's dip our toe into controversial waters. Here's a take I've been developing:

All three of the concerns I laid out earlier are based on a scenario where a single browser becomes dominant, including all the hooks into a specific corporate structure with solitary business priorities and hooks into the company's proprietary ecosystem (e.g. hooking your Google account into your browser). But Chromium is already not that, and it has the potential to be quite the opposite.

To recap, here are the three main concerns I've heard raised in browser monoculture discussions:

One dominant browser will lead developers to target just that one and ignore compatibility with smaller browsers.

When a single browser becomes too dominant, it loses a lot of the motivation to follow and contribute to shared web standards.

The more people use a single browser, the larger the pool of user data and habits available to the company that owns that browser, which raises privacy concerns.

These all change quote a bit when you recognize that we aren't talking about a Chrome monoculture; we're talking Chromium, the underlying browser engine. As it stands, Chromium is the basis for a variety of browsers, not just Google's flagship. From what I can tell (as a non-expert on Chromium's source, so please correct me), the Googley stuff that makes privacy advocates nervous is independent from the core Chromium browser engine. I mean, Microsoft clearly isn't going to ship an Edge with any hooks to Google's ecosystem still in it, so it's gotta be easily separable.

Privacy

For me, this distinction between "browser" and "browser engine" already answers the main concerns about privacy. The engine itself isn't where the privacy issues lie. Heck, two of the Chromium-based experimental browsers I mentioned earlier, Brave and Epic, are all about providing a more secure, privacy-preserving option.

Single Dominant Platform

As for concerns about developers targeting a single web engine if it gets too popular, that's definitely a real thing. Some claim this is happening already with Chrome.

But here's the thing: since it's the base of several different browsers, when Chromium gets a new JavaScript or CSS feature, it's not pushing Chrome ahead of the rest of the pack, it's pushing all of these browsers forward. So when the Verge (in the article linked above) says that Chrome is becoming the new IE, "with web developers primarily optimizing for Chrome and tweaking for rivals later", they should really replace "Chrome" with "Chromium-based browsers". To "optimize for Chrome" is also to optimize for Opera, Vivaldi, Samsung Browser, and soon Edge, because they all use the same engine.

That being said, this is a problem for Firefox, Safari, and anyone else still trying to maintain a parallel implementation. Let me come back to this in a sec.

Web Standards

This one is a big deal. Google has historically been a big player in pushing for and developing web platform standards for everyone to use, but as the Verge rightly points out, they've strayed from that message a bit in the last few years:

Whether you blame Google or the often slow moving World Wide Web Consortium (W3C), the results have been particularly evident throughout 2017. Google has been at the center of a lot of “works best with Chrome” messages we’re starting to see appear on the web. Google Meet, Allo, YouTube TV, Google Earth, and YouTube Studio Beta all block Windows 10’s default browser, Microsoft Edge, from accessing them and they all point users to download Chrome instead. Google Meet, Google Earth, and YouTube TV are also not supported on Firefox with messages to download Chrome. Google has publicly promised to support Earth on Edge and Firefox, and the company is “working to bring YouTube TV to more browsers in the future.” The Verge, "Chrome is turning into the new Internet Explorer 6"

This isn't great. But from what I can tell, this is isn't always strictly a matter of Google ignoring the standards; it's often a matter of other browsers not keeping up with Google's pace on implementing cutting edge APIs. Again, Google has a massive amount of resources to throw around, so IMO this is somewhat inevitable. But once again, since Google is contributing to Chromium, not just Chrome, all Chromium-based browsers get those benefits.

My crazy idea

Okay, we did it, we laid all the groundwork. And by this point it might be obvious what my idea is. So here we go:

What if the entire web standardized on a single browser engine? What if Chromium became the basis for a reference implementation of web standards, and all browsers converted to be based on it?

Now before you get out the pitchforks, let me elaborate.

A collaborative engine

I hope it's obvious, but I'll say it anyway: I'm not suggesting we cede control of the web to Google. Quite the opposite, actually. My vision is that the developers that currently spend countless hours writing the same code in parallel in different codebases instead are united under a single, common codebase.

Ideally, this codebase would not be controlled by any single company. I'd love to see a common browser engine controlled by an independent nonprofit foundation, like the Python Software Foundation, including (though not primarily made of) a few representatives from each participating browser vendor.

Just imagine with me for a moment: What if Safari and Firefox and everyone else stopped maintaining separate codebases, duplicating a ton of effort and desperately trying to keep up with the pace of the behemoth that is Google's development team, and instead began contributing to a shared codebase? What if everyone benefitted from everyone else's work?

We've seen examples of this. Opera developers have done this in the past, and the Edge team has begun doing this as well, both teams bringing their expertise to benefit Chromium.

I'm currently very frustrated that while CSS Subgrid has been implemented in Firefox Nightly, Chromium has yet to start working on it. Imagine if the Firefox devs' work contributed to Chrome as well! This problem would vanish!

And this is a classic problem on the web platform in general: we all get excited by some awesome demo of a new Web API in a certain browser, but the immediate response is, "Sure, but how soon can I actually use that? How soon will all the other browsers implement it?" Maybe there's an opportunity here to get rid of this problem forever.

What about the lost diversity of implementation?

Here's a possible downside I'm worried about: one thing I love about the variety of browser engines currently in the wild is that they often implement the same feature in different ways, and one is often faster than others. I have to imagine (though to be honest I don't know) that there have been occasions when a Chrome dev has seen how Firefox solved a problem and borrowed an idea or two, and vice versa. Would we be giving this up? How big of a loss would this be?

I have two thoughts here.

First, I note that this isn't a big deal for other platforms; I don't hear much complaint that there's no big competition for CPython (the Python reference implementation) to encourage alternative ways of implementing features. But maybe that's not a counterargument. Maybe that's a bad thing for the Python community, and they would benefit from some competition. I don't know.

Second, though, maybe there's a way to preserve this feature of the web to some degree. Yes, all browsers would be built on the same engine. But maybe the engine could be (or already is? Again, I'm no expert) built in such a way that each browser could build initial implementations of features on top of the core engine. Maybe this could develop into a regular process: when a new API is being discussed, or even after the spec is initially published, maybe each browser that's interested writes their implementation of the feature and tries it out. Maybe we spend 6 months or whatever with a different version of the feature in Firefox, Chrome, and Opera, then a committee at the foundation sits down together and hashes out which implementation should be merged into the master branch.

This is a point I'd love specific feedback on. I'm not sure how it would go down, but it feels like there has to be a way to get it done.

Wrapping up

Okay, that's it. If you've read this far, holy crap, thank you so much. This was a long, rambly one without any practical application, so I really appreciate anyone who gave me that much of their time.

To say it once more, I'd really love feedback on this! The growing disparity between browsers is something that's been on my mind a lot for a while. I don't think the current trajectory is sustainable, and I don't want either for a single browser to win out while still being corporately controlled, nor for browsers that are able to push ahead of the pack because of greater resources to be held back for longer and longer amounts of time while other browsers struggle to catch up, all the while being criticized as "the new IE6".

I think we desperately need a new conversation on this topic. This is my contribution. Now please, give me yours! 😁

More resources

Here's some other people talking about this topic that have informed my own opinion, including some stuff I linked in the article.