The most accepted definition of firmware is something like, programming stored in 'memory which cannot be modified during run-time.' This kind of memory is called 'non-volatile' memory. It's the opinion of the author and several other firmware engineers that this definition, although true, is lacking. It only conveys two things.
- It is some kind of programming.
- What kind of memory it is stored in.
If this is all we have to define firmware, then how do we define a 'Firmware Engineer?' Firmware Engineers program the software which controls engineered machinery and electronic circuitry. See the problem? If you are not an Electrical Engineer, Software Developer, Mechanical Engineer, Computer Engineer or Physicist, there is a good chance you know little to nothing about what firmware is, and what skills are required to program firmware. Let's compare the definitions of the three 'wares' (hardware, firmware and software) found at https://www.merriam-webster.com/dictionary. Note these are all considered nouns.
From https://www.merriam-webster.com/dictionary/software: Something used or associated with and usually contrasted with hardware: such as programs for computers.
From https://www.merriam-webster.com/dictionary/hardware: Major items of equipment or their components used for a particular purpose such as the physical components (such as electronics and electronic devices) of a vehicle ... or an apparatus.
From https://www.merriam-webster.com/dictionary/firmware: computer programs contained permanently in a hardware device (such as a read-only memory).
The firmware definition leaves one 'wanting.' So it programs like software and it resides permanently in hardware. But hardware is 'usually contrasted with software.' per the definition. It's location is 'in' hardware that is not modified during operation. The definition above has a problem. It can be modified these days, just not at run-time. Search for 'Over the air firmware updates' and you'll see that it can be changed, even via wireless technologies. But what is really problematic is that the definition is by no means educational, and provides you little to no understanding of what a 'Firmware Engineer' does. This is a problem for companies, HR departments, educators, and the advancement of the field. I would be willing to bet that if you were to ask High School students, you would get a good number who want to design hardware or design software. How many would want to design firmware?
Today, this is very important! Primarily because the next step in the advancement of the Internet is the mass connection of things to the internet; commonly referred to as the 'Internet of Things' or 'IoT' and the IoT's heavy reliance on firmware and Firmware Engineers to create the firmware!
If you haven't heard of IoT, you will because you already use it and/or are aware of it. Just walk into any home improvement store these days and look for 'Smart Home' products. Let's use the example of a 'smart thermostat'. This is a 'thing' connected to the internet that you can now control, monitor, or use as part of a full scale home automation system, via the internet. This my friends is the IoT. Google 'the IoT' and you will see the billions and billions of dollars all the big players are investing in it and you will know why you should care. The future of the world goes well beyond connecting people. The real magic is in connecting 'things', lots of things, maybe someday 'all things' to each other and to people.
So back to firmware and why my concerns above should resonate.
Smart thermostats, and all smart 'things' use software. Think of mobile apps that read the temperature and send down commands, via the internet connection to the thermostat. Most people 'get this' these days. Software is no longer the lexicon of scientists. It's now something that nearly everyone on the planet knows about and can understand.
Smart thermostats use hardware. Think of the electronics you see when you open up that smart thermostat. The hardware takes in commands and either uses those commands to 'change a setting' such as on/off or send information about the current temperature and so on. This is also part of today's lexicon. Most everyone understands what you mean when you mention electrical hardware.
So what about firmware? What is it and what does it do? Well, what do you know from it's definition? It resides in 'hardware' and is some form of program. Is there firmware in smart thermostats and smart things? Yes. In fact 'always'. You cannot have a smart thing connected to the internet (aka the IoT) without firmware. So firmware is pervasive. Firmware is in every single 'thing' that is an IoT thing. Why? Because something needs to receive and interpret the commands from the software, often these days sent down to the thermostat, using standard wireless communications standards. Hardware doesn't interpret the 1's and 0's sent to it. Firmware reads these 1's and 0's to understand what they mean, and act upon them to tell the hardware what to do.
So think of it this way. Think of firmware as the bridge between software and hardware. It speaks and understands 'geek'. It understands the software information that has been sent to the 'thing' and it understands how to control the hardware electronics in such a fashion as to, in the case of a thermostat, turn on/off the device, the thermostat, read the temperature and display it on the thermostat's display.
Maybe some of you reading this article are having lights go on and aha moments. Here is the aha. A Firmware Engineer who programs firmware needs to have a solid grasp of electronics, software and in general, engineering principles. Not only that but every single 'thing' that is 'smart' and 'connected' to the internet, has firmware in it! We have focused very hard on encouraging next generations to be software developers. This has brought to us the internet and all its incredible power. But the next big wave is the 'Internet of Things' which will require, you guessed it, gobs of firmware engineers.
So maybe 'firmware' needs to be better defined, to represent what it is, and 'used for' like the hardware and software definitions. Also we absolutely need to encourage the next generation to become firmware engineers! Some day 'firmware' should be part of our lexicon in ways similar to software and hardware. Believe it or not when I was young, no one knew what software was, and then came personal computers and a company called Microsoft® which brought software to the masses. Firmware showed up as a 'word' in the 60's. It has evolved in it's meaning and needs to again. In the early days of software a common question clearly was 'What is software.' Something we have managed to answer well. The definition as it stands today, for firmware, doesn't communicate what it is well at all. Search 'Semantic Change.' Firmware could use a bit of that.
About the author:
Bob Scaccia is President and CEO USA Firmware.