ppk (Peter-Paul Koch, http://quirksmode.org) gave the second talk of day 1 at beyond tellerrand 2015 and completely nerded out at least half the audience with his topic of browser fragmentation on Android.
His talk is the distilled version of his book “The Mobile Web Handbook” and if you’re working on mobile websites I highly recommend you read the book or at least watch the video of his presentation (which will be made available a few weeks after the conference) or at the very least check his slides after reading this very article. You can also watch the talk on vimeo.
Having said that, here’s the hyper-distilled tl;dr version.
Android is differentiated fragmented
When Google offered device vendors their mobile OS for free (to get more data, of course), everybody in need of a platform that could compete with Apple jumped at the chance. The result: Sony, LG, htc, Samsung etc. all used Android and all looked and worked.. pretty much the same.
Their marketing departments obviously hated this, so Google (in the spirit of making everybody happy and spreading their OS as widely as possible) allowed differentiation of both the Android OS and its browsers.
Yes, browsers, plural. Because while Android comes with a pre-installed default browser - usually based
off Android WebKit at first, Chromium (the open-source base of Chrome) later – since a change in license agreements in Android 4.4, device vendors are also required to install Google Chrome (but not to make it the default). Wait, what?
Chrome is not Chrome
In the sense of differentiation (see above), device vendors started to toggle some of the ~120 switches in Webkit, later Chromium, to make their Android browser a bit more special than the other device vendors’ browser. They also don’t update their browser as often, which means that while Google Chrome (and the underlying Chromium) may already be at version 42, many users browsing on Android will actually be using Chromium 33, or 30, or 34, or 28. ppk tries to make sense of the fragmentation by calling Chromium on htc “HTC Chromium”, on Sony “Sony Chromium” and so on.
If you have a masochistic streak and want to see how bad the fragmentation is, have a look at this screenshot and also his slides.
What does this actually mean?
In the end, it is important to know about the fragmentation for two reasons: First, it’s going to get worse, not better. And second, there are a few differences that one needs to be aware of during development. Possible “wtf?!” moments include different support for
<input type=”datetime”> (works in phones from htc, Sony, LG; doesn’t work in phones from Google, Xiaomi, or with Cyanogen mod) and
position: fixed; (just don’t use it for mobile, ever). It might not be that many, but it’s always better to be aware of them than to spend hours trying to figure out why one Android phone works and another doesn’t.
Oh, one more thing.
Google Chrome on iOS is not Google Chrome, either. Apple does not allow other vendors to install their rendering engine on iOS, so what Google Chrome on iOS actually is, is a Google Chrome app that is running an iOS webview ~…(“Safari”) inside.
The mobile web? It's complicated.