A Fountain code is a code of fixed dimension and a limitless block-length. This is a class of codes with many interesting properties and applications. In this talk I will introduce several classes of probabilistic Fountain codes, including LT-and Raptor codes, show tools for their design and analysis, and discuss how they are used today to solve various data transmission problems on heterogenous unreliable networks. I will also talk about the theory of these codes when transmission takes place over non-erasure channels, and low-complexity algorithms are used for their decoding.