As a point of comparison, Microsoft ships its OS across a variety of manufacturers and largely keeps it maintained across them (give or take some exceptions like enterprise environments & the like).

Even unlocked Android phones purchased independently of carriers have inconsistent lengths of support, so it doesn’t seem to be entirely a result of carriers, so…What happened here?

  • svellere@lemmy.world
    link
    fedilink
    arrow-up
    59
    ·
    edit-2
    1 year ago

    Every single answer here is wrong in some way, and I’m very surprised nobody has given the correct answer. And to correct you, OP, Android has never had consistent update support.

    It’s true that it stems fundamentally from the hardware drivers. But it’s not necessarily a problem with Android itself.

    First, Android utilizes the Linux kernel. Linux maintains all drivers within the kernel, and they mostly tell closed-source drivers to fuck off. That being said, you can still run closed source drivers on Linux, but it’ll be up to the driver-maker to maintain compatibility between kernel versions, not the kernel maintainers. This is CRITICAL to know in order to answer the question correctly.

    Hardware vendors like Qualcomm don’t want to open-source their drivers, and thus don’t want to upstream them to the Linux kernel. They also often only offer limited support unless you pay for it. For Qualcomm this has traditionally been 2 years. I think now it might be 3, but let’s go with 2 for the sake of this discussion.

    Thus, if I’m a phone-maker using Qualcomm chips, as are most phone-makers, then unless I pay Qualcomm extra money, they’re only going to guarantee support for 2 years. After that, updating Android further (which usually requires updating the kernel, too) could break the hardware drivers and I’d have no way to fix it. Thus, I only offer my customers support for 2 years at maximum.

    What has Google been doing to fix this?

    Well, several things. First, Google has been asking all hardware-makers to pretty please upstream everything they can into the Linux kernel. This has had decent success, but not everyone will do this. Google has also been upstreaming as much of the Android kernel as possible into the Linux kernel to minimize differences, with the ideal being that the Linux kernel and Android kernel are exactly identical.

    Additionally, Google has developed the Generic Kernel Image, or GKI, which presents a Kernel Module Interface, or KMI. This KMI is a stable interface through which hardware drivers communicate with the rest of the kernel. This is the solution to closed-source drivers. If your KMI doesn’t change and a given hardware module was written against it, you can keep updating indefinitely even when the hardware module is out of support, until you need to change the KMI again, likely for new hardware features.

    Google tried getting the KMI upstreamed into the Linux kernel, but the Linux maintainers seem fairly skeptical of it since it goes against their driver philosophy.

    In any case, Linux has LTS releases that are supported for 6 years. They release a new LTS every year. Each year, Google selects the latest LTS and builds the latest Android version against that release. They can add to the KMI when this happens, but it is frozen for that kernel version from then on. From there, they keep building Android against that kernel version until it is no longer supported.

    Let’s take Linux 5.10 for example. There is android12-5.10. Linux 5.10 is supported for 6 years, so you will also see android13-5.10, android14-5.10, etc. Additionally, Linux 5.15 is an LTS release and was released the year after. So there will be an android13-5.15 that may support newer hardware features than android13-5.10, but they will otherwise both be Android 13. There will also be android14-5.15 and so on until the 5.15 kernel goes out of support.

    I hope that example made sense! This means for a given device releasing with GKI support, it can get up to 6 years of Android updates without breaking hardware drivers. You won’t get new hardware features introduced by newer kernels or KMI versions, but that doesn’t matter on a phone that doesn’t get new hardware anyway, so you’re not really missing out on anything. This is how Google is making updates more consistent on Android.

    EDIT: You might ask, how the heck do custom ROM developers do it, then? How can they pump out new Android versions 5, 6, even 7 or more years after the device is out of support? The answer is, it’s complicated. The key here is the “shim”, which is basically just them reverse-engineering the hardware drivers (called blobs) until the hardware works. They do it on hard mode, essentially. Much respect to the custom ROM devs.

    • Mrduckrocks@lemmy.world
      link
      fedilink
      arrow-up
      10
      arrow-down
      1
      ·
      1 year ago

      Good explanation and lines in with why iPhone get years of support as they have full control of hardware and drivers.

        • ribboo@lemm.ee
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          1 year ago

          I mean an iPad mini 2 would obviously struggle with iOS today due to hardware limitations.

          And you’re very much free to use it, problem is app developers do not find it worthwhile their time supporting older devices (we are talking devices that’s a minimum of five years old, more likely 7-8) so few use them and it impacts what they can and cannot do. Thus it becomes unusable.

          But all Apple apps will obviously still work.

            • ribboo@lemm.ee
              link
              fedilink
              English
              arrow-up
              1
              ·
              edit-2
              1 year ago

              My 10 year old Thinkpad barely qualifies as “running” windows 10, not Ubuntu for that matter. Haven’t bothered trying 11. I do partly agree with you, especially moving forward. But an iPad mini 2 has 1 gb of ram and 16 gb of space, both rather huge limitations for a mobile OS of today.

    • Very_Bad_Janet@kbin.social
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      1 year ago

      Kind poster, I understood about 4% of what you wrote and absorbed 2% (entirely not your fault). Would you say that this explains why Google only supports their Chromebooks for 5 years?

      ETA: My question is based on what you wrote here:

      Linux has LTS releases that are supported for 6 years. They release a new LTS every year. Each year, Google selects the latest LTS and builds the latest Android version against that release. They can add to the KMI when this happens, but it is frozen for that kernel version from then on. From there, they keep building Android against that kernel version until it is no longer supported.

    • Atemu@lemmy.ml
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      This only concerns the kernel which is rather unimportant when it comes to Android updates. You can keep using an ancient kernel for an insanely long time but upgrade the Android userspace. The vast majority of LineageOS devices use the original kernel they released with (+bug fixes, usually).

      Only when Android has a hard requirement on a new kernel feature do you need to actually upgrade it. This is usually end of the line for a device in custom ROMs because it is infeasible to do in most cases.

      Take the Oneplus One (bacon) for example. It was released oven 9 years ago with kernel 3.4 and only lost LineageOS support with Android 12 because that requires eBPF for firewalling apps which is a relatively recent addition to the kernel.

      The shims for the HAL you mentioned are in userspace. The original BLOBs they shim use the original OEM kernel interfaces in order to do their magic. It’s just that Android might require newer/different interfaces from the HAL BLOBs; that’s what the shims are for.