Now that Android 7.0 Nougat has been released, the top tier OEMs have started to announce when we can expect to see upgrades. Sony has confirmed that the Xperia Z3+, the Xperia Z5 range, and the Xperia X & XA ranges will all get Nougat, while HTC has announced that Android Nougat will be coming to its HTC 10, One M9, and One A9 smartphones. And we know that Google has released Android 7.0 for the Nexus 6, the Nexus 5X, the Nexus 6P and the General Mobile 4G (Android One).

Unfortunately, it looks like some popular devices will miss the party. For example, Sony’s announcement didn’t include the Xperia Z3, HTC’s announcement didn’t include the One M8, and Google isn’t planning to release Nougat for the Nexus 5. These three devices have two things in common. First, their age: they were all released in 2013/2014, making them at least two years old. Secondly, they all use the Snapdragon 800 or Snapdragon 801 processor.

Qualcomm

Speculation about support for Android 7.0 on the Snapdragon 800/801 was further fueled by a tweet from LlabTooFeR, the developer behind the MaximusHD ROM, “Qualcomm will not release graphics drivers for 800/801 CPUs. So HTC One M8 and other devices based on this CPU won’t get official Android 7.0.”

We reached out to Qualcomm for a comment and received the following statement:

“Qualcomm Technologies, Inc. works closely with our OEM customers to implement and support varying versions of the Android OS across our Snapdragon chipsets. The length of time a chipset is supported and the upgradable OS versions available to consumers are subject to the OEM product lifecycle. We recommend you contact your device manufacturer or carrier for information on support for Android 7.0 Nougat.”

So, according to Qualcomm it is an age thing, i.e. the OEMs (LG, Sony, HTC etc) have decided that Snapdragon 800/801 devices have reached the end of their product life cycles. But Qualcomm’s statement and LlabTooFeR’s tweet are at odds with one other. What if another OEM wanted to release Android 7.0 Nougat on a Snapdragon 800/801 device? Would it be allowed?

Sony

Sony was actively developing Android 7.0 for the Xperia Z3. There was an Android N Developer Preview program for the Xperia Z3 that was updated right up to and including Developer Preview 4. Android 7.0 clearly runs fine on the Snapdragon 800/801, so there is no technical limitation from the processor side of things. But DP5 was never released. According to Sony, it was because of reasons “both technical and legal.”

Android 7.0 clearly runs fine on the Snapdragon 800/801, so there is no technical limitation from the processor side of things.

Ola Olsson, of Sony Mobile Communications, expanded on this a bit when he commented on Google+: “Yeah, this is sad but we don’t want to play the blame game which means that we can’t say more about the technical limitations. Even if we really wanted to give you N on the z3(c), we wouldn’t [have] been able to do it. Not if we wanted to pass the Google CTS.”

Google

From that it seems that Google is to blame. So what is the Google CTS? For OEMs to get Google’s seal of approval (and have access to things like the Play Store) each OEM needs to conform with the Android Compatibility Definition Document (CDD), which basically sets down the rules about the software and hardware requirements of a compatible Android device. Then the device needs to pass the Compatibility Test Suite, the CTS.

So, just to recap before we go on. LlabTooFeR says that Qualcomm won’t release the graphic drivers. Qualcomm says that the OEMs are calling the shots. While Sony, which had Android 7.0 running fine on the Snapdragon 801-based Z3, says that Google is to blame. Clear so far?

LlabTooFeR says Qualcomm won't release the graphic drivers. Qualcomm says that the OEMs are calling the shots. While Sony says that Google is to blame.

This then raises the question, what could be in the CDD and CTS for Android 7 that means that the Nexus 5, the HTC One (M8) and the Xperia Z3 can’t qualify? When it comes to processors, we can broadly characterize them using three criteria: the supported instruction set, the GPU, and performance.

Looking over the list of devices that will receive Nougat we find the following:

The devices cover a range of GPUs including Adreno 306, Adreno 430 and Mali-T860.

The devices have a broad performance range from the Helio P10 and the Snapdragon 410 right through to the Snapdragon 820.

Most of the devices have 64-bit processors.

