Speaking of dense - are you claiming this:
taxi<>vehicle
You have a lot of nerve to call other people dense when you make absurd statements like that.
Let me illustration your example:
taxi=vehicle (100% of taxis are vehicles)
vehicle<>taxi (100% of vehicles are not taxis)
unless you can explain when a taxi is not a vehicle - taxi=vehicle
(as firmware is still technically software)
You don't know when to stop digging. If firmware is technically software - how the heck can you claim firmware is not software!
AAAAARRRRGGGGGHHHHHH!!!!!!! I claimed no such thing. Take reading lessons.
Let's try programming terms. The class Vehicle has an internal property called "WhatDoICallIt," and the constructor initializes this property to "Vehicle" when an object is instantiated. There are various classes that extend the class Vehicle; however, the constructors of many of these child classes override the constructor of the parent class that sets the "WhatDoICallIt" property. Sometimes it's overridden to be "Bus," sometimes "Taxi." In all cases it's still a Vehicle since it's a child of the Vehicle class, but we don't call it that anymore since the "WhatDoICallIt" property has been changed.
Likewise, the class Firmware extends the class Software, but upon instantiation of a Firmware object, the "WhatDoICallIt" proprety is been internally set to "Firmware."