Hacker News new | past | comments | ask | show | jobs | submit login
Android Fragmentation Visualized (opensignal.com)
270 points by muratmutlu on July 30, 2013 | hide | past | favorite | 154 comments



I'm not an Android app developer, but can someone explain to me what the big deal is? I've been developing Windows desktop software, Linux desktop software and Unix server software for years. The hardware diversity on all those 3 platforms is huge. Heck, if you're developing web apps, it's like every user uses a different machine. I've never seen anybody claiming that Windows is fragmented. So what's so special about Android that people put the "fragmented" label on it, and why is that a big deal?


You've never seen anyone complain about shoddy windows drivers, dll hell, legacy support or browser quirks? You've somehow missed so much as the kvetching about Microsoft not updating older browsers, instead tying finally-better versions of IE to new operating systems, leaving a long-tail of abandoned devices out there that take serious development effort to deal with and thereby hold back advances?

You've never seen people griping in unix land about the different opinions the different versions of different distros have, about where various files belong? or how/which configuration defaults should be set? Or how packages support a small handful of environments and rely on individual admins or community maintenance to discover and document how in the world to get package W to play well with package X on distro Y.Z?

What's the push for containers even about, if no-one's running into fragmentation-style roadblocks?


Sure, but what's that got to do with hardware fragmentation? All those problems were caused by Windows itself and the lack of updates and solutions, not because Windows ran on tons of different hardware.

As for complaining about different distros: that depends. For some time I've tried to solve that problem through a project of mine, Autopackage (now defunct, website gone; it's still on Wikipedia: http://en.wikipedia.org/wiki/Autopackage). But we met a lot of resistance from distribution people and even from users. The view was that each distro is its own operating system and shouldn't bother with compatibility with other distros. Heck binary distribution is only for closed source software, was what they said. In the end there was not enough support.

So no, I've not seen people complaining quite as much about Linux distro fragmentation as about Android fragmentation.


Windows legacy problems were very often, very much a case of Windows running on a ton of different hardware. Drivers have quite a bit to do with the pains of hardware fragmentation. And quite a bit of the legacy pain is in having to deal with the old (flawed/bugged/limited) abstraction layers and dlls that people would very much rather not have to support anymore, but cannot abandon due the installed base of the old hardware it supports.

As to quantity of complaints: you asserted these sorts of complaints just didn't exist. If you want to argue about whether they're overblown, or simply proportional with the fragmentation gripes of various historical platforms, that's quite a bit different.


> And quite a bit of the legacy pain is in having to deal with the old (flawed/bugged/limited) abstraction layers and dlls that people would very much rather not have to support anymore, but cannot abandon due the installed base of the old hardware it supports.

It'd be interesting to see if the newer versions of Android would attempt to do what the newer versions of Windows did - detect an older application trying to use an undocumented feature, and then give the app what it wants to hear, instead of crashing or having a bug. Therefore, keeping compatibility with older programs.

Microsoft of course had teams of people doing this kind of stuff.


There are a bunch of conditionals in the Android framework on which SDK version something was compiled against, so they already do this in a way.


You don't hear people claim that Windows is fragmented because everyone has become used to it, so much so that it seems like such a normal thing. When you develop for Windows, worrying about which version of .NET Framework might be installed on the user's machine or whether or not a certain feature of the OS might be turned on or whether their drivers might be outdated is a normal course of events.

The iOS development philosophy is that developers should not have to worry about any of this, and their apps should just work. I mean, when was the last time you tried to install an app on iOS and it gave you an error message about such and such prerequisite missing, or you installed it and the user experience was broken because the phone had an older version of the OS or a wacky manufacturer UI?


The iOS development philosophy is that developers should not have to worry about any of this, and their apps should just work.

Microsoft, and IBM before them, had that same philosophy: if only everyone would use the current version of their OS, developers would not have to worry about cross-platform compatibility because everything would just work. Nobody liked that philosophy then, and most developers don't like it now either.

Web development can certainly be a PITA, but at least the web development platform is based on open cross-platform compatibility as a goal, rather than monoculture. It recognizes the reality that monoculture can't be achieved without giving up fundamental freedoms, and strives to work in that reality rather than in some company's monopolistic wet-dream.


>>Nobody liked that philosophy then, and most developers don't like it now either.

I'm not sure if the latter part of that sentence is correct, since iOS is the most popular mobile development platform.


Popular in what sense? Because developers like it, or because developers have to use it in order to reach their audience? By the latter measure, Ticketmaster is the most popular ticket vendor.


I find that devs have a far harder time dealing with apple's policies and fees than with android's fragmentation. One particular case is one startup where all the people involved use iphones but they moved to android to launch their app because they couldn't afford the complications of doing it for iphone, which was originally their plan.

I can find a way through a code problem, but when it comes to bureaucracy sometimes there is no alternative, or they shut it down the moment you find it.


Apple's fees are $99/year which is hardly prohibitive.

And I doubt you would see any difference between Apple's bureaucracy and Google's. Anytime you try and embarrass the company, try and take money away from them or be anti-user then of course you will have problems.


I don't remember having to 'hope' that Google accepts an app through a human review before allowing it on their store.

I like neither Apple nor Google but I believe we shouldn't overlook facts that clearly differentiate one from the other.


Can you elaborate on the bureaucratic complications said startup faced?


>> When you develop for Windows, worrying about which version of .NET Framework might be installed on the user's machine or whether or not a certain feature of the OS might be turned on

It's also not quite as big of a deal on Windows - you can simply include or launch the installer for the XYZ Library or ABC Framework version 3.9.


Compared to Windows or Linux, Android is almost not fragmented at all.

Yes, there are different screen sizes, but that's not a big deal, the API abstracts from that.

And yes, there are different API versions, but that's not a big problem too, because the API is backwards compatible (or forwards comaptible, I'm not fully sure about the difference between these two).


Of course... similarly, compared to Windows or Linux, Android is not mature at all. The main method of interface is also much more sensitive to things taking a long time.

As for the API "not being a big deal." I think you grossly overstate how well the APIs have been managed. It is nowhere near as hellacious as the J2ME fiasco, but it is not pleasant, either.


> The main method of interface is also much more sensitive to things taking a long time.

Not sure I understand, what do you mean by that?

> but it is not pleasant, either

Why exactly?


Humble apologies for not responding. Forgot I had posted.

I meant that the latency of the touch screen is a huge factor. If the screen is not keeping pace with my finger, it is highly noticeable. And jarring. This is just as true for many GUIs, but the speed of getting text onto the screen is a solved problem. And rarely goes wrong. (That is, most UIs on desktops are relatively static while the user is doing stuff. This appears to not be the case on my phone. Further, if Facebook goes slow on my desktop, I just switch to another app/tab for a bit. Not really doable on the phone.)

