They are not distinctly separate things, or even well defined. Firmware is a subset of software; the term typically implies that it is in read-only memory:
- Software refers to any machine executable code - including "firmware".
- Firmware refers to software in read-only memory
Read-only memory in this context includes re-writable memory such as flash or EPROM that requires a specific erase/write operation and is not simply random-access writable.
The distinction between RAM and ROM execution is not really a distinction between firmware and software. Many embedded systems load executable code from ROM and execute from RAM for performance reasons, while others execute directly from ROM. Rather if the end-user cannot easily modify or replace the software without special tools or a bootloader, then it might be regarded as "firm". If on the other hand a normal end-user can modify, update or replace the software using facilities on the system itself (by copying a file from removable media or network for example), then it is not firmware. Consider the difference in operation for example in updating your PC's BIOS and updating Microsoft Office - the former requires a special procedure distinct from normal operating system services for loading and running software.
For example, the operating system, bootloader and BIOS of a smart phone might be considered firmware. The apps a user loads from an app-store are certainly not firmware.
In other contexts "firmware" might refer to the configuration of a programmable logic device such as an FPGA as opposed to sequentially executed processor instructions. But that is rather a niche distinction, but useful in systems employing both programmable logic and software execution.
Ultimately you would use the term "firmware" to imply some level of "permanence" of software in a system, but there is a spectrum, so you would use the term in whatever manner is useful in the context of your particular system. For example, I am working on a system where all the code runs from flash, so only ever use the term software to refer to it because there is no need to distinguish it from any other kind of software in the system.
Answer from Clifford on Stack OverflowHi embeddit! I've been perusing embedded related jobs on LinkedIn recently and had a question of clarification: what distinction, if any, is there between Embedded Software engineering jobs and Firmware engineering jobs? Is there a difference between the hard skills I should develop when pursuing one type of job versus the other?
language agnostic - What is real difference between Firmware and Embedded Software - Stack Overflow
firmware vs embedded software
ELI5: Firmware vs. Software
Advice on breaking into firmware or embedded software
>If you've done firmware and/or embedded - which did you enjoy more and why?
I tend not to consider those as distinct. I'm not even really sure what distinction you are getting at here - the code vs. the electronics?
While specializing is one thing, firmware developers unwilling to pick up a scope probe are of limited use, and hardware designers unwilling to at least modify someone else's working build to twiddle a few GPIOs for testing similarly so. Because we're not talking 8-layer laptop motherboards here, I'd even include board designers with no intention of doing some lab time during the bring up phase.
Eg, knowing a bit about _everything_ is really key, because then you can see the tradeoffs and figure out which part of the system needs the deep-dive to get to the root cause.
Your python background is useful though; these days I probably spend more time on infrastructure code that _interacts_ with my embedded systems, than on the actual hardware or firmware. But the reason I'm working on the infrastructure code is that I know exactly whalet's on the other end of the conversation, because I wrote it.
Typically these are things you learn under fire, eg, you get on a project and you learn what you don't know.
In theory, if you had a really solid application idea and built it yourself leading to a great, popular github repository that could open some doors. In reality, this is a field that's all about being the person people call - embedded is seen as enough of a "black art" outside of the rules of usual software development that outfits will stick with an incumbent solution even if the results are poor, and there's little opportunity to demonstrate that there is in fact a better way until they give up. Conversely, you'll constantly face bosses/clients having read some self-promoting whitepaper on some relatively useless platform and asking if your effort should switch to it...
More on reddit.comIs there any real difference between these two? if ur in one of these two why did u chose one over the over?