I'm just asking myself how (or if) we can guarantee compatibility between different versions of an application. Let's take "prosody" as an example. Even if we use the "DebianLike" property, there might be different versions of "prosody" in Debian Stable and Debian Unstable and therefore different configurations options available. Is there a way to catch those cases? Another example would be a "generic" property (which works for DebianLike and ArchLinux) for a specific software, but inside these distributions are different versions of the application. Even a "Prosody.installed" might be problematic, if the package has been renamed in a newer Debian release.
withOS
orgetOS
is often used to deal with such differences, varying behavior depending on the Host's defined OS. For example, Propellor.Property.Borg.installed does one thing on Debian jessie and another thing on other versions of Debian. And Propellor.Property.Apt.getMirror generates different urls for Debian and Ubuntu.