c.1300, "unscathed, unhurt, uninjured; free from danger or molestation, in safety, secure; saved spiritually, redeemed, not damned;" from Old French sauf "protected, watched-over; assured of salvation," from Latin salvus "uninjured, in good health, safe," related to salus "good health," saluber "healthful," all from PIE *solwos from root *sol- "whole" (cf. Latin solidus "solid," Sanskrit sarvah "uninjured, intact, whole," Avestan haurva- "uninjured, intact," Old Persian haruva-, Greek holos "whole").
As a quasi-preposition from c.1300, on model of French and Latin cognates. From late 14c. as "rescued, delivered; protected; left alive, unkilled." Meaning "not exposed to danger" (of places) is attested from late 14c.; of actions, etc., "free from risk," first recorded 1580s. Meaning "sure, reliable, not a danger" is from c.1600. Sense of "conservative, cautious" is from 1823. Paired alliteratively with sound (adj.) from late 14c. The noun safe-conduct (late 13c.) is from Old French sauf-conduit (13c.).
"chest for keeping food or valuables," early 15c., save, from Middle French en sauf "in safety," from sauf (see safe (adj.)). Spelling with -f- first recorded 1680s, from influence of safe (adj.).
A safe program analysis is one which will not reach invalid conclusions about the behaviour of the program. This may involve making safe approximations to properties of parts of the program. A safe approximation is one which gives less information.
For example, strictness analysis aims to answer the question "will this function evaluate its argument"?. The two possible results are "definitely" and "don't know". A safe approximation for "definitely" is "don't know". The two possible results correspond to the two sets: "the set of all functions which evaluate their argument" and "all functions". A set can be safely approximated by another which contains it.