Generally, tags have been used for requirements only.
As such, when a user makes a software recommendation request and specifies that it can be run on either one OS or another, the idea has been to not tag it with any OS tags because neither OS is truly a requirement (only one is).
This gets a little sticky in some cases. For example, there are a number of questions in which the OP requests a recommendation for either a C or C++ library. They generally tag those questions with both
c++. But this is very similar to the OS example above, where neither language is truly a requirement (only one is). If we are to be consistent, they probably should have neither tag.
There are many other examples of this type of dilemma (but would be TLDR to cite them).
The core question is: what is the desired function of tags? If it's to help people find items that are ABSOLUTELY relevant to the tag, then the tags should probably only reflect when the tag is a requirement. But if it's to help people find a larger set of items, namely those that are LIKELY relevant, then the tags should probably be applied in more liberally.
For example, if a user clicks the
c++ tag, do they expect to see all questions in which c++ is an option or a requirement? If a user clicks the
linux tag, do they expect to see all questions in which linux is an option or a requirement? If a user clicks the
gratis tag, do they expect to see all questions in which gratis is an absolute requirement or a just a strong preference?