What is OEM kernel?
OEM kernel (linux-oem) is an Ubuntu derivative kernel, specifically for use in OEM projects. The rationales for creating yet another Ubuntu kernel are:
- Standard Ubuntu kernels have a 3-week SRU cadence. OEM projects require fix schedules that often do not align well with that.
- Hardware devices that are not supported by linux kernel directly require the use of DKMS packages, but DKMS package has its own downsides. By including the functionalities of such DKMS packages into OEM kernel eliminate the need for using DKMS packages, so that we can provide a much better out-of-the-box user experience to end users, no matter for the pre-installed image or stock Ubuntu.
It has the following merits:
- allows integration of major new features without impacting other kernels.
- quicker turnaround time for bug fixing.
- improve upgradeability.
- improve out-of-box user experience on certified machines.
The OEM kernel was used to be called OEM staging kernel, because the delta in OEM kernel should all be merged to the generic kernel in the next Ubuntu release, so it is essentially a staging code base.
Differences from other Ubuntu kernels
The delta between the OEM and stock Ubuntu kernel falls into one of these categories:
- Additional device drivers, e.g. i915 drivers to support new Intel graphics, iwlwifi to support new wireless cards or new Realtek card reader.
- New features, e.g. to support Thunderbolt security level or power saving for an existing device driver.
- Bug fixes. In many cases, fixes come from upstream, and so they will not only be applied to OEM kernel but also to stock Ubuntu kernel through the Kernel SRU (stable release update) process.
- Temporary workarounds. For critical issues where a fix does not yet exist at upstream, either the issue is newly found or the proposed fix has not been accepted by upstream, a workaround will be used to fix the issue temporarily, and will be replaced by a proper fix later, which is usually a fix that has been sanctioned by upstream.
In many ways, the OEM kernel is very similar or even identical to the stock Ubuntu kernel. As OEM kernel is based on the stock Ubuntu kernel, it inherits all its updates, from regular updates that come from upstream stable kernel, to all kernel CVE security vulnerability patches. The OEM kernel keeps in sync with the stock Ubuntu kernel by pulling in any new changes (in Git parlance, “rebase”) for every 3 weeks. This way the OEM kernel will always have only a limited delta compare with stock Ubuntu kernel, and not moving farther away from it.
The OEM kernel has the same life cycle as the Ubuntu kernel that it bases on. For instance, 4.13 linux-oem in Xenial has 9 months of support (4.13 is a non-LTS kernel), while 4.15 linux-oem in Bionic has 5 years.
Before the kernel reaches end-of-life, all of the changes made to the OEM kernel will be reviewed to make sure that the kernel in the next Ubuntu release already has the changes it needs. For instance, a driver we integrate in the OEM kernel should also exist in the next kernel. This ensures users a smooth upgrade path — systems that upgrade to the next Ubuntu release will not lose any functionalities or features, nor have any new regression.
Stable Release Updates (SRU) cadence
The cadence of the OEM kernel follows the stock Ubuntu kernel in the optimal case, which means OEM kernel will normally released on the same date as all the other Ubuntu kernels.
If there are patches that need to be added before the next cycle starts, then a re-spin could be done on request. The purpose of the OEM kernel is for accommodating OEM bug fixes that do not align well with the regular SRU cadence.
If there is any out-of-cycle bug fixes you need for your customers, please contact HWE team (Anthony, Timo or Acelan) directly. We will let you know if respin could be done, and by when you could expect the kernel be released.
OEM kernel rebases to the master kernel on every SRU cycle, so it gets the same fixes (including but not limited to CVE fixes) from master kernel.
Where is the source code for the OEM kernel?
- Focal, 5.6:
- Bionic, 5.0:
- Bionic, 4.15:
- Xenial, 4.13:
Sending patches to OEM kernel
The OEM kernel follows exactly the same process for submitting patches as the other Ubuntu kernels, that means the guidelines outlined in Kernel/Dev/KernelPatches for patch submission are followed. Patches have to conform to the format in Kernel/Dev/StablePatchFormat. Use patterns like [OEM-B] to denote the patch is for the OEM kernel in Bionic release or [OEM-5.6] for the 5.6 based OEM kernel.
Should I run it on my machine?
Although the OEM kernel is targeted for OEM projects, it is not a private kernel at all. The kernel package is publicly available in the Ubuntu archive and anyone can install and run it.
However, if it is run on hardware that is not certified by Canonical, we cannot guarantee it works without issues. That being said, there is absolutely nothing added to the OEM kernel that we think will break other hardware. When we accept patches for the OEM kernel, we do our best to ensure they are regression free for any hardware, and are peer reviewed in the kernel mailing list. The maintenance follows other Ubuntu kernel's best practices, security updates are applied timely, and all bugs are tracked in the public Launchpad.
Therefore, it is very safe to run it on any machine.
How to install it?
apt install linux-oem
apt install linux-oem-20.04
What if I found any issues?
Report bug against the linux-oem package on command line by running:
Before Focal, apport-bug linux-oem
After Focal, apport-bug linux-oem-20.04
or go to https://bugs.launchpad.net/ubuntu/+source/linux-oem-20.04/+filebug (after Focal) to report with your web browser.
All linux-oem bugs can be viewed at https://bugs.launchpad.net/ubuntu/+source/linux-oem-20.04.