As far as the API issues, it really comes down to just how obnoxious it is to target many versions of devices. You wind up picking the API that is solid across them all. Often this is the "old" one, that is not quite as nice, and definitely not as supported. In fact, this is the main thing I hate about how Google has curated their stuff. They don't so much "stabilize" apis, as they do constantly churn them.


No problem mate, thanks for the reply!

I mostly agree with the touch latency, even with Nexus 4 it's not as good as iPhone. But it's getting better.

API issues: there are different API versions that are backwards compatible. But apart from that, the API is the same across devices. Manufacturers don't change the API. Having to use older API versions can be a bit annoying, but I don't see it as a big problem, and there's also the support library.


Because the formerly iOS loving tech press were looking for a buzzword to kill the rise of Android with a few years ago. This was the best they could come up with.


Speaking as an android app dev there are some challenges but your instinct is right. I've rarely run into device specific issues, android has decent support for building flexible layouts, there are official libraries for bringing some newer version ui components to older versions, etc. Overall while certainly more challenging than writing for a single known device its not dramatically difficult at least for basic apps.


Screen size is the biggest difference. Things don't, or at least don't have to, run full screen on a desktop. The UI is also not as big of a deal on a desktop. People don't buy Quicken simply because it is "prettier." Given the absurd number of different screen sizes, it's much more difficult to make an app that will look good on each of them.

The second part is the API differences. You don't get to use the latest fancy new features when 34% of your audience is on the older version. That is similar to windows land, but it is also not nearly as big a deal as the screen sizes.

Finally, hardware. Yes there is a lot of different hardware on desktops, but on average it is more powerful than on mobile devices. Ask anyone who has done embedded development, there are a different set of problems there than you have on the desktop. The same goes for mobile. Most of the new mobile devices have hardware on par with desktops from a few years ago, so it isn't quite as bad as embedded. That being said, the range of Android devices is huge, and there is some percentage running on crap that creates another headache for Android developers.


There are more mobile developers than desktop developers.

Thanks to twitter and other social tools complaints now get amplified and travel quickly.

There always have been a lot of pain and complaints in windows, macos & linux development, in any case, but we didn't pay much attention to it as we do now.

Problem with Android fragmentation, on top of that, is the frustration that comes when you compare to the competing platform (iOS). I'm not saying iOS development doesn't have its own pains, but it looks tidy and simple compared to the Android ecosystem. If iOS wasn't there Android fragmentation would be accepted as the normal state of affairs.

It is a big deal? Well, it depends on what kind of app you are developing and how much you can get away with. For some developers screen resolution differences are not a big deal, but different processors, memory, etc... are. For others the opposite is true.


iOS fragmentation is masked by using the same version number on devices that support different api's. Clever perhaps, but fragmented like Android.


> iOS fragmentation is masked by using the same version number on devices that support different api's

Example of this? I can't think of one offhand (besides things like the original iPhone not providing fine-grained location, because it didn't have a GPS receiver). Some of the user-facing features vary by device, but the APIs are the same.


Skinning. Imagine if half the PC manufactures shipped windows with an OS X skin that the user couldn't turn off, and another 15% of the market shipped a DIFFERENT non-native skin.

http://en.wikipedia.org/wiki/HTC_Sense http://en.wikipedia.org/wiki/TouchWiz


With Android 4.0 and newer it's not a problem anymore. Your app can choose to use the Holo theme, which is guaranteed to look the same on every certified Android phone. Without certification by Google, the phone can't have Google Play I think.


I think the point is that Android 4.0 and later are only on 40%-50% of devices in the wild (per this report). So things will get better, but they aren't there for someone coding today.


A caveat of this: The distribution is very different depending on the geographic area. For my recently released US-focused app, Android 2.3 makes up 15% of the downloads.


That's actually a really interesting point.

I wonder what Android fragmentation looks like per-country.


The problems are greatly exaggerated. I imagine there's little difference to the "fragmentation" problems developing for Windows.


Developers these days are lazy and want a write-once-run-everywhere development fantasy land that has never existed in computing and never will. They want to expend minimal effort building a photo-sharing fart flashlight app by gluing together a few APIs and cashing out for a billion dollars. Having to do device testing, ensure compatibility and provide long-life maintenance runs counter to this mentality.


I have to disagree with you.

It is not just about effort. It is also about opportunity cost. Imagine you work for someone else and then you tell them that for the kind of UI we want I can ensure it works for 95% of Android devices if you give me another three weeks and access to these 30 other devices (maybe on some website that offers paid access to them for a bit of time). Right now it works well for 75% of the devices.

Now, the person who owns this business may consider his/her money better spent when you implement some other feature on both Ios and Android rather than ensure you support almost all of Android devices. It may not be the developer who chooses. Many times it may not be so clear cut too. It may be that some features get shot down during design because they are hard to get right on all the various aspect ratios and screen sizes that Android offers.

So, yes the 'fragmentation' is a problem but in my experience it is mostly only to do with the variations in aspect ratio and screen size.

Nevertheless, like one of the first replies to this topic (by bookwormAT) says, it is not as bad as having had to code for various Operating Systems if the manufacturers hadn't agreed to go with Android in the first place. So, Android does help us develop for a wide range of manufacturers' phones but it doesn't help much to ease the pain of accounting for the variation in displays.


AFAICT, it's a stalking horse trotted out by Apple fanboys to decry Android popularity.


AFAICT, everyone that isn't complaining about Android fragmentation has never actually worked on a project that involved supporting 90%+ of users.

There are some horrific devices available today that are Android in name but definitely not in spirit. They are so underpowered that they are more akin to feature phones.


Well, take Microsoft. They put an awful lot of effort into testing their operating system on various real-world hardware and working around hardware bugs. Does Google do the same?


My biggest fragmentation issues have been the result of hardware differences. Carriers pick and choose which permissions are allowed/denied. An example, only ATNT denies access to AlarmManager. This means you cannot set or change the alarm through software without root. Now, due to this, you have to build a complex software alarm to do what the operating system should give you access to.


Is that documented anywhere? It would be crazy for AT&T to restrict access to AlarmManager. I would think that would break a large proportion of apps in the store.

Cf: http://developer.android.com/reference/android/app/AlarmMana...

This is a very common API.


Because of the limitations. You've got limited screen real estate and limited resources. The bar UX and design-wise is also higher.


A lot of people here seem to be asking "so what?"

In my small experience, the "so what" is that, for example, just today I get an email saying that feature X of my app doesn't work on tablet Y.

So now what? Do I go and buy that tablet to see what the problem is? Hardly worth it for the money I make from Android.

This sucks for developers for obvious reasons and it sucks for consumers as it's pot luck whether an app will work for you, especially if it's not one of the top 5 devices.

I've read it's terrible for 3D programmers as often devices just flat out lie about the GL capabilities they support.

Exhibit A: Apportable's android device library https://twitter.com/chinmaygarde/status/349809877176156160/p...