The GPU coverage implies that it isn’t a GPU problem. Devices with the Adreno 306 will get Android 7.0 Nougat and from what I have been told by the Mali GPU group at ARM, Android 7.0 does not mandate the use of Vulkan. Open GL ES is still supported and used in parallel with Vulkan. As for ARM’s GPUs, Vulkan is supported by the Mali-T760 onwards, not just on high-end devices based on the Mali-T880 or Mali-G71. So the assertion that “Qualcomm will not release graphics drivers” is a bit of a red herring.

The assertion that Qualcomm will not release graphics drivers is a bit of a red herring.

Secondly, performance doesn’t seem to be an issue. Devices with the low-end Snapdragon 410 will get Nougat and so will devices with the MediaTek P1, as will high-end devices with high-end SoCs. Nothing here indicates a specific level of performance that the Snapdragon 801 can’t achieve. In fact, my own testing has shown that the Snapdragon 801 is faster than the Helio X10.

But, notice that most of the devices receiving an upgrade are 64-bit devices, or more specifically, ARMv8 devices. So what is it about these 64-bit devices that would mean that the Snapdragon 800/801 is disqualified, but the Snapdragon 805 (the 32-bit processor in the Nexus 6) isn’t? It isn’t the GPU. It isn’t performance. It isn’t any imaginary 4GB of RAM limitation. So what is it?

ARMv8 and the Advanced Encryption Standard

Here is my theory. Google is increasingly keen to mandate the use of storage encryption. For Android 6.0, the CDD stated that, “If the device implementation supports a secure lock screen… then the device MUST support full-disk encryption” and that “the full-disk encryption MUST be enabled by default at the time the user has completed the out-of-box setup experience.”

However, there were some exemptions which allowed older devices to run without storage encryption. The CDD also stipulated a performance level for this encryption “for device implementations supporting full-disk encryption and with Advanced Encryption Standard (AES) crypto performance above 50MiB/sec.”

Android 7.0 Nougat implements file-based encryption, meaning that individual files are encrypted rather than the whole file system. File-based encryption allows Android to use more fine-grained encryption policies and it also enables Direct Boot. At the time of writing this article the CDD for Android 7.0 isn’t available, but you can pretty much guarantee that there is an AES crypto performance level specified and that the CTS will test for it.

One of the extra bits of functionality that comes with ARMv8 is the addition of extra instructions for performing hardware encryption. This means that all ARMv8 SoCs like the Helio P10, the Snapdragon 410 and the Snapdragon 820 can use special hardware in the processor to encrypt data using AES, and that is much faster than using a software-based solution.

So the reasons “both technical and legal” that Sony mentioned could well be that the Snapdragon 800/801 couldn’t match the AES encryption speeds of the ARMv8 chips because it doesn’t have hardware encryption. It seems that the Snapdragon 805 does have the right hardware needed, something Qualcomm added on specifically for that chip. The benefits listed for the Snapdragon 805 include: “full disk encryption and cryptographic functions for Android applications”. This could be why the Nexus 6 is getting Android 7, but other 32-bit Snapdragon based devices don’t seem to be.

The bottom line is this: there is no technical reason why the Snapdragon 800/801 can’t run Nougat. Sony proved that and both ARM and Qualcomm are essentially saying the same thing. But because of Google’s requirement for high speed encryption the Snapdragon 800/801 can’t pass the CTS and don’t comply with the CDD. At least, that is the theory anyway.

The bottom line is this: there is no technical reason why the Snapdragon 800/801 can't run Nougat. The lack of Android 7.0 is more likely due to Google's requirement for high speed encryption.

Wrap-up

One more thought, the Cortex-A32 processor is an ARMv8 processor that can only run in 32-bit mode, however it benefits from the extra instructions including the encryption instructions. If I am right, then this means we could still see other 32-bit versions of Android 7.0 Nougat (besides for the Snapdragon 805), but this time on the Cortex-A32!

At the moment, this is all theory; I think a good theory, but theory nonetheless. All will become clearer when Google releases the Android Compatibility Definition Document for Android 7.0 Nougat and when other OEMs announce their upgrade plans. On the plus side, because custom ROMs don’t need to pass any Google compatibility tests, many of these forgotten devices will still get Android Nougat, albeit via the custom ROM community.

Do you have a theory about why the Xperia Z3, the HTC One (M8) and the Nexus 5 don’t support Android 7.0? Please let me know in the comments below.