But see your second paragraph is what really bothers me about Apple. Linux is no less a workable and stable development environment than OSX, there is no technical reason why I should not be able to develop Windows, OSX, BSD, iPhone, etc in Linux.

Well, its is always harder to developer for the platform you don't run.  It doesn't matter what your environment.  When you start entering into the Embedded world, its not as easy to just "start developing".  The compiler doesn't run on the device so your PC has to have tools that can generate run-able code for a architecture your PC doesn't even run.  If it hasn't been done for you by the company you have to build cross compilers, scripts that work on every platform, etc.  These things really add up.  As the owner of the Embedded/Mobile platform you end up supporting your developer environments for Every single OS more than the actual product you're building the environments for.

If you're wanting to go more with Desktop applications the choices are much more easy to get an experience that works on OSX/Windows/Linux/BSD.  I do it every day.  You just have to make choices that support cross-platform development.  If you're going to be building GUI interfaces, use Qt4.  If you are going to be doing a lot of back end services etc make sure you use libraries that work on Unix and Windows.  (I've almost had to make NO development changes for OSX vrs Linux).  Most of the "porting" comes from trying to support Unix and Windows.  Use OSS software like PostgreSQL and MySQL instead of MSSQL or Oracle.


Also, if you stick with something like OpenGL ES, your son will find that when he does go to start writing games on any Android/iOS/Mobile device that most of what he knows actually applies to all the platforms.


  Tom