Initial Linux Support

Note that it does not yet build on Linux. It is just the initial support.