Unlike Raspberry pi, Arduino doesn't use an OS to run the user code. Which makes me wonder if programming Arduino means programming firmware for the board, because by definition firmware is "what functionalizes a system", so when we program Arduino we are creating a custom device. Be it turning led on and off while pushing a button or blinking or Marlin firmware for Arduino based 3d printers etc.
So my question is: does programming Arduino mean programming the board's firmware and are all Arduino sketches essentially firmware?
By definition, firmware means the permanent software programmed into a read-only memory. So, two categories of firmware are used in Arduino: I) Bootloader II) User's Customize firmware.
Just like we flash to install/update EEPROM firmware of a bios in the PC, we flash the Arduino bootloader in a chip. The Arduino board can be configured as a joystick, for example, by flashing Unojoy firmware.
On the microcontroller (Atmega328) chip, customized firmware (in HEX) is burned on the flash memory. Arduino IDE allows ease of programming the firmware at higher level programming and conversion to hex for loading to the microcontroller.