Firmware is by definition the software that is embedded in a machine or device along with a micro-processor or micro-controller to run the device and make it do something, hopefully useful.
The printer attached to your workstation has firmware in it that reads the page description being sent to it and uses this information to drive the mechanism and make dots on the printed page.
Firmware doesn’t know any other language than the one it receives descriptions or commands in from the Host Workstation and it knows of no other hardware than that in which it is embedded in. It is very specific to the task in hand. ie driving this specific hardware to that specific command.
Firmware can be quite complex, Postscript for example is a high level programming language in itself.
G-Code however is a sequence of specific machine instructions. ie
Move to X,Y,Z.
Heat Nozzle to 240 Degrees.
Extrude plastic at 2mm/sec.
Move to new X,Y (still extruding plastic we haven’t issued a stop command).
Stop extruding plastic.
With these commands we have printed out a line of plastic for the layer Z. Each is in fact sent to the RepRap Machine as G-Code style instruction.
The firmwares for RepRap machines are as varied then as the Mechanisms and Electronics in which it is embeded.
Within the RepRap project there are a variety of designs, it is readily apparent though that a majority of people tend to use a common set of Arduino based Electronics and Firmware. Not everyone has all the skill necessary to design and build the whole thing from scratch. So many will go with established components including firmware for their machine. Clearly then Firmware is a key component of a Controller based machine.
There is currently some discussion on the RepRap Forums around building an entirely dumb machine that is controlled by a Host (Workstation) based G-code machine controller ie EMC2.