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

I have a few attributes that come with input select or multiselect. I have created source models to provide options for inputs. Everything seems to work (values are saved). But today I realized that also attribute options can be added.

Can anyone tell me what is the difference? Should I use source model or options? I have noticed thanks to this tutorial: Upgrade script - Create new select attribute with options that labels for options ar bind with store ids - how it should look like if I want to add the same options for every store (I have one website and one store). How to add more options for one attribute in sql script?

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:

Important thing is that after installing Magento, user of store can not add options for source model, so attribute options are more useful if you predict that some options will be added