Firmware vs Software

03/08/2021, hardwarebee

This article provides a comparison between firmware vs software. But before we start listing the difference between firmware and software, let’s understand first what is firmware and what is software.


Let’s go!


What is Firmware?


Firmware is a specific sub-category of computer software that provides the low-level control for a device’s specific hardware. Firmware, such as the BIOS of a personal computer, may contain only elementary basic functions of a device and may only provide services to higher-level software. For less complex devices, firmware acts as a complete operating system for the device, performing all the control, monitoring and data manipulation functions.


Firmware is held in non-volatile memory devices such as ROM (Read Only Memory), EPROM (Erasable Programmable ROM), EEPROM (Electrically Erasable Programmable ROM), and Flash memory. Updating firmware requires ROM integrated circuits to be physically replaced, or EPROM/EEPROM or flash memory to be reprogrammed through a special procedure. Some firmware memory devices are permanently installed and cannot be changed after manufacture, with a hardware lock preventing future attempts at overwriting the contents of the flash memory.


Figure 1 – A television remote control is an example of a product that contains firmware


The first person to use the term “firmware” was Ascher Opler, who coined the term in a 1967 Datamation article. Back then, it referred to the contents of a writable control store (a small specialized high-speed memory), containing microcode that defined and implemented the computer’s instruction set, and that could be reloaded to specialize or modify the instructions that the central processing unit (CPU) could execute.


As originally used, firmware contrasted with hardware (the CPU itself) and software (normal instructions executing on a CPU). It was not composed of CPU machine code instructions, but of lower-level microcode involved in the implementation of machine instructions. It existed on the boundary between hardware and software, and thus the name “firmware” was chosen. Over time, popular usage extended the term to include any computer program that is tightly linked to hardware, including processor machine instructions for BIOS (Basic Input/Output System), bootstrap loaders, or the control systems for simple electronic devices such as a microwave oven, remote control, or computer peripheral.


Figure 2 – AMI ROM BIOS firmware on a Gigabyte GA-486TA Baby AT Motherboard

