Fountain codes allow individual nodes to store only partial blockchain information such that when many nodes participate they collectively store full information about the blockchain that other nodes can bootstrap from. Normally, storage constrained bitcoin nodes run as pruned nodes without the full block archive and can't help bootstrap other nodes. These sparse nodes, by contrast, can help their peers do full IBD.
By analogy, if a blockchain is a jigsaw puzzle, fountain codes are a process for selecting a random set of puzzle pieces and discarding the rest. Then, if enough nodes store their own random set of puzzle pieces, new nodes can construct the full puzzle by asking many nodes for their pieces. Thus the individual burden of puzzle piece storage is low, like with pruned nodes, but the full puzzle can still be constructed if enough nodes are storing random puzzle pieces.
The post goes into a lot more detail of how the algorithm works, including how to deal with malicious nodes serving bad puzzle pieces. Also, it explores how to choose puzzle pieces, what a puzzle piece actually is, and the tradeoffs of different sub-puzzle sizes, storage benefits, etc.
This is research coming out of Vinteum I believe, and was motivated by roasbeef's tweet about them.