A relatively short one this week.
Foul showed up in Old English as ful, which means corrupt or impure (sometimes full was spelled that way, just to make things confusing). It comes from the Proto Germanic fulaz, which can be traced to the Proto Indo European pu-, rot or decay. And one theory is that that word is echoic, as in, people would make that sound when smelling something bad, so it became a word.
And do you know what other words come from pu-? Pus, unsurprisingly. It showed up in the late fourteenth century from the classical Latin pus, pus (eye roll). Also related is putrid, which showed up in the early fifteenth century from the Latin putridus, bad or rotten, from the verb putere, to stink.
Filth is also related, being derived from foul. It was fylþ in Old English (meaning it was pronounced the same as filth) and meant dirt, and that word was taken from ful. It’s also an example of what’s called i-mutation, which is when people get lazy with pronouncing the o/u sound and start pronouncing it e/i. So instead of “foulth” we say “filth”.
Laziness! It’s how language evolves!
Tony Jebson’s page on the Origins of Old English