You don't have to choose the rate before transmission. Reed-Solomon code is equivalent to sampling a K-degree polynomial. You can sample it all you want, i.e. increase N on-the-fly, up to the number of the elements in your field, if finite. Say, you want to broadcast your K blocks
to L recipients reliably: after you have sent the K blocks you start sampling the polynomial and sending the redundant blocks. You don't need to decide a priory how many redundant blocks you will send: as soon as the last recipient reports receiving K blocks you are done.
GF(2^64) is as good as infinite in that scenario.
+ Are there practical problems using this in the real world?
+ Are there implementations of fountain codes?
+ Why haven't we replaced our traditional file transfer processes with fountain codes?
Could someone familiar with the topic please answer?
Some time in 2006-2010, while I was working on Google's web search infrqstructure, we switched to fountain codes for copying the index around the world.
The downsides are increased CPU usage and poor cache locality. Naive implementations aren't compatible with streaming or otherwise starting to use/play data/content before transfer is complete.
Without TCP, you'll probably need to implement TCP-friendly flow control.