Some time ago, I built a static program that I wanted to run on an Android tablet. What was my surprise when I saw a message saying "FATAL: kernel too old".
After some investigation, it turns out that GNU libc may assume some Linux features are present during build time. This means that given a minimum Linux version, that built libc might only work on that version or newer.
Since 2014, GNU libc itself requires 2.6.32 as the minimum. Previously, it was 2.6.16, changed in 2012.
Debian, as of 2015, builds it with a required minimum Linux version of 3.2.
To give an idea about the history of these kernel releases, we have:
- December 2009, Linus releases Linux 2.6.32.
- November 2010, Red Hat releases RHEL 6.0, Linux 2.6.32.
- February 2011, Debian 6.0 Squeeze, Linux 2.6.32.
- January 2012, Linus releases Linux 3.2.
- April 2014, GNU Libc requires Linux 2.6.32.
- December 2015, Debian GNU Libc uploaded to unstable requires Linux 3.2.
So, at least for GNU libc upstream, it would appear that not many devices would stop being supported, though the situation would not be as good for binary versions of Debian. However, I have a small list of devices that might show otherwise.
- Nokia N900 shipped with Linux 2.6.28.
- Android emulator, a platform called Goldfish, uses Linux 2.6.29.
- The Wii port most widely tested is based on Linux 2.6.32.
Many Android devices have been shipped with Linux 3.4, but I encountered at least one using Linux 3.0.
So, even though many new devices ship with newer versions of Linux, it's still possible to find some new and older devices using versions older than 3.2, and even versions older than 2.6.32 may be found.
Another interesting note is that, without a few patches, it's not possible to build Linux 2.6.32 with GCC 5 and newer. For that and many other reasons, it's important that we update. For bug fixes, and so we can make progress and use better software are some of the other reasons.
So, it's imperative that we have devices support upstream. Otherwise, the task of doing updates with forward porting becomes daunting. And that's the current state for many devices, which is why I have been trying to use new software with older versions of Linux. But as time passes, I realize how hard a task this is, as most new software these days, even a building block like GNU libc, requires ever new versions of Linux.
For now, most gadgets I have support Linux 3.4 or newer. But not long ahead, that support will be dropped as well. And that means there will be no more updates for those devices. It's a consequence of both targeting time-to-market and programmed obsolescence as business practices. Upstream support is no priority, and maintenance is only that required until the next model is available on the stores.
This is one more reason why we need to have more operating systems available for those devices. Systems that are designed to last more than a couple of years. As I said, upstream support is imperative, but as a step forward, I still believe we can provide the GNU experience to lots of devices out there.