[Photograph © Andrew Dunn, 9 November 2005. Website: http://www.andrewdunnphoto.com/]


In certain circumstances, the various firmware components are as important as the operating system in a working computer. However, unlike most modern operating systems, firmware rarely has an automatic mechanism of updating itself to fix any functionality issues detected after shipping the unit.


The BIOS can be manually updated by the user via a small utility program, but the process is usually quite troublesome. As for the firmware in mass storage devices (hard-disk drives, optical disc drives, flash memory storage e.g. solid state drive), it rarely gets updated, even when flash memory (rather than ROM, EPROM or EEPROM) is used for storing the firmware.


Most computer peripherals are themselves special-purpose computers. Devices such as printers, scanners, cameras, and USB flash drives have internally stored firmware.

With regards to consumer products, as of 2010, most portable music players support firmware upgrades with some companies using firmware updates to add new playable file formats (codecs). Other features that may change with firmware updates include the GUI or even the battery life. Nowadays, most smartphones can update the firmware using OTA (Over The Air) technologies for much the same reasons. In some instances updates to the firmware can even enhance reception and/or sound quality.


In the automobile industry, most vehicles have employed an on-board computer and various sensors to detect mechanical problems. Modern automobiles also employ computer-controlled anti-lock braking systems (ABS) and computer-operated transmission control units (TCUs). All the sensors and other individual chips inside a car are controlled by an engine control unit (ECU), which uses firmware to function, too.


But how do you install or change the firmware? You use a process called flashing. This process involves the overwriting of existing firmware or data, contained in EEPROM or flash memory modules present in an electronic device, with new data. This can be done to upgrade a device or to change the provider of a service associated with the function of the device, such as changing from one mobile phone service provider to another or installing a new operating system.


What is software?


Software is a collection of instructions and data that tell a computer how to work. This is in contrast to physical hardware, from which the system is built and actually performs the work. In computer science and software engineering, computer software is all information processed by computer systems, including programs and data. Computer software includes computer programs, libraries and related non-executable data, such as online documentation or digital media. Computer hardware and software require each other and neither can be realistically used on its own.


At the lowest programming level, executable code consists of machine language instructions supported by an individual processor—typically a central processing unit (CPU) or a graphics processing unit (GPU). A machine language consists of groups of binary values signifying processor instructions that change the state of the computer from its preceding state. An instruction may also invoke one of many input or output operations, for example displaying some text on a computer screen. The processor executes the instructions in the order they are provided, unless it is instructed to skip to a different instruction via a jump instruction, or is interrupted by the operating system.


Figure 3 – Most popular programming languages

[Source – TIOBE index https://www.tiobe.com/tiobe-index/]


The majority of software is written in high-level programming languages. They are easier and more efficient for programmers because they are closer to natural languages than machine languages. High-level languages are translated into machine language using a compiler or an interpreter or a combination of the two. Software may also be written in a low-level assembly language, which has strong correspondence to the computer’s machine language instructions and is translated into machine language using an assembler.


As for the first computer program, an outline (algorithm) for what would have been the first piece of software was written by Ada Lovelace in the 19th century, for the planned Analytical Engine. She created proofs to show how the engine would calculate Bernoulli Numbers. Because of these, she is considered the first computer programmer.


On virtually all computer platforms, software can be grouped into a few broad categories, either by domain of use (where it is used), or by domain of execution (who executes it).


By domain of use, we have:

  • Application software is software that uses the computer system to perform special functions or provide entertainment functions beyond the basic operation of the computer itself. There are many different types of application software, because the range of tasks that can be performed with a modern computer is incredibly large.
  • System software is software for managing computer hardware behaviour, to provide basic functionalities that are required by users, or for other software to run. System software is also designed for providing a platform for running application software, and it includes the following sub-types of software:
    • Operating systems – essential collections of software that manage resources and provide common services for other software that runs using them. Supervisory programs, boot loaders, shells and window systems are core parts of an operating system.

Figure 4 – Market share operating systems

[Source – GlobalStats statcounter https://gs.statcounter.com/os-market-share]


  • Device drivers – operate or control a particular type of device that is attached to a computer.
  • Utilities – computer programs designed to assist users in the maintenance and care of their computer systems.
  • Malicious software (also known as malware) – software that is developed to harm and disrupt computers.


By domain of execution, we have:


  • Desktop applications – applications that run in a desktop environment, like web browsers or Microsoft Office.
  • JavaScript scripts – pieces of software traditionally embedded in web pages that are run directly inside the web browser when a web page is loaded without the need for a web browser plugin. Software written in other programming languages can also be run within the web browser if the software is either translated into JavaScript, or if a web browser plugin that supports that language is installed.
  • Server software.
  • Plugins and extensions – software that extends or modifies the functionality of another piece of software, and requires that software be used in order to function.
  • Embedded software – as firmware within embedded systems, devices dedicated to a single use or a few uses such as cars and televisions.
  • Microcode is a special, relatively obscure type of embedded software which tells the processor itself how to execute machine code, so it is actually a lower level than machine code. It is typically proprietary to the processor manufacturer.


Software is written in one or more programming languages, with many programming languages in existence, and each has at least one implementation, each of which consists of its own set of programming tools. These tools are relatively self-contained programs such as compilers, debuggers, interpreters, linkers, and text editors, which can then be combined together to accomplish a task, or they may form an integrated development environment (IDE).



An IDE can make it easier to do specific tasks, such as searching in files in a particular project or debugging applications. Many programming language implementations provide the option of using both individual tools or an IDE.



Firmware vs Software Comparison


Software technically includes firmware, but there are quite a few differences that are worth mentioning:


  • Software is a set of instructions needed for the computer system to accomplish a certain task. Firmware is a set of instructions needed for the computer system to run properly and execute the specific instructions requested by software.
  • Software includes a vast array of programs and applications, while firmware is quite limited as is usually restricted to device specific code.
  • Software has variable size, ranging from a few KB to tens of GB. Firmware is always compact, with an average size in the range of a couple of KB to at most one GB.
  • Software is written using high-level and low-level programming languages. Firmware is written using only low-level programming languages.
  • Software is designed to be easy to update and/or modify, but firmware, being sometimes proprietary and always essential, is hard or even impossible to update and/or modify.
  • Software is made for the user, while firmware is designed to intentionally run hidden from the user.
  • Software is created to be run by CPUs and GPUs, while firmware is run on smaller or specific processors/controllers.
  • Software is developed over a long period of time, with many iterations and versions along the way. Firmware, on the other hand, is developed quickly and rarely gets updated.


Figure 5 – Firmware vs Software comparison table


Recent Stories