It seems to me that the best way to think of Android is to compare it to the world of Linux distros. (I believe Dan Benjamin of 5by5 pointed this out on one of his podcasts.) Yes, there's Linux, but there's no one Linux. There's Android, but there's no one Android.
So while Android is technically an operating system, it's really an open platform on which to build mobile devices on top of. So the Android device I buy is that vendor's take on the hardware and the software. Google has its own take, as does Amazon, as does Samsung.
When viewed in that frame, it's not so frustrating or confusing, or even an actual problem. Fragmentation can be viewed as a natural consequence of the open Android ecosystem.
Spoken like someone who isn't an Android developer.
Take your analogy to the next step. Someone opens an online store that sells binary-only copies of applications targeted to just "Linux".. you would call them crazy, no? That's what the Google Market is. Or the Amazon Market, samsung apps, nook store, ...
I wrote a blog post to help you understand the pragmatic issues faced by an Android developer trying to write decent software.
So because it's a "natural consequence" it's not an actual problem? Sorry.
Distribution on Linux can be a similar nightmare. Try downloading a source package to find that it requires version 2.3 of LibExample, and you have version 2.2, but the developers didn't know they needed 2.3 and the configure script doesn't detect the discrepancy, so you get some cryptic compilation error halfway through. Binary distribution on Linux is possible, the Xonotic folks did it, but it's a lot of work. Android development is more forgiving since the API as a whole is versioned, but portable programming is still more work.
Diversity of hardware and software isn't an inherent boon, it's just something that brings its own benefits and drawbacks.
The alternative isn't for all these devices of different sizes and capabilities not to exist. The alternative is for them all the be running even more disparate, vendor-specific operating systems. We should be thankful for the degree of unification Android's success has brought.
But there is a huge difference. First, that desktop OS are ready for differences in hardware. As a developer, you usually don't care about screen size, or processor, or memory.
With Android, you have to. Some devices will not be capable to run your app, in some others your app will not even fit the screen... And, of course, because of different drivers, hardware and OS versions your app will not absolutely work on some phones because of some weird error. It's nowhere near Linux development.
I don't know if fragmentation is good or bad for the users, but for developers it's an infinite source of headaches. From my experience (I develop a Twitter client for WP7), even with a system with much less fragmentation than Android, every phone has unique features which can make your app crash for no reason, and you can only wait to be randomly corrected or get that specific model and debugging the app.
"When viewed in that frame, it's not so frustrating or confusing, or even an actual problem"
Androids main competition allows developers to reach a similar sized user base which targeting a tiny fraction of devices. When it comes time to decide which platform to support or which to support first the answer becomes moot.
If that is "not ... even an actual problem" under the frame of reference you're talking about... all that tells us is that that frame of reference is probably bad. Which sounds about right given that neither is desktop linux a great consumer success story nor are linux distro's held hostage by a third party.
Imagine if you had to wait for Time Warner's permission to update linux, oh I think that would be bad...
One difference between different linux distros and android is that, in the former case, end users recognize that software written for another distro may not work on their specific OS. In the latter case, however, end users (especially ones that aren't technical) think that they have the same OS (when in reality they all own phones with different levels of API support / compatibility) and are upset when a specific app does not work as expected on their device.
It actually reminds me of the Personal Computer when I was growing up. There was Apple (a bit of a mushroom very few people had) and IBM (your dad's business computer), plus a whole bunch of IBM clones (even Samsung made one). All of the clones ran the same OS (or version thereof).
Obviously there are some huge differences, but it still feels very familiar to me. I don't think it'll play out the same though, given the quality and popularity of the Apple product this time around.
As much as I do appreciate Apple products, I'm glad they lost the PC revolution. I can't believe we'd have been better off building software for that closed system.
It's close to that, but not quite. Android is a bit more centralized, so apps are pretty much guaranteed to work on all versions of Android, while on Linux you need different packages for different distros and so on.
But I do think Google could do a lot more to centralize and standardize the platform and the app ecosystem.
The difference is Linux has its act together. Android doesn't.
Right now I can SSH into a vastly different array of hardware and update a roughly equivalent set of packages to get for example the latest rendering engine or security fixes. This is not possible at all on Android which is a joke. And I will never understand how people such as yourself can defend it.
Fragmentation is a huge issue for Android and it is only going to get worse unless Google does something about it.
I think a better analogy is a web browser. There are many versions, many resolutions, but they all roughly support the same API, while modern browsers have more features.
I love my Android phone and I love developing for it but I sort of think that sometimes we have a little bit of Stockholm syndrome when I hear another Android developer say "fragmentation is great!." It really isn't, especially not with the differences between 2.3 and 3+, but I like being able to put my own apps on my phone without paying $99 a year, so I like my phone quite a bit.
I'd tend to agree. But at the same time I do get sick of all the articles like this one harping on "fragmentation" instead of actual porting issues. That's the clue that tells me the linked article was written by Apple fans with an axe to grind.
If people viewed this as an important problem worth solving, we'd see articles about how to do aspect-independent UIs, or apps that cleanly upgrade to gestures in Gingerbread+. Or cute workarounds for rendering bugs on the SGX vs. Mali vs. Tegra.
But we don't see any of that, because quite frankly most people don't care. Outside of stuff that directly faces hardware APIs, Android apps port quite well in the real world.
Contrast, for example, the web development world. There, platform compatibility issues have been a huge problem for years, spawned a bunch of frameworks to abstract the differences, and inspired sites like caniuse.com. The clear lack of these in the Android world is, I argue, an existence proof that "fragmentation" is a red herring.
I think for Asian developers, specially in China, fragmentation is a HUGE problem. There are literally hundreds of variations of cheap Android phones out there with different screen sizes, OS versions, etc. We replace our phones regularly here in the US and have access to the latest phones from Samsung, etc. but that is not the case in most parts of Asia.
So what can Google do to reduce the problem? Release only one major version of Android every year? Every 3 years like Windows? Release a private "beta" version for most manufacturers (not just one like now) so that they all have devices with the new OS on the official launch day?
Develop better abstraction layers for hardware? Force manufacturers to use only a few resolutions like 480x320, 800x480 and 1280x720 (retina) for phones, and only 1280x800 and 2560x1600 (retina) for tablets?
What can Google do so that Android still supports many different devices from different manufacturers, but the fragmentation issue is dramatically minimized?
There is nothing Google can do about it. The cat is out of the bag, so to speak. Everything they try will simply make the problem worse.
- Release new versions faster? Nope. More fragmentation.
- Pressure MOs/OEMs to only ship latest versions? Nope. Just pisses them off and makes them more inclined to fork.
- Reduce flexiblilty (better abstraction layers for hardware) ala WP7? Nope. MOs/OEMs care most about flexibility which got them on Android to begin with. They'll just fork.
- Do something really innovative. Maybe, but it would have to be mind-blowingly-differentiated. Can't find any proof points of Google doing that in the past, so have to assume it won't happen in the future.
Android is alive and well. It is an extremely healthy ecosystem. But it is no longer Google's ecosystem. And it will continue to fragment no matter what Google tries.
FWIW, I wrote about this in depth earlier this year in a post titled "Fragmentation is not the End of Android" here:
They really need to structure the OS so that the core components can be updated independent of the vendor ones. Then just ship updates regardless of what vendors do.
People act like Google is somehow unique here. Microsoft and Linux support a vastly more complex array of hardware configurations and still manages to support a diverse ecosystem above the core OS.
What problem? The linked article could as easily have been called "The Diversity of Android". That title would have been more honest, if less likely to get linked.
I did some research this morning, since I might be doing some Android work soon. As of May 1 2012, about 5% are on any version of the latest major release: Ice Cream Sandwich. About 3% are on the previous major version: Honeycomb. The rest, a whopping 92%, are still two or more major versions behind.
By developing against the latest major version, you are going to reach 5% of Android users. Compare that to iOS, where developing for the latest major version (5.0+) means reaching maybe 80% of users.
You're mixing things up, so I'd suggest going back to do more research. Honeycomb was tablet-only, it was never released for handsets. That's like complaining that only 7% (or whatever) of iOS users can run iPad apps, it's meaningless.
ICS uptake, however, has been ploddingly slow. It's finally breaking through now as the vendors clear out their holiday inventory and start pushing new models.
Honeycomb was not the previous major version. It was a version released only for tablets. The previous major version for mobile/tablets was Gingerbread (2.3).
There seems to be a tendency to use 'fragmentation' to imply something vaguely negative - a kind of problematic deviation from the norm. I Prefer to think of it as diversity.
I think it depends on your perspective on things. As a consumer I love the diversity of the Android landscape. As a developer I dislike the fragmentation of the Android landscape.
Could you guys get a simple histogram of the model data up? The 2d visualization is clever, but it does not tell me what I need to know: does the distribution have a long tail or not? It sort of looks like it does, but the visualization obscures the truth and prevents comparison with similar datasets.
I love information like this, and I think the OpenSignalMaps opinion is healthy. Basically, it's cool to have an install base this diverse and dynamic. Maybe this is because I come from a traditional desktop dev background where diverse HW and SW environments were just part of the game.
I recently co-created an automated web-service that tests apps on real devices, and of the thousands of tests we've run, the majority of the failures and errors are more general software development issues. Errors caused by assumptions about the presence of other apps or network connectivity or the inability to handle certain transitions like screen orientation are much more common than device-specific problems like CPU type. It does happen, for sure, but not nearly as often, and free services like ours seek to mitigate these errors altogether.
It should bring a lot more stock devices into the market. Manufacturers will be able to upgrade their devices faster, and if Google is smart, they will stick with 1 major release per year rather than 2, and this way manufacturers will have to upgrade their devices only twice in 2 years, rather than 4 times. And we won't have this problem of being "2 versions behind".
Disappointing post. I was expecting a graph of the dozens (or more) versions of "Android" running around on devices that are being sold today.
I'm tired of seeing "Android" cited as a single OS in all kinds of statistics, when in fact it's a pile of proprietarily hacked OSes with a common heritage.
[+] [-] luigi|14 years ago|reply
So while Android is technically an operating system, it's really an open platform on which to build mobile devices on top of. So the Android device I buy is that vendor's take on the hardware and the software. Google has its own take, as does Amazon, as does Samsung.
When viewed in that frame, it's not so frustrating or confusing, or even an actual problem. Fragmentation can be viewed as a natural consequence of the open Android ecosystem.
[+] [-] gravitronic|14 years ago|reply
Take your analogy to the next step. Someone opens an online store that sells binary-only copies of applications targeted to just "Linux".. you would call them crazy, no? That's what the Google Market is. Or the Amazon Market, samsung apps, nook store, ...
I wrote a blog post to help you understand the pragmatic issues faced by an Android developer trying to write decent software.
http://burnsmod.com/development/2012/05/01/Android-Fragmenta...
Your analogy does not make me sleep better at night.
[+] [-] klodolph|14 years ago|reply
Distribution on Linux can be a similar nightmare. Try downloading a source package to find that it requires version 2.3 of LibExample, and you have version 2.2, but the developers didn't know they needed 2.3 and the configure script doesn't detect the discrepancy, so you get some cryptic compilation error halfway through. Binary distribution on Linux is possible, the Xonotic folks did it, but it's a lot of work. Android development is more forgiving since the API as a whole is versioned, but portable programming is still more work.
Diversity of hardware and software isn't an inherent boon, it's just something that brings its own benefits and drawbacks.
[+] [-] sciurus|14 years ago|reply
[+] [-] gjulianm|14 years ago|reply
With Android, you have to. Some devices will not be capable to run your app, in some others your app will not even fit the screen... And, of course, because of different drivers, hardware and OS versions your app will not absolutely work on some phones because of some weird error. It's nowhere near Linux development.
I don't know if fragmentation is good or bad for the users, but for developers it's an infinite source of headaches. From my experience (I develop a Twitter client for WP7), even with a system with much less fragmentation than Android, every phone has unique features which can make your app crash for no reason, and you can only wait to be randomly corrected or get that specific model and debugging the app.
[+] [-] Steko|14 years ago|reply
Androids main competition allows developers to reach a similar sized user base which targeting a tiny fraction of devices. When it comes time to decide which platform to support or which to support first the answer becomes moot.
If that is "not ... even an actual problem" under the frame of reference you're talking about... all that tells us is that that frame of reference is probably bad. Which sounds about right given that neither is desktop linux a great consumer success story nor are linux distro's held hostage by a third party.
Imagine if you had to wait for Time Warner's permission to update linux, oh I think that would be bad...
[+] [-] sshrin|14 years ago|reply
[+] [-] rapind|14 years ago|reply
Obviously there are some huge differences, but it still feels very familiar to me. I don't think it'll play out the same though, given the quality and popularity of the Apple product this time around.
As much as I do appreciate Apple products, I'm glad they lost the PC revolution. I can't believe we'd have been better off building software for that closed system.
[+] [-] nextparadigms|14 years ago|reply
But I do think Google could do a lot more to centralize and standardize the platform and the app ecosystem.
[+] [-] taligent|14 years ago|reply
Right now I can SSH into a vastly different array of hardware and update a roughly equivalent set of packages to get for example the latest rendering engine or security fixes. This is not possible at all on Android which is a joke. And I will never understand how people such as yourself can defend it.
Fragmentation is a huge issue for Android and it is only going to get worse unless Google does something about it.
[+] [-] rorrr|14 years ago|reply
[+] [-] moron|14 years ago|reply
[+] [-] bonch|14 years ago|reply
[deleted]
[+] [-] btipling|14 years ago|reply
[+] [-] ajross|14 years ago|reply
If people viewed this as an important problem worth solving, we'd see articles about how to do aspect-independent UIs, or apps that cleanly upgrade to gestures in Gingerbread+. Or cute workarounds for rendering bugs on the SGX vs. Mali vs. Tegra.
But we don't see any of that, because quite frankly most people don't care. Outside of stuff that directly faces hardware APIs, Android apps port quite well in the real world.
Contrast, for example, the web development world. There, platform compatibility issues have been a huge problem for years, spawned a bunch of frameworks to abstract the differences, and inspired sites like caniuse.com. The clear lack of these in the Android world is, I argue, an existence proof that "fragmentation" is a red herring.
[+] [-] romeodelight|14 years ago|reply
[+] [-] nextparadigms|14 years ago|reply
Develop better abstraction layers for hardware? Force manufacturers to use only a few resolutions like 480x320, 800x480 and 1280x720 (retina) for phones, and only 1280x800 and 2560x1600 (retina) for tablets?
What can Google do so that Android still supports many different devices from different manufacturers, but the fragmentation issue is dramatically minimized?
[+] [-] cek|14 years ago|reply
- Release new versions faster? Nope. More fragmentation.
- Pressure MOs/OEMs to only ship latest versions? Nope. Just pisses them off and makes them more inclined to fork.
- Reduce flexiblilty (better abstraction layers for hardware) ala WP7? Nope. MOs/OEMs care most about flexibility which got them on Android to begin with. They'll just fork.
- Do something really innovative. Maybe, but it would have to be mind-blowingly-differentiated. Can't find any proof points of Google doing that in the past, so have to assume it won't happen in the future.
Android is alive and well. It is an extremely healthy ecosystem. But it is no longer Google's ecosystem. And it will continue to fragment no matter what Google tries.
FWIW, I wrote about this in depth earlier this year in a post titled "Fragmentation is not the End of Android" here:
http://ceklog.kindel.com/2012/01/14/fragmentation-is-not-the...
[+] [-] unknown|14 years ago|reply
[deleted]
[+] [-] inoop|14 years ago|reply
[+] [-] taligent|14 years ago|reply
People act like Google is somehow unique here. Microsoft and Linux support a vastly more complex array of hardware configurations and still manages to support a diverse ecosystem above the core OS.
[+] [-] huggyface|14 years ago|reply
What problem? The linked article could as easily have been called "The Diversity of Android". That title would have been more honest, if less likely to get linked.
[+] [-] bonch|14 years ago|reply
[deleted]
[+] [-] jcromartie|14 years ago|reply
By developing against the latest major version, you are going to reach 5% of Android users. Compare that to iOS, where developing for the latest major version (5.0+) means reaching maybe 80% of users.
[+] [-] ajross|14 years ago|reply
ICS uptake, however, has been ploddingly slow. It's finally breaking through now as the vendors clear out their holiday inventory and start pushing new models.
[+] [-] juliano_q|14 years ago|reply
[+] [-] nextparadigms|14 years ago|reply
[+] [-] andyjohnson0|14 years ago|reply
[+] [-] dagw|14 years ago|reply
[+] [-] nodata|14 years ago|reply
Having lots of different screen sizes is never "fragmentation". Having different versions of Android? Maybe.
[+] [-] billjings|14 years ago|reply
[+] [-] estel|14 years ago|reply
[+] [-] sinak|14 years ago|reply
[+] [-] tdpeterson|14 years ago|reply
I recently co-created an automated web-service that tests apps on real devices, and of the thousands of tests we've run, the majority of the failures and errors are more general software development issues. Errors caused by assumptions about the presence of other apps or network connectivity or the inability to handle certain transitions like screen orientation are much more common than device-specific problems like CPU type. It does happen, for sure, but not nearly as often, and free services like ours seek to mitigate these errors altogether.
[+] [-] nextparadigms|14 years ago|reply
http://www.theverge.com/2012/5/15/3022682/google-direct-sale...
It should bring a lot more stock devices into the market. Manufacturers will be able to upgrade their devices faster, and if Google is smart, they will stick with 1 major release per year rather than 2, and this way manufacturers will have to upgrade their devices only twice in 2 years, rather than 4 times. And we won't have this problem of being "2 versions behind".
[+] [-] Steko|14 years ago|reply
"Google to sell flagship Nexus devices with multiple partners this fall, reports WSJ"
http://www.theverge.com/2012/5/15/3022682/google-direct-sale...
linking verge because, paywall.
Apparently google read my comment below, made a major business decision and leaked that to the WSJ all in the last hour.
Me ITT:
"Well they could keep their major vendors in the loop instead of just dumping the new code on them after each nexus launch..."
[+] [-] unknown|14 years ago|reply
[deleted]
[+] [-] jjguy|14 years ago|reply
http://theunderstatement.com/post/11982112928/android-orphan...
[+] [-] Stokestack|14 years ago|reply
I'm tired of seeing "Android" cited as a single OS in all kinds of statistics, when in fact it's a pile of proprietarily hacked OSes with a common heritage.
[+] [-] kaffiene|14 years ago|reply
[deleted]
[+] [-] Stokestack|14 years ago|reply
This person doesn't understand WTF fragmentation is.