I completely agree. As an app developer, it gets very frustrating to see a certain percentage of users who are dealing with issues and not having a consistent approach to solving their issues. It's definitely gotten to a point where we have 3 classes of devices (and thus users) similar to how PC software used to be (and probably still is).

1. Performance: These devices can run your app smoothly even with a large number of assets demanding computational/graphics processing. 2. Basic: These devices can open and run your app but it starts to lag when pushed to the limit. 3. Incompatible: These devices don't make the cut in terms of specs and it's worth not even allowing the app to be downloaded.

The quickest way to deal with this is to eliminate the bottom wrung of devices by choosing only to deal with the more recent Android versions since older devices may not be able to upgrade. From there, it's probably worth excluding certain devices based on your app's performance trends (crashes, lags, customer complaints). Obviously, the most optimal solution is to continuously optimize your app to further include more devices.


While Apportable is a very nice example, they're also doing something rather crazy - "cross compiling" apps into a wildly different set of hardware, software, and OS targets. And trying to be efficient about it, for graphics performance.

That isn't simple anywhere. I'd call it flat out amazing that they have apparently mostly succeeded, and a massive testament to the level of consistency that does exist.


Cupboards like that are very normal.

The last three places I've worked at had similar cupboards in order to support the array of Android devices. And they were just run of the mill web companies. The problem really isn't Android but everyone's screwed up implementation of it.


From everything I've seen, that's still an exceptionally large cupboard. High-performance uses (games) have big cabinets because, yeah, that's where fragmentation can be extremely damaging. The fragmentation there is real, and can be very painful, and I totally agree that it sucks.

But in "run of the mill web companies"? Where I work, we have ~6, but 99%+ of the time we just use our Nexus 4s because 99.9%+ of the time it "just works" everywhere, especially if you stick to an older API / support library and know the quirks. We support 2.2+, have a few 3.0+ and 4.2+ features, and it has been terrifically easy to handle our range - much easier than iOS. The other devices are to see how using the app feels on different sizes / performance classes. Getting that feel is important, but it just requires a couple "token" devices.


Anyone complaining about Android fragmentation should ask themselves if they would prefer if every device would go the "Apple way" and make their very own operating systems for their device. Would this really solve fragmentation?

Here is how I see the "Fragmentation issue": My customers are using one of maybe 800 or so different devices, with maybe 100 different software systems powering them. That number was about the same before and after Android came about.

Now if I want to write a program for all my customers, I need to theoretically write at least a hundred different applications. That sucks. But today, thanks to Android, like 95 of the available operating systems are based on the same development kit, Android, and so instead of writing 95 different applications, I make one and then adapt a little if necessary.

Android is a defragmentation platform. What we call "Android fragmentation" just means that the defragmentation works 90%, not 100%. People can use Android to build lot's of different operating systems, which are either very similar or very different that what is available in the Android open source project. But because it's all based on the same code base and runs against the same compatibility test suite, a developer like me can target many devices and many operating systems with a single code base. That's awesome.

iOS and Windows are fragmenting the market for me. They are not compatible with Android, so I have to write a separate application for these systems. Often from scratch.

A few notes to further explain this position:

"operating system" is a very generic expression. For most people today an operating system is the software that is installed on the device minus applications that the user installed himself.

E.g. the app store, itunes, Location Services, the User Interface and the push notifications system are considered features of the iOS operating system. But on Android based devices there are independent from the Android system. You can make your app run Holo no matter what Android version is installed on your customer's device.

When speaking in iOS terms, you can say that 90% of all Android devices get updated once per months or so, when another update for Gmail, Google Voice Search or GCM arrived.

You do not need to depend on Google if don't want to make your software compatible with Android. There is no dependency from Google in Android, all their influence comes from the fact that they own the most popular third party app suite that every OEM wants to license on their device. If and OEM wants to go their own way, like Amazon, Google has no way to stop them.


There are tradeoffs in every approach and there are steps Google could have taken to make the situation better without mimicking the controlled experience and uniformity of iOS. Unfortunately at this point this is pretty much how it's going to be.

So yeah, it's a "pick your poison" kind of world and theres no easy way out. You deal with it and hope for the best. But that doesn't mean it's not worth pointing it out or that is not a problem for the Android ecosystem in the long run.

> iOS and Windows are fragmenting the market for me. They are not compatible with Android...

By that same logic Android is fragmenting it too.

> When speaking in iOS terms, you can say that 90% of all Android devices get updated once per months or so, when another update for Gmail, Google Voice Search or GCM arrived.

No, as a developer having users in different versions of Android affects the things your app can do. What APIs does it have access to and how. I don't care if the user thinks he's updated because their gmail app looks new. I care that my app needs more hours of coding to make sure it does the same on Android 2.3 than on 4.1.

> ... You can make your app run Holo no matter what Android version is installed on your customer's device.

There are some iOS developers that follow this same route. A lot of services / functions in iOS are not mandatory, you can use your own versions of it if you want to devote the time and skill to rewrite them. Loren Brichter comes to mind as a good example of this. Developers use the Apple route because it's easy and takes out a lot of the workload.


"By that same logic Android is fragmenting it too."

How? Android is an open cross platform technology for building operating systems that are app-compatible with each other. How is that fragmenting?

"No, as a developer having users in different versions of Android affects the things your app can do."

This is correct, but not in the sense that an older version of an operating system (in the iOS sense of the word) would. New developer features of ios7 are a new user interface, better location services, background push notifications etc. All of these things are available on android-based systems as well, but none of these things depend on the Android version.

I admit that there are also APIs that are part of Android, and therefore only available in newer versions. And so an OS that is based on Android 4.0 can not run every app that is made for an OS based on Android 4.3.

But if you need to target all 800 devices that your customers use in the end, the iPhone turns out to be much different from an Android 4.0 device than Android 4.3. And that's the point: You need to develop for all these devices anyway. So think about effort per device, not effort per platform.


> How? Android is an open cross platform technology for building operating systems that are app-compatible with each other. How is that fragmenting?

Situation: there are two operating systems, A and B. Someone who wants to target all the devices on the market has to write two apps, one for A, one for B. This is fragmentation.

Introducing a third operating system, C, means that someone who wants to target all the devices on the market now has to write three apps: one for A, one for B, one for C. This is, arguably, more fragmentation, since you have more apps to write.

Does it really matter what A, B and C are actually called? Android is the latest entry to the mobile operating systems market (save for ghosts like WebOS). If anything, it was one of the driving factors of fragmentation.

> But if you need to target all 800 devices that your customers use in the end, the iPhone turns out to be much different from an Android 4.0 device than Android 4.3.

How? IIRC, there's nothing stopping you from developing with an older API if you want, just like on Android. Sure, you can't use the new and fancy features, just like you can't use them on Android, either...


"How?"

If you're going to say introducing a new OS is fragmenting the market than Android fits that definition as well as any other. If you're going to claim Android gets a free pass because Calvinball well we might as well close the thread.


