What is the difference between the source models and attribute options?

Source models and attribute options are used in different use cases.
Source models are designed by a programmer, they are filled programmatically. For example, if you need to pull options from an external source programmatically, then create a source model for it.
Attribute options usually created manually by a store’s owner. You can create them programmatically too, by initially they are designed to be created manually in the backend’s UI.

Another difference is that the source models are more generic: yopu can use it not only for the product, but in the different system areas: