The bootloader built/used in Part 1 and Part 2 is based on the traditional “Atmega”code. This is an older bootloader, which works very well, but it’s fairly large: it takes up close to the maximum 2048-byte limit.
The newer “Optiboot” bootloader is a bit more on the bleeding edge but it is also much slower. It looks possible to compile it down to 512 bytes, but for some reason my build system is allergic to the -mshort-calls directive (avr-gcc gives me a “Internal error”) so I need to remove it to get things to compile, which yields code that is just over 512 bytes. Drats.
Still, reclaiming 1K of space over the traditional bootloader is not bad.