please re-read my post. My point is that Android is not a new operating system in the sense the word is used today. It is a foundation on which you build operating systems that are compatible to another. Apple could build iOS on top of Android, but you cannot build Android on top of iOS.

Since Android was first released in 2008, Many vendors have replaced their incompatible OS with another one based on Android.


ask themselves if they would prefer if every device would go the "Apple way" and make their very own operating systems for their device.

That's not a question it's a straw man. The real question is whether Android would have been better served by Google withholding their closed source services unless devices met some additional standards on dimensions and software updates.

I make one and then adapt a little if necessary.

This is disingenuous. The whole point of people complaining about Android fragmentation is that you don't adapt a little. You adapt relatively a lot vs iOS which is a bigger market in dollars.


"you don't adapt a little."

Adapt from one of two not android based systems to another, for example from iOS to Windows Phone.

Now adapt from one android-based OS to another, e.g. from the Galaxy S "Nature OS" to HTC Sense.

Compared to the former, the latter only needs to adapt a little.

Android did not make users buy multiple devices. Android did not make users buy into different operating systems. Android just makes different operating systems compatible to another.


> Now adapt from one android-based OS to another, e.g. from the Galaxy S "Nature OS" to HTC Sense.

No, no. Play fair: adapt from Samsung Galaxy 580 to the Asus Transformer Pad TF300TL, ensuring that your interface actually looks OK on both of these and on every device in-between -- that includes the Xperia V, the Asus PadFone and the HTC One X.

And no cheating here -- when a customer complains that the application "looks funny" on his phone, don't forget to factor in the price of buying the damn thing.

Have you actually written a real Android application? Maintaining a list of differences between devices (and the hacks you need to make just to make a program written for the same fsckin platform work on all those devices) is a part-time job in itself.


I have written Android applications before, and I still believe that adapting from Samsung Galaxy 580 to the Asus Transformer Pad TF300TL is significantly less work than adapting from iPhone to Transformer Pad TF300TL.


re: "compatible to another" - this is definitely not always the case. it certainly may be the intention, but is not always the case.

Random example: http://comments.gmane.org/gmane.comp.handhelds.phonegap/3631...

I work for a very popular cross platform mobile application (ios, blackberry, android), and we have dozens and dozens of test devices, a qa department just dedicated to finding differences between devices, and let me tell you that most of the time, special tweaks are required for android that are not required for ios. Surely this is hugely due to the fact that there is less variety in the ios world, but you simply wont find that "manufacturer xyz decided to implement this differently so now the developer must account for that".

Finally, in your analogy of adapting from Android->Android, is similar to adapting from say ios5->ios6. Having been through this several times now, I can tell you with confidence that the initial time of adapting is very similar with equally skilled developers, but the delta of "code complete" to "ready to ship" is much larger on android, due to all of the testing, double-checking, and edge cases. So in summary I would say that you do "adapt a little" with ios, but you end up adapting a lot more than a little for android, if you want to support more than a couple phones, in my opinion.


I've found that ios is a lot worse regarding fragmentation than Android. While Android requires a bit more legwork at the beginning, once you have written the app it will generally keep working on most devices. There aren't too many changes in new Android versions that break things.

iOS however is a horrendous mess. Every year or two they overhaul their layout system (contentScalingFactor, then auto-layout, and other things). Also, each time a new version of iOS comes out you need to work around various bugs/changes and you end up tweaking/hacking your code to get it working on all devices. I've just spent an entire day getting one of our apps working on the ipad in iOS 7, and another half day getting it working on iphone. It will require another day or two to get everything working perfectly, and then I'll have to recreate all the new icons, launch images, screenshots, etc.


> Anyone complaining about Android fragmentation should ask themselves if they would prefer if every device would go the "Apple way" and make their very own operating systems for their device. Would this really solve fragmentation?

I, for instance, would prefer that the industry adopt six or eight standard screen sizes and stick the fuck with them. Google is in a position where it can mandate that, actually.

There are many excuses one can make in Google's favour, but this does not take away the fact that their development environment is very poor, primarily due to fragmentation (and then there's development tools and documentation, but those have been traditionally been a stumbling point).

Also, it's intelectually rude to try to rest your arguments on words for which you construct your own meaning. That's what salespeople do and it's a marginal improvement (in technique, not in correctness) of the straw man sophism.

> "operating system" is a very generic expression. For most people today an operating system is the software that is installed on the device minus applications that the user installed himself.

"Operating system" is a very clear expression that means exactly one thing.

Fragmentation can mean more things, and this article claims one of them. People who want to write software for the iOS operating system have a small set of screen sizes and resolutions to target. People who want to write software for the Android operating system have a fuckload of incompatible APIs, screen sizes and resolutions to target, which is exactly what fragmentation means. This is especially problematic for small apps: if you need 3 weeks to write the core of your application, and 1 day to tweak each combination of obscure resolution and screen size, strange device, hardware configuration range and API version you can easily end up doubling your development time.

Also, if you actually try your hand at writing an application with a decent UI, you'll find that the "a little" you want to tweak it is "a lot". In my experience, if you try to target a full set of platforms, ranging from small phones to full HD tablets, you actually end up designing 3 UIs from scratch (unless you want at least two of them to feel like someone stretched or compressed the other one to fit a screen it wasn't designed to). This includes entire sections of the UI logic (e.g. redesigning navigation flow), and while there are tools to help you with it (such as Fragments), it doesn't take away the pain.


> "Operating system" is a very clear expression that means exactly one thing.

That's not correct at all. An "Operating System" can mean many things and there's tremendous debate in the OS and Systems community over the definition.


Being part of the "OS and Systems" community, I think I'd know :-).

There are a lot of debates about whether X or Y should be a function of the operating system, but that doesn't justify OP's position. Applications that come with the operating system are not part of the operating system, you know, on account of them being separate applications. Unless I missed the debate on whether grep and emacs are essential parts of Linux or not.

The questions you quote are much like the heap paradox, but that doesn't make the concept of operating system so flexible that you can bend it to mean anything. Also, let's be honest here -- quite a few of those questions are there only because at some point in history, fanboys of one platform wanted to rest their fanboyism on some sort of technical grounds, which is how we ended up with fundamentalist-like questions of the "should the OS provide a GUI" sort.


You should know then!

Here's GNU's definition of a Unix-like, "A Unix-like operating system is a software collection of applications, libraries, and developer tools, plus a program to allocate resources and talk to the hardware, known as a kernel." This is a very heavy idea of an OS and grep and emacs sound like "developer tools" and "applications". Most OS people involved in unix-like OSs would be aghast if you didn't at least include some basic userspace applications like cat and ls.

GNU isn't specific about what needs to be in the collection of things to constitute a unix-like OS, but it looks like that agrees in most respects to bookwormAT, "'operating system' is a very generic expression. For most people today an operating system is the software that is installed on the device minus applications that the user installed himself."

