Phones are running old Linux kernels

The Linux kernel evolves constantly and +Linus Torvalds​ is the person who makes the new versions by deciding which new code makes it or not.
The current Linux stable release is Linux 4.3, from November 1st 2015.
Linux 4.4 is in development of course, this is an constant process.

Android phones and other embedded devices are usually not running the latest and greatest however.
Take for example Android device:
Which kernel is yours running?

Linux 3.0: 21 July 2011
Linux 3.4: 20 May 2012
Linux 3.10: 30 June 2013

Right here I have Nexus phones and tablets running all of these.
– Nexus S doesn't receive any update anymore since Android 4.1.2: Linux 3.0
– Nexus 5 and Nexus 7 2013, each running latest Marshmallow: Linux 3.4
– Nexus 9, latest Marshmallow: Linux 3.10

Even the newest one is 2.5 years old: how comes?
The article and its comments develop on that.

Discussion on Hacker News:

#supercurioBlog #Linux

Running a mainline kernel on a cellphone []
One of the biggest freedoms associated with free software is the ability to replace a program with an updated or modified version. Even so, of the many millions of people using Linux-powered phones, few are able to run a mainline kernel on those phones, even if they have the technical skills to …

Source post on Google+

Published by

François Simond

Mobile engineer & analyst specialized in, display, camera color calibration, audio tuning

9 thoughts on “Phones are running old Linux kernels”

  1. I'm to lazy to look at the time tables. But I suspect they use the kernels that were current or close to current at least when they start the work on the bring up for that hw platform.

    And not each device hw. But the underlying hw platform. Krait 200/ 300. Or fusion 2 / 3.

    Start to he work once the chip is taped out. Bring up the BSP. Optimize at OEM level yadda yadda and it stays on that codebase for the life of device. At least that's my thoughts from a far. From a very far.

  2. A few people on +reddit asked about why and what explains how kernel versions end-up being so old so here's my theory:

    It appears there is a substantial shift in how Linux as it is shipped to users is developed today.

    All smartphones and embedded devices rely on huge blobs, starting with the crucial piece that is the GPU driver, accompanied with other platform-specific drivers.
    A lot of the rest is written with the idea that it will be thrown-away quickly, with only requirement the need to function during the year or so the device will be sold to customers and updated before being forgotten by everyone.
    That's instead of aiming at durable design & code build to last within a bigger subsystem, can be maintained, receive fixes and improvements virtually endlessly in mainline Linux.

    What's wrong with that?
    Well, we can't complain, there's a large diversity of Linux-based, Android or not devices to choose from at any time, ever-evolving in their features and capabilities.
    And they work. Maybe not everything is as optimized as it could be but most perform their function with reasonable performance and reliably.
    So it appears to be a good system.

    But there are a few issues still:

    – Primarily, there is a huge amount of waste, due to duplication of efforts by each vendor maintaining their own kernel. Efforts that serve only a short-term purpose.

    – A very large part of kernel development never reaches mainline Linux, and Linux doesn't benefit back in contributions from the ever-increasing amount of professionals relying on the Kernel.
    Linux is a collaborative project by excellence, but it's broken here.

    – Keeping 2+ years old phones working and secure including kernel-side is an almost impossible task for two main reasons
    * Their kernels are not maintained by anyone anymore, and the amount of work required to back-port all necessary security fixes for known exploits + bug fixes that can have an impact on security is a task of extreme complexity.
    * Forward-porting manually the platform-specific code to a newer kernel version or mainline is also an extremely complex task.

    – Eventually, the massive, constant waste and lack of incentive to work together for hardware vendors for everyone's benefit has a substantial cost. The cost is borne by both manufacturers and customers.
    It probably increases the revenue of companies like Qualcomm however, who as a result are not too motivated to change the current situation.
    I'm really speculating here but at that point I imagine that it is in part this waste that explains how Apple can make 95+% of the profit in the mobile industry while Android manufacturers make only little (in comparison), none or negative profit.

    Since Linux mainline won't receive much contribution from mobile vendors who focus on old kernel versions, it's likely they won't take as priority tackling this problem.
    Since hardware vendors get a better cut if they can lock-in customers, it seems unlikely they will desire to change how things are today.

    Does that mean that Android devices will forever stay stuck on Linux 3.10?
    Possibly Google is in the best position to push for a change here for the good of the ecosystem, although it's not in their interest either to annoy those who make the most money from Android.

  3. Simple reason for this is that there is a big part of the kernel code base for Android that is not in the current kernel. Eventually this part will be merged into the mainline, but until then we are stuck with what is released by Google.

Leave a Reply