You may have seen the repeated fights over whether open-source software should be spelled with a hyphen or not. It just flared up on Wikipedia, again.
The rules are clear, in my opinion. Still, the situation is a misery.
First things first: If “open source” is used as an adjective (attribute) in front of a noun, by the rules of the English language it should be hyphenated. Since open-source software is software with the property of having their source code openly available, it is open-source software. The same thing holds for open-source code, open-source projects, etc. This the most common use of the term open-source software.
Notwithstanding, there is a second meaning, where “open source” is not an adjective but rather a noun, and the term open source software becomes a compound noun. (Germans love this!) The meaning of open source as a noun is perhaps best captured as “the phenomenon of open-source software development, its projects, and communities” or some such thing. If open source is used as a noun in front of another noun, like in open source software, it injects a different meaning: Open source software is software about the phenomenon of open source. For example, GitHub is open source software, because it is about open source, even though its source code is not available.
With that, we can have both uses within the same sentence. We can have open-source software like LibreOffice that is not open source software (because it is about office documents, not open source), we can have closed-source software like OpenHub that is open source software (because it is about open-source software), and of course we can have open-source software like the gcc compiler, that is also open source software. Fun!
Will people make these distinctions in practice? Hardly. Should grammar smart aleks give up? Perhaps, but I’m not sure. There is generally value in sharpening your thinking, and language is a key tool for this.