GNU's concept is miles different from very light concepts of an embedded OS's like Femto OS which near as I can tell is pretty much just a kernel and some libraries.

WP on the other hand says, "An operating system (OS) is a collection of software that manages computer hardware resources and provides common services for computer programs." So strictly speaking, by this definition an OS doesn't even need to provide disk access like the old DOSs!

Although of course it later contradicts itself and says "Access to data stored on disks is a central feature of all operating systems." which anybody involved in the OS community knows is not a central feature of "all" operating systems. I've used OSs where useful file system access was provided via userspace applications (a la FUSE).

Palantir takes the position that an OS doesn't need to be interacting or managing the hardware stuff, just providing the ability to run different hosted applications is enough, making things like web browsers operating systems (http://www.palantir.com/2009/11/palantir-like-an-operating-s...)

bookwormATs position is that not only are OSs heavy things, but that "Android" is not just an OS, but a meta-OS description of what an Android OS should be (just like XML is a meta-language for describing XML compatible file formats).

So if GNU's definition is correct (and lots of people subscribe to GNU's position), bookwormATs position, "'operating system' is a very generic expression. For most people today an operating system is the software that is installed on the device minus applications that the user installed himself." is correct.


This is the first i've ever heard of a debate, wiki seems pretty clear about what an OS is: https://en.wikipedia.org/wiki/Operating_system


Some questions to consider:

Is it an OS's job to...

-provide a Graphical Interface?

-provide any interface?

-handle a hardware abstraction layer?

-handle font rendering?

-composite graphical displays?

-provide an abstract virtual machine environment across different processor types?

-handle user accounts? What about systems that aren't multi-user?

-does an OS need to handle virtual memory to be an OS? what if all memory management (virtual or otherwise) is handled by a dedicated support chip instead?

Some more:

-does the simple timing code on a $1 digital watch count as an OS?

-does a system that, when turned on, goes automatically to a memory address for more instructions, and those instructions are only the instructions for a user program count as having an OS (lots and lots of computers past and present are like this)?

-does an OS provide software beyond just the Kernel? e.g. Start with a modern linux distro and start removing packages, at what point is it no longer an OS? (GNU would like you to think it's an OS only when you have GNU userspace tools, X etc. on it. )

-is an OS just a space to host and run programs? Does that make the JVM an OS? How about a browser? How about MS-Excel and Macros?

-the OS I'm using right now ships with a paint program, a calculator a browser and a text editor, must an OS have those things?

-how about a system with a complex BIOS that happens to have USB, Ethernet support and a web browser? Is the boot code now an OS? When does bootcode become an OS if this isn't it?

-should an OS handle all available hardware on a system or just some subset?

-what is the first OS in history?

etc. etc. etc.

At some point, somewhere between boot loader and a fully loaded gaming system there exists this thing called an OS. It seems to be more than just a kernel, unless it's an embedded system with basically just a kernel (unless the system is so small and dedicated it just runs code directly without an OS layer (unless you count the code that's running and doing its own resource management an OS since by definition an OS does resource management)), or it seems to be resource management code that also happens to have nice font rendering and a full networking stack. The debate goes much deeper and has gone on for decades.


The Wikipedia article answers most if not all of your questions.


no it doesn't, it even contradicts itself

https://news.ycombinator.com/item?id=6133513


> I, for instance, would prefer that the industry adopt six or eight standard screen sizes and stick the fuck with them. Google is in a position where it can mandate that, actually.

I'd rather think of devices having different size displays, different shape displays, multiple displays or even no display.

Theses things can change rather rapidly! I quite like the idea of skinning incrementally, start with a CLI (or even something more minimal - like the button and beep input/output interface) and go up from there.


Yeah, that's nice. Meanwhile, the next tablet I (unwillingly) buy will be Apple-branded because that's the only viable platform for audio and music, since latency on Android is up to 50x worse.

I own a bunch of android devices, I stuck it out through three major OS updates in hopes that things would improve. I still like my Android devices but 90% of third party apps are single-purpose tools of very limited scope. There's a reason the good stuff is on iOS, and I hate to admit this as I have a bias against Apple for their walled garden and general anti-hacker/tweaker approach.


offtopic?


It's disingenuous to talk about 100 different software systems powering things. Maybe there are 100, but 97 of them don't matter. Lots of desktop OS's too, but pretty sure most people are only targeting windows, mac, and linux. Nothing else comes close to 1% of the market.

The problem isn't that I can't make an app for all the Android devices. The problem is that I can't make it as good as I'd want for all intents and purposes. Developing for iPhone, I can easily hit 95-99% of the market without making any sacrifices at all. It will look good and it will work on every phone, all while allowing me to use the latest features and API's. With Android, the app WILL NOT look as good as the iPhone version on some of the phones. 34% of the market is using something released over 2 years ago, and several major version ago.

I actually like Android, and developing for it isn't the worst thing in the world. But to say it isn't fragmented and doesn't create headaches for developers is absurd. It absolutely adds to fragmentation, and parts of it are a real pain.


"Maybe there are 100, but 97 of them don't matter."

Please reread my post. I'm referring to the software on the Galaxy S, the HTC One etc. as independent operating systems. These OSes matter. It's what people use today on their computers.

Android is not an operating system in the sense that Windows or iOS is. It's a platform on which you build such an OS.


>> "Anyone complaining about Android fragmentation should ask themselves if they would prefer if every device would go the "Apple way" and make their very own operating systems for their device. Would this really solve fragmentation?"

Not true at all. They could standardise on a few screen sizes and minimum hardware requirements and the problem would be solved.


Who is "they"? If Android would only support 6 different screen sizes, then the companies building devices that do not fit into this market would not stop making devices. They would just build their OS not on Android. As a developer you would still need to support these devices. The only difference is that you not have to write more code.

And it's not that screen sizes are the problem when people talk about fragmentation. Any proper made Android app scales easily on all kind of screen sizes.


