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!
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.
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:
Figure 4 – Market share operating systems
[Source – GlobalStats statcounter https://gs.statcounter.com/os-market-share]
By domain of execution, we have:
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.
Software technically includes firmware, but there are quite a few differences that are worth mentioning:
Figure 5 – Firmware vs Software comparison table