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:
- for other entities (customers, addressed)
- for the backend’s «Stores» → «Configuration» section
- for the custom backend forms
- etc.