Can somebody explain the difference between a Linux OS patch, Linux kernel patch, vs a firmware upgrade or a BIOS upgrade?
closed as too broad by RalfFriedl, muru, Mr Shunz, user34720, JigglyNaga Apr 5 at 16:11
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
A microcode update is a file from your CPU manufacturer, that is fed to your actual physical CPU and makes changes to its internal, lowest-level programming. Because it takes effect on such a low level, microcode updates are normally not persistent: each time a processor powers up or is reset at the hardware level, a microcode update needs to be reloaded. Microcode updates tend to be very specific to particular CPU make and model.
A firmware update changes/replaces some persistently-stored program code within a specific unit of hardware, that usually deals with operating that hardware in some way. A BIOS or UEFI update is a special case of a firmware update: BIOS/UEFI is the firmware that deals with how your system starts up, detects the various add-on cards and devices integrated on the motherboard and assigns hardware resources for them, configures low-level power management and provides the basic input/output functions that will be used by the bootloader of the operating system.
A BIOS/UEFI update/upgrade can include a microcode update embedded within it: this way, the microcode will be applied at a very early phase of the boot process, to ensure that the operating system will always get the CPU in a state that includes at least that particular microcode level applied to it, and no software can exploit the old "bad" microcode version any more.
In this context, the word patch properly refers to an update that does not include a complete copy of the thing being updated, but just the changed parts. There is a tool that can apply the patch, i.e. take the old version and the patch made for it, and use them to produce a new version that is exactly identical to what the creator of the patch had.
This was originally just a way to minimize the size of the updates, but with proprietary operating systems, it also allows OS vendors to get paid for the OS while distributing updates essentially without restrictions: it would be either impossible or at least incredibly hard to take the full set of patches published for a particular OS and assemble an unlicensed copy of the OS from them, like a giant jigsaw puzzle.
In software development, patches are useful in communication between developers: a source code patch file will describe exactly what's been changed in a human-readable way, so two developers working with the same thing can show each other exactly what modifications they've done to achieve a particular thing by creating patches out of their changes.
With modern Internet speeds and storage device capacities, updates to firmware or software that is already in binary form are not typically released as patches any more: it is far more common to provide a new software package or a firmware file that completely replaces the original. Nevertheless, some people may still talk about firmware patches or OS patches. This may be because they're treating the term patch as equivalent to update, or because they are thinking at the software development level.
When e.g. a firmware bug is discovered, a fix for it may well start its life as a patch applied to the source code of the firmware, and then producing a new binary firmware update file from the modified source code is just a boring, mechanical, repeatable process; the patch effectively is the "interesting part" of the update.
OS patch vs. kernel patch
When someone is talking about "Linux OS patches" without specifying exactly what tool or library is being patched, they're most likely talking about new
.deb or similar package files that completely replace older version of corresponding packages, so "update" or "upgrade" might be a more accurate term. Such a package can be used to update/upgrade a specific part of your operating system: a specific tool, a set of tools for a particular purpose, or a particular system service.
This can also be true about "kernel patches", but it is also possible that the speaker is actually participating in kernel development and talking about patches to the kernel source code. Or they might be focusing on the "interesting part" of a particular kernel update: a source code patch that fixed some bug or introduced a new feature.
A firmware or BIOS patch is code from a hardware or CPU manufacturer which is installed into the writable memory of hardware and are stored in hardware through shutdowns. They could go into the motherboard, a video card, the CPU itself, or into other devices. Turning your PC off does not erase them.
They are retrieved from the drive every time your PC boots, and erased from the PC's RAM when the PC is turned off. (That's the design of a PC, anyway; there are sneaky ways to retrieve the contents of memory after a power-down, but that's outside of the scope of your question.)
What most folks refer to as "Linux" is the kernel plus all the packages which make it a practical tool for getting a job done with a computer, or writing scripts or programs which get a job done with a computer (here including 'entertainment', games and multimedia, as a job). Some folks call that GNU/Linux, to differentiate Just The Kernel (Linux) from the distributions ('distros') with all those packages.