moving all OS guessing into its own class