split these up into their own modules, and add interface lists for each os to mock out in os.js