Add version to factory for OperatingSystem
return empty operating system when specified nil
Call OperatingSystem.candidate instead of .where