In web development (I don't know how well this applies to native app development) the way to get around 90% of these worries is feature detection. If touch screen, do such-and-such. If X pixels wide, do such-and-such.

Pixels (CSS, not physical) are especially interesting because they're an angular unit of measure based on the user's expected distance from the screen. Once you start building off that foundation, many device fragmentation woes go away.

That said, there are a handful of places where we logic-branch based on API version by reading the UA string. These are usually due to features that report working, but fail miserably.


Android has the same thing, but it makes much more sense - Android has 3 length units: density independent pixels, scale independent pixels (which are used for fonts, so the user can have a 'huge font' option), and screen pixels. So you can size things in dp, and they will look a similar size on things with different densities. This was built into android from the beginning.


I'd love to have screen pixels in CSS for doing hairlines. I hate when something that should be a hairline comes out fuzzy or lumpy.


It will be interesting to see if Firefox OS, Ubuntu mobile, and Sailfish OS will fragment the same way Android does. Albeit with much smaller data sets, of course.


I think the report could benefit from dropping the lowest 1/5/10% of devices by market share. As can readily be seen from the first diagram, Android has a long tail of obscure devices. Dropping that would make many of the other graphs more readable and more insightful. I guess it'd also be interesting to exclude devices by other characteristics, e.g. exclude all <4.0 devices because maybe you don't want to support them anyway.

I was first puzzled and am now intrigued by their choice to use physical screen size as a basis for that diagram, as opposed to screen resolution. Very appropriate in our resolution-independent times. Of course either way you do it, Android is going to have more variation than Apple. That diagram is also kind of difficult to read; what shade of blue corresponds to what market share?

Finally, it's awesome of them to share the source data! Maybe I'll actually get around to implementing my suggestions.


>Android is going to have more variation than Apple

Absolutely. However, what struck me as crazy is the sheer number of devices per manufacturer. There are more than 100 devices there -- for Samsung alone. I get that they put out different devices for different locales. But I can't imagine the overhead in having that many devices in all kinds of different sizes.

What gives?


Some of the answer is that these aren't really "different" devices. They're different cases produced for different carriers, etc... The actual number of true SoC platforms is actually fairly small.

But most of it is that hardware manufacturing of low-margin products is hard. Sure, you might really want to use a partcular Snapdragon part, but Qualcomm can't give them to you in the volumes you want, so you make two boards for two different chips. Or the camera manufacturer you were using just had a glitch and can't give you the second batch in time, but with a quick PCB rev you could use this other sensor which is "mostly" the same, etc...

Apple doesn't do this because Apple ships high margin parts and can pay more (i.e. order extras, pay premiums to get first priority in shipments, etc...) to get the components they want. And, frankly, because Apple is willing to eat the occasional supply burp and just spin it as "demand was too high!".


> I guess it'd also be interesting to exclude devices by other characteristics, e.g. exclude all <4.0 devices because maybe you don't want to support them anyway.

Android 2.3 has around 40% of the Android market. I doubt many players can do it. Some companies still want IE7 or IE6 support.


Depends on what countries you are targeting. In the US, 2.3 is more like 15%.


15% is still a lot. do you want to take a 15% pay cut?


Not so simple -- if it means you are better able to support your market, features are faster to develop, etc, there may be a net benefit. Hell, if dropping Gingerbread support raises your average review from 4 to 5 stars, you might be in the black.


Closer to 30%, and even less in North America.


34.1%, it's in the article.


It'd be nice to have the option of viewing the data without the tiny slices, but just dropping them or putting them in an "other" category would blunt the message here - "There are more android devices under the sun than you have dreamed of."


The fact that the screen sizes and dpi are fragmented is in my opinion a feature and not a bug or problem.

Actually, Android UI design (if you follow the guidelines) is comparable to responsive web design, and that isn't surprising, considering that Google is a web centric company.

You have layout XML files (HTML), seperate XML files for styles (CSS) and then your code that manipulates the layouts dynamically. And most of the time you work with relative positioning of UI elements (like you do on webpages) instead of absolute positioning. Even Androids Intent mechanism is based on the idea of web links. (but here you link to another "page" of your app, or other apps) Also, Android apps behave like web pages with stacks of Activities (comparable to pages), and a dedicated back button to browse back.

Yes, it would be easier if you had only one screen size and therefore could design everything statically, but with so many different screen sizes on current iOS devices (3 sizes for different iPhone revisions, at least 3 for iPad and I don't know how many for iPods) I don't think it's a painless process there either, and I expect that Apple will introduce changes in the future.

Also, you probably will never have pixel perfect design on Android that works across every device (it was never intended to do that), but you don't have that on the web either, and no one's complaining here that the web ecosystem will collapse because of that.


Imagine a similar article about vegetable fragmentation. They all have the same operating system (DNA, ribosomes, cells, etc.) but gosh, look at that horrible, awful variety! And all the different manufacturers! What a disaster.


Or the web, even. All those users! So many browsers! So many screen sizes! It's so fragmented!

Why does everyone only ever complain about Android?


People complained about the web too, we just don't make a lot of noise about it now because we've given up on many aspects of it.

For a long time websites were designed to fit a lowest-common-denominator screen size - 800x600 or 1024x768 - and anything larger just had padding or other void space added.

Hell, most websites are still like this. See: NYTimes, IGN, etc. Fragmentation exists on the web and it causes many of the same issues as it does for native-mobile, it just isn't new, and it isn't very controversial given that we've thrown up our collective hands and quit trying to take advantage of everyone's browser windows and just resign ourselves to wasting pixels instead.

Screen size fragmentation is still a big deal on Android because we haven't resigned ourselves to throwing black bars up on screen and we're still doing our damndest to make good use of each individual screen size.

On the other hand, browser API fragmentation is a huge deal, and people do complain about it incessantly, for good reason, and it shares fundamentally many similarities with Android API fragmentation. Want to build your new thing with Canvas or WebGL? What's the penetration like, how many users even have browsers/machines that can handle it? New CSS tag? Sorry, not supported in many still-shipping browsers. Pretty much the whole "IE sucks" meme comes down to API and implementation fragmentation.

Complex apps on the modern web involve miles upon miles of compatibility hacks to work out the implementation differences for the same API, as well as different API support levels entirely. This is a big deal, and a huge time sink, and people rightfully do complain about it.

tl;dr: Fragmentation on the web is a problem and people do complain about it. The only thing that isn't complained about is screen size, mostly because we've taken a huge cop-out to avoid it.


Your screen size example isn't terribly useful because fixed width design was always just a cop-out. Both Android and the web have mature ways to adjust layouts to match screen sizes.


[Why does everyone only ever complain about Android?]

Only Press Complains. I haven't met a serious Android Developer who complained that fragmentation is in top 5 of their problems. I say this as some one who run Android Game/App Development company.


> I haven't met a serious Android Developer who complained that fragmentation...

Yeah, but you'll meet lots of iOS/WP developers who complain about Android fragmentation :P


So the question is - is it Stockholm syndrome on the part of Android developers or do iOS developers just think it's a bigger issues than it is in reality? That's the core of the debate, right there.


amen and ditto on the occupation.

i suspect this probably has to do with a truism every programmer knows. there are really only 3 cases to solve for (not 11,868) -- one device, two devices or n devices.

m3mnoch.


The web only exists because of a few standards. The web was fragmented and used to be a nightmare until web standards began to be taken seriously. The variety of browsers is only possible because of standards. Do you have any clue what you are talking about?

Standards restrict choice and ensure interoperability. If you do not have feature comparability between Android versions you do not "an" Android, you have many and they are not all the same. Fandroid chanting (remember the Maoist hordes?) and manufacturere obfuscation hide this simple fact from the people who buy handsets.

This is all very typically Orwellian behaviour by the fandroids, endlessly chanting about freedom, while actually having very limited choices. The reality is that for most users their only freedom, to get new features or the latest set of bug fixes, is to buy a new handset. As so often, "open" means open your wallet.

"Freedom is slavery", indeed.


I think people only complained about developing for Android because iOS was so easy with a handful of devices to develop and test for.

That and the media needed something to write about.


If you had to project a user interface onto the surface of vegetables, no doubt you would find that variety isn't your friend. The user interface that has a lot of detail and works great on a 4kg squash is going to be impossible to see on a radish and, because there are many, many sizes inbetween, you end up with perhaps dozens of levels of detail to design for with many quirks if you're not super-careful.

Meanwhile, some fruit company chooses to only accept a handful of fruit sizes: an apple in two lengths, and two sizes of watermelon. Your job of projecting a user interface onto those surfaces is an order of magnitude easier because you're really only dealing with a couple of levels of detail to design for.


I guess that analogy only works if you had to develop a single recipe that works with all vegetables :)


Well, if you are trying to develop a case for transporting individual vegetables you might complain about the fact that they're not same size, weight or have the same consistency or skin resistance.

But on top of that, your analogy doesn't translate vary well to mobile platforms, i think.


Disregarding the fact few of us customize these `systems' by installing 3rd party `apps' (e.g. a recombinant gene fragments), I still prefer the vanilla ones.


This is pretty remarkable but it is to be expected. The world is large and diverse, and if there is going to be an OS that satisfies the mobile computing needs of the entire world, it is going to have to run on many different devices.

Apple, the poster boy for non-fragmentation, is consistently losing market share. They are now starting to realize that their only chance of continued growth depends on releasing more devices with different screen sizes and different price points. (Gasp -- more fragmentation).

It is up to Google to try to make programming across different devices as easy as possible. I am not sure how successful they are in this, I am not an android programmer. But fragmentation is not a choice or the result of a strategic error by Google. It is a fact of life when you are programming for hundreds of millions of users.

Think of it this way, if Google had chosen to go the Apple way and only used Android on their own Nexus devices, would there be more or less fragmentation? There would certainly be less fragmentation in Android, but there would be much more in mobile devices in general. Because Samsung, HTC, Sony and every other Android manufacturer would come up with their own wacky OS.


Apple isn't really consistently losing too much market share. They've actually been gaining share in the US and other developed countries. They are losing share to the really low end Android phones that developers are complaining about and are essentially worthless as far as a mobile app dev is concerned.

> But fragmentation is not a choice or the result of a strategic error by Google.

I think it is. The choices aren't 1 screen size or any screen size. There is a third perfectly reasonable alternative that windows phone took, and that is a handful of sizes that are likely to satisfy 99% of people.


1. By all reports Google is shying away from Android.

2. Apple losing market share to hoards of cheap spam-ware phones? I'm sure Google isn't as excited about this as you think.


Could you substantiate any of the claims? I'm surprised to hear that Google is shying away from Android or that they don't want Android to be used on as many devices as possible.


They are not shying away. I listen to Google earnings reports, and they are as gung ho about Android as ever. I did not reply to the grand parent, because I did not want to go off on a tangent.


People are forgetting the state of mobile OS ecosystem before Android came along.

Samsung, Sony, Motorola were using Java ME but you cannot build just one app that works for all manufacturers.

If Android doesn't exists, we'll have 1 OS for each manufacturer because Apple would not share their OS with others.

I'll take a fragmented Android ecosystem over a fragmented mobile OS ecosystem any day.

I develop Android apps for a living. For a lot of devices (e.g. HTC One, Nexus 4, S3), there is very little differences in code, if at all.

Highlighting different versions is also misleading. Not much difference in the APIs between 4.0 and 4.3


> If Android doesn't exists, we'll have 1 OS for each manufacturer because Apple would not share their OS with others.

I'm sure Microsoft would have been more than eager to take up the slack, or perhaps Palm would have pivoted that way.

I cannot remember what the update cycle was like on Microsoft phones. Perhaps the OS version would have still been an issue. I do seem to remember some upgrade blocks on the 7 version.


> I cannot remember what the update cycle was like on Microsoft phones.

For Windows Mobile? In almost all cases, they never got upgrades at all. The iPhone was pretty unusual in its day as a non-computer consumer electronics device that got substantial software changes after release.


There was Windows Mobile but phone manufacturers didn't like it so they still built their own.


>Highlighting different versions is also misleading. Not much difference in the APIs between 4.0 and 4.3

there are big differences between 2.3 and 4.0 though. 34% are still on 2.3, and that is sad.

With Android you really have to just cut your losses and realize you can't make it perfect for everyone. Target the top 70% and do the best you can. Handle the top few screen sizes and api versions and move on.


The numbers don't speak for themselves: how many 2.3 users are actively purchasing apps/services? Are people buying a $60 Android phone for use on a prepaid plan likely to purchase/install your particular app? The economics may favor dropping 2.3 support regardless of the overall install base.

Then again, for certain situations, they may not. Of the two wildly different apps I work on, one has 40% of users on 2.3, and the other has 10%.


When personal computers were just coming into the mainstream, particularly when GPUs were just coming about, there was a similar fragmentation issue. OpenGL sought to resolve this with a crap-ton of manufacturer bits and a difficult to use API, but DirectX came along and (for the most part) solved that.

Nowadays we hardly think twice about the fact that there are millions of combinations of monitor and GPU brands and models and configurations. Has anyone ever thought to do a similar comparison of desktop and laptop "fragmentation"?


Google's main goal for Android should be to achieve something similar for Android, like it was achieved for Windows. I think it's doable, but it requires some technical expertise (the easy part), and a lot of will to do it, to convince other OEM's to get on board and support the standardization of hardware and software (the really hard part).

I'm also not sure Google wants to do that so badly. I think they're pretty content and comfortable with how Android is working right now, generally speaking.


Who cares? Google make a good job maintaining API compatibility. The tools are also (mostly) the same from the very beginning (while with iOS you actually have to learn and adapt much more with each version change) ...but otherwise the graphs looks fine :)


