Some form of tagging where multiple tags can be assigned to a piece of software should cover most of this.