The goal of this project is to make FPGA development much easier and more accessible, similar to the recent advances in embedded firmware development. We will need to address many of the same issues, like how to conveniently load code into hardware, and how to communicate with a computer, and how to support development on more than one operating system. Fortunately, many of the advancements in embedded firmware development are directly applicable so we can learn from them and apply the best practices.
The most operating system agnostic implementation that I have seen is the cloud based ARM mbed environment. While a cloud based development environment has limitations, the use of USB mass-storage class drag-n-drop for programming is a great idea that is spreading. There is a great summary of the genesis of the UF2 file format at the makecode blog which pretty much covers all the reasons why I have chosen to use this for the programming interface in this project.
The UF2 bootloader was originally implemented on the SAMD21 which is very popular at Adafruit. In addition to the bootloader code, there are many other open source programs available for this MCU (like seesaw and CircuitPython). In order to keep the scope of this project manageable, I will use the SAMD21 so that I can spend less time porting to a new platform, and more time on the critical features.