Firmware is broken Terminology
Software and Hardware have pretty clear definitions, but when it comes to firmware… I ended up with the horribly vague definition that it's about software that's usually hard to modify or just external to the OS or just scary to update in case of failure. And I wouldn't be surprised to discover yet another common usage that would require to update this definition as it's pretty much a kitchen-sink. And I could bet that no one could say that some software definitely isn't firmware.
The annoying part is seems to serve as a way of hiding that it is in fact just plain software, meaning something you can modify, rewrite, audit, … albeit sometimes with the hardware putting some limits but that says more about the hardware than the software.
In fact you can sometimes avoid such hardware limitations with some flash storage instead, see Flash Cartridges for example, where you can even use data that used to be on a ROM on those, with no modifications to be done but then made easy.
And in a case that happened to me quite few times, what's the firmware of a smartphone or home-router? Is it the whole software that runs on it (usually a Linux-based system stored on flash storage) except some user applications, or it is some parts of the software that runs on it and so which?
If you ask around, you'll get all kinds of answers, meaning that when you say "my phone/router's firmware" it ends up needing clarification, a difficult task if you never thought of alternative ways and near impossible if you're not so sure what the software in question is for.
The fun part of those devices, is how the software they run (main OS, bootloader, software for periperals, …) is almost entirely hosted on a single eMMC, sometimes through the aid of partitions and/or hardcoded offsets+length, meaning you can modify all that software from the OS without the need of dedicated flashing software (like flashrom) or dedicated hardware like an external programmer.
So as you might have noticed, I just avoid the use of the term firmware as much as possible to prefer using something more precise, a rather usual one ended up being "embedded software". I don't expect everyone to do it, but I would appreciate technical people doing so, specially in the libre software community.
Update to address feedback from a comment on lobsters: Right, "embedded software" isn't more precise, but I still find it a better description than "firmware" is, should probably also have given examples of the other cases it encourages: Citing existing implementations (say uboot-like); Directly the name of the software involved, like OpenWRT instead of "router firmware"; …