normally kasi kaylangan mo ng programmer para maprograman ang microcontroller ng firmware nya.
minsan nasa field na ang product natin eh may bug pa rin na dapat ifix, like for example yung cellphone natin, ang windows, mga gadgets, etc. napakaimpractical naman na pupuntahan isa isa ng technician yung lahat ng napagbentahan ng product. One way is to let users mismo ang magprogram or update ng device nila.
Impractical din naman kung padadalhan lahat ng customer ng programmer para maupdate microcontrollers nila. Buti na lang may mga microcontrollers na kayang magsulat sa sarili nila at ang nagmamanage ng pagsusulat dun eh yung bootloader. normally nakukuha yung new code through channels na availble na sa product like USB, UART, WiFi, or through SD Card. Ang ginagawa ng bootloader eh babasahin yung mga device na yun then isusulat sa sarili nya.
Bootloaders are programs(na separate sa main application) din na nagrarun when updating. Dapat hindi susulatan ng bootloader yung space kung saan sya nakasave para maiwasan ang problema.