But for various reasons (also known as carriers) google does crap job of pushing updates. The moment google wrestles back control from them and begins pushing updates chrome style we will live in a better world.

Otherwise we will be in situations like a friend was cursing me yesterday about how I dare have android 4.2 (and wait for 4.3 rom) on my unlocked 2010 device and he is stuck on his HTC with 4.1 and no signs of incoming upgrade soon.


They've definitely still got some kinks to work out on their update pushing. I've got a Nexus 4 and a Nexus 7 and despite my checking for updates several times a day neither of them have received 4.3.

I understand the necessity of the "rolling update" model in general, however in the case of Nexus machines it should not be necessary. At any rate, I should be able to opt out of the rolling update model and put myself at the front of the line without having to manually flash a factory image.


Just side load it. You can download the official OTA ZIP which won't factory reset the device. You don't need any 3rd party mods for this because the ZIP is signed by Google.

http://www.droid-life.com/2013/07/25/android-4-3-update/


Try clearing data on the 'Google Services Framework' app. that did it for me after I was offline on vacation all last week and couldn't get the update the past two days.

Caution though, apparently this breaks app updates for some people, but all you have to do is add and remove your google account to get them to work again.


But at least they are pushing something. Abandoning top of the line devices while "hinting" to buy new is very annoying - which happens when ROMs are provided from 3rd party vendors/ carriers.


