The Issue with Compatibility

I think I’m on a roll today, I’m feeling very reflective. Or maybe I’m just trying to avoid what I’m supposed to be doing today – catching up on work. I had to work from home on Friday since I recently caught a cold. It was a bad idea for me to go out so much yesterday, as it kept raining; yet today it’s beautiful and sunny. I think San Francisco is trolling me hard.

Anyways, it’s nearing the end of the term (well, 5 more weeks) and I have to decide on a work term report and technical presentation milestone topic. Wait wait. What? Well, I have to write a report based on something I learned at work. It’s a requirement for Waterloo co-op. I didn’t have to do it last term since they changed the curriculum, and I have to do 3 in total. I also have to do a TPM, a technical preso early next term. More on it here.

At first I was thinking of doing something extremely basic, but still technical. Android Apps & Version Compatibility. It’s definitely a problem that I run into from time to time at work.

I guess for those already in the mobile space, it’s something pretty basic and straightforward, but it’s a problem that you cannot forget about.

To sum it up, in order to create Android apps that support down to 1.5/1.6, the earliest public versions of Android, you need to do a lot of workarounds, especially for design. Ice Cream Sandwich is the latest version, and only a small handfull of phones are running it. In fact, about 1.6% of all Android users are running ICS. This is a stat based on access to Google Play (Android’s new name for their Marketplace), and you can read more here.

Now let’s compare it to Android’s competitor – iOS. More than 66% of iOS users are running iOS5 as of early January, according to this article. This is a huge difference! The reason for it is pretty straightforward – Apple makes iOS, and testing only has to be done on a small handfull of iOS devices to check that iOS5 can run properly on them. iPhone, iPad, iPod touch, and all of the legacy versions of these devices. So, less than 20 devices. And this testing can be done within the company, there is very little difficulty in doing the testing because everything is internal.

Let’s look at Android again. Okay, well Google decided that anyone can run the Android OS, they just have to make it work on their physical device. So this is why you see Samsung, Motorola, Sony, Asus, HTC, and others. There are so many hardware manufacturers involved, and they all have varying levels of communication with Google itself. Samsung and Motorola have announced a few phones that will be getting ICS upgrades, the Motorola Xoom already received an upgrade a couple weeks ago (and I am a lucky wifi-only Xoom owner, so I was able to get the upgrade). But you will likely not see ICS upgrades for a very long time for phones released prior to Q2 2011, because most companies will focus on their newest devices.

See the difference now? There are just way too many devices on the Android OS, but the upgrades don’t come in unison like they do for iOS, since there are many various manufacturers. You have to wait for them to make the upgrades, unless you take a visit to xda-developers to get a rooted version of ICS.

So even though ICS is the newest and coolest OS, many people can’t access it. I would think that it’s a cooler OS upgrade than iOS 4->5, at least.

So why does this affect developers? Well if anyone has done both iPhone and Android development, they would probably prefer iPhone, because the tools and IDE are so iOS-based, and compatibility and testing is simplified. Android on the other hand – there is this headache of compatibility, finding hacks to go around compatibility, and more.

A simple example is Actionbar compatibility, something introduced in Honeycomb. The actionbar is a design element that Google set out as a menu bar. The thing is, it’s not supported for older versions, and customization needs to be done to ‘create’ your own actionbar on the older OSes. This is done for the Google+ app, and the Google IO app.

Another thing is the Google Maps API. There is a Google APIs version for every existing Android version, so you can easily use Google APIs-4 instead of Android-4 as your target, and for the most part, there’s nothing to worry about because almost all phones have Google APIs library. But what about the handful of phones that do not have the library?

So it’s all about whether or not clients want to be able to satisfy the <2% of users that won’t be able to download the app, or are having issues only occurring on their device. Android developers will -always- have to have it on the back of their mind, even when Jellybean comes out.

Note that I don’t know of the new iOS 5 elements, so I cannot comment much on compatibility for iOS, I just know that a lot of jailbroken iOS tweaks that were made for iOS4 cannot be used on iOS5.

So there’s my shpeal on compatibility and Android vs iOS in the sense of compatibility and getting the latest version as a consumer.

The same thing can be said about laptops. There used to be concerns on whether or not Win Vista could upgrade to Win 7, and etc. A lot of Asus-provided applications might not work after the upgrade, etc etc. There is no worry for Macbooks, since only Apple is doing the software upgrades, everything will definitely work, or there will be a better version you can use. Everyone Windows laptop is different, and has different problems.

So this may make you want to buy Apple products, just for the sake of longitivtiy and ability to receive software upgrades as soon as they are out; or maybe you will stay anti-Apple. Personally I plan to get a Macbook Pro for myself once my Asus deteriorates. I have barely used it this term, and I’m already starting to see it die and slow down. Sad, I know.

So that’s my idea for my Work Term report, I haven’t started it yet but I think I have the basis. Or maybe I should compare A/Vs, but that requires a lot of data collection. I’ll have to see.