The SAM3X8E comes with a bootloader in ROM.
- Memories
- 256 to 512 Kbytes embedded Flash, 128-bit wide access, memory accelerator, dual bank
- 32 to 100 Kbytes embedded SRAM with dual banks
- 16 Kbytes ROM with embedded bootloader routines (UART, USB) and IAP routines
- Static Memory Controller (SMC): SRAM, NOR, NAND support. NFC with 4 Kbyte RAM buffer and ECC
Since this bootloader does all that the Arduino IDE asks of it, and has a freely available cross-platform command-line upload tool (bossac
) the IDE just uses that. No need to invent the wheel when the wheel does everything you need and even comes with a tin of axel grease.
While technically it is possible to use your own bootloader in conjunction with the existing one (use the existing one to install yours, and then use yours to upload sketches) it requires in-depth knowledge of both the chip and GCC linker ("ld") scripts to set aside a block of memory for your bootloader to reside in and relocate the compiled code around it properly. Too much work when the bootloader that already exists does what you want.
However other chips either don't have a bootloader (like the M0 in the Feather) or don't have one that works as desired (like the DFU bootloader in the ATMega32U4) so a custom bootloader is used on those.
The IDE itself is pretty dumb. It just has a configuration file that says "Execute this command with these parameters to upload the HEX file". It neither knows, nor cares, what the bootloader at the other end of the connection is, nor how it works. As long as there is a command-line executable to do the work it just hands over to it.