I forked the ariadne bootloader on github and modified the code (mostly simplifications).
One change I made is the bootloader will work even if ethernet shield is not attached. The ariadne bootloader will hang if ethernet shield is not present. Also the time it waits after reset for program upload via usb serial is 1 second if ethernet shield is not present, and 5 seconds if ethernet shield (upload either via usb or tftp) is present (it takes a couple seconds to initialize ethernet). The ariadne boot timeout is 20 seconds. I also fixed all error return messages so it now works.
I have tested this on Arduino Mega and UNO only. On Mega, my test sketch binary size is 92kb. It takes almost 4 minutes to upload with ariadne bootloader. I fixed this so it now takes only 5 seconds to upload.
The code is available herehttps://github.com/d0ughb0y/NetLoad