They're making strong progress on this by making the Play services independent of the OS and with all their other apps on the store. Android is still much more modular than they're making it look though, and it'd be great to see their launcher, lock screen etc all as downloadable, individually upgradeable apps too.


I think in QA terms it is certainly harder to build apps for Android, that said I'm not sure whether moving from 4000 distinct devices to 12000 distinct devices makes much difference, either way you're just going to pick some representative ones for testing. What is interesting is just how diverse the smartphone market has become, that is arguably a strength not a weakness of Android.


It's a problem if your app depends on functionality delivered after a certain patch level, though.

For example, if my application depends on some feature delivered in 4.2, I need to be aware that my potential market is less than 5% of devices in the wild.

On the other hand, if the app is 100% compatible with the 2.3.X line, I can count on the all of the devices working, but I also should regression test with the updated versions to make sure that they work.


There have been and will be problems, but it is probably safe to say Android "survived" fragmentation. This is success.


The screen size diagram misses an important extra complication: the same pixel counts and screen sizes do not always match up. In this room right now there are ~7" devices with resolutions of 800x<whatever> (where "what-ever" varies depending on aspect ratio), 1024x? and 1280x?. When the G2 Nexus 7 turns up there will be at least one at 1920x? too. Similarly resolutions of 1280x? can be found on devices with physical screen sizes from 4.3" to 10.2".

Of course for many apps, if written properly, this simply doesn't matter - but if you try cram too much on-screen assuming 1280x800 means a 7" device your app may be difficult to use on 4" one.

Most of the people you see complaining about Android fragmentation are people that are avoiding Android because they are scared of it (rather than having tried to deal with it) or people who would prefer you to buy an iOS device that their app is already available for instead of an Android one that drops you out of their target market until such time as they port to Android.


Like you say, for a well built app the pixel density does not matter because you design in dp.

> if you try cram too much on-screen assuming 1280x800 means a 7" device your app may be difficult to use on 4" one.

For the reason above, this just doesn’t follow. A 7" device would be about 600dp wide (in portrait), while a 4" phone would be about 320dp, regardless of pixel density. That’s not too different from iOS – the original iPad and the iPhone 5 have a similar number of pixels.


All these graphs are BS except the one about OS fragmentation. Devices and screen sizes are not "fragmentation" any more than people viewing their browsers on different screens or resizing windows represents fragmentation. That is just the reality of a viewport that potentially has many sizes. It is a FEATURE. Is it harder for developers?? Of course, but blaming it on fragmentation is a cop out.

The OS thing is real and really worse than what is depicted because depending on the APIs you are using even OEM specific tweaks introduce additional variables.



Of course there is going to be many devices and many sizes. That's the whole point of android.

The most important trend to notice is that Android operating system breakdowns are getting better.

4.x accounts for 60%~ market share. 2.3.x accounts for 34%.

Those are good signs.


If you peek into the dataset (fragmentation_model_July_2013), these are some of the first few entries:

  DIGMA iDs10 3G 
  !QU SMILE advance 
  \002\"" 
  (MC605CH) 
  *#? (^?^)=? 
  001DL  
  001HT 
  003Z 
  007HW 
  009Z 
  06_v89_hjy1 
  06_v89_jbla768_asx
How on earth is a firm supposed to make sense of nonsense like that to inform their device targeting?


> 11,868 Distinct Android devices seen this year

> 47.5% - Samsung's share of those devices.

It seems implausible that Samsung has made 5,934 distinct Android devices.


Indeed it does seem implausible, because that's not what the data implies. Samsung only makes 5,934 distinct Android devices if you assume all devices have equal market share.


The graph below shows that Samsung's share of the devices is made up largely by the S3. The percentage is of all Android devices based on those 11,868 models, not a percentage of the distinct models themselves.


The key word is distinct. Samsung could have made 1 model of phone, it doesn't mean that one model wasn't much more popular than any other android device. Not every model of Android device has the same sales figures.


Yes, the data is inaccurate, some of those devices are in fact ROMs (ROM is basically a custom Android build).


And a custom ROM should be treated as a different device.


In that case we should also have iOS 6, 6.0.1, 6.0.2, 6.1, 6.1.1, 6.1.2, 6.1.3, 6.1.4. Suddenly there are a lot more versions of iOS.

Also many of those ROMs might only run on a dozen devices, trimming the long tail, remove say any ROM used by < 100 people, might be a good idea.


You mean every device / ROM combination should be treated as different device? Why? Why not every device / ROM version combination?


In my experience, the UX expectations on mobile are higher than for desktop apps. It's hard to get the UI to be tight/efficient/performant/attractive across such diverse devices and operating systems with Android. It's not insurmountable, it's just something that works against you in producing a good app.


It appears that the source data download at the bottom of the page is broken, it gives an XML file with two fields saying AccessDenied.

edit: it's working now

This is some great information to think about concerning Android fragmentation, and how, perhaps, it's not actually a bad thing.


The promise of Android was to be free and open. Did you not expect fragmentation?


Why do HTC, HTC Europe and HTC Asia form distinct categories? Put together I think it would be pretty high. Also, Motorola (which has the exact same colour as Huawei and is next to it) and Moto.

Great diagrams anyway.


Observations: in the bottom right quadrant of devices, one can find the iPhone5 is a device with an Android installbase. Also, it seems silly to degroup carrier-branded phones in the branding section (A 'Verizon S3' is not listed under Samsung).


I don't remember to ever read an article about DOS or Windows or Linux fragmentation...

In other news, "DOS vs. VMS fragmentation", Only 5% of PC are manufactured by IBM, Digital manages to capture 100% of the VMS market!


As a word of warning, the visualizations on this site managed to lock up Firefox on my MBP to the point where the only thing I could do was force power off the whole laptop and reboot.


Worked perfectly in Firefox 22 on Windows 7....


Desktop fragmentation!


Anyone did a visualization of browser window size fragmentation ? I'm wondering how the web can even work with all this fragmentation.


Looks like open signal has become part of Apple's PR arm. I will be uninstalling iOpenSignal...


Android is Samsung - more than Google. With its market power Samsung can now dictate terms.


only 5% of pc users are on windows 8% and 25% are still on xp = dead platform obviously too fragmented to develop for.

Linux is even more "fragmented" than windows why would people even use it with all that scary fragmentation!


Can I just say that D3 and its underlying concept is just beautiful.


Was my first thought. A beautiful showcase to D3 capabilities. Really well done.


I'm more impressed by the use of D3 here than the actual contents.




Consider applying for YC's Summer 2025 batch! Applications are open till May 13

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: