If you’ve ever dabbled in custom ROMs or manually installing an Android OS update, you might have come across the term ‘firmware’. When flashing an OS update, the software has to be built for device-specific firmware or hardware. This difference is part of why it can take so long to roll out the latest version of Android to all devices.
It’s not immediately clear, but there’s a critical distinction between firmware and software, the latter of which is probably a much more familiar term. In a nutshell, firmware sits very close to hardware, while software sits on top of the firmware. There’s a little more to it than that, and some areas where there’s room for a little cross-over. So let’s explore firmware vs software a little deeper.
Firmware vs software
Both firmware and software are snippets of code running on the hardware inside your phone and other gadgets. The key distinction is what they’re designed to do, where they are saved, and how easy they are to update and change.
Software is generally considered a program or piece of code designed for user interaction. It’s the “top level” of code that enables users to what they need to. This could be an app on your smartphone, a home screen widget, and just below that even the Android OS itself. Software is usually written in a high-level language, such as Java, with lots of libraries and pre-made functions to ease development.
Software - interactive applications that execute on a device's hardware
Software runs on the CPU and other main processors, making use of RAM and flash storage to save and load data. Another key point is that software can be changed without having to adjust any hardware, making it simple to update. With some exceptions, software is designed to be as hardware agnostic as possible.
Firmware, by comparison, isn’t designed to be directly interacted with by a user. Instead, it’s the hidden “lowest level” of code that runs on your device. Although strictly speaking there can be different levels of firmware, just as we can consider different levels of software. Rather than running on the main CPU, firmware often runs on smaller processors dedicated to pieces of hardware. For example, this could include a memory controller for a flash memory drive. Firmware is typically written in a low-level language, like C, with little library support as the code is highly tailored for individual devices.
Firmware - low level code that controls and configures a device's specific hardware
Firmware is code that configures how hardware should work and provides for its basic functions. It’s the essential backbone that ensures hardware works and can be accessed by higher-level software. Hardware that run its own firmware includes flash memory chips, CPUs, and displays. It can be a bit trickier to update firmware, as software running on top depends on it. This is why you don’t need to restart your phone after updating an app, but will need to when installing a major Android version update.
Keeping your smartphone running
The firmware vs software battle runs inside your smartphone. In fact, the two are essential for keeping everything running smoothly. You’ll never interact with the firmware directly, but it performs a number of important functions.
Firmware inside your smartphone includes code running inside the camera module. This handles image collection and early processing, before handing data off to the ISP and other processing components. Likewise, the display will also have its own tiny microprocessor, complete with firmware, to handle color data, brightness, gamma, and other settings. Even the CPU has its own firmware in the form of a low-level kernel to optimize task scheduling, clock speeds, and power consumption.
Smartphone software includes the Android operating system and then the apps running on top of that. So all of your apps are software, including Facebook, Chrome, Gmail, and the Play Store.
As you can see, you’ll regularly interact with, update, add, and delete software from your device. Firmware remains firmly in the background.