Many people think that when you create an application, you are stuck with the Operating System that the app is created on. Not true. Code, that creates applications, is a lot like many other things in life: Power Adapters, USB connectors, Video Codecs, or Audio types; there are conversions for everything. There are many people who work at very low level systems that allow your technology to work and be compatible with many other pieces of technology.
For example, the task of getting Microsoft Windows applications to work on Linux, you can use an Open Source app like Wine. In this case, Windows apps can be ported to Linux without compilation changes, but because they are emulated. But with compilation, such as the programming language C and C++, applications and games can be ported to almost any Operating System that exists, just as long as the computer code can be read. The computer code has to be read by your system’s kernel. And although there are many out there: Mach, SunOS, Trix, XNU (Apple), BSD (Unix Port), Amiga; the fact remains that the two largest are UNIX and Windows NT (WinXP, Win7, +many).
This architecture and code is so close as it’s become almost standard that porting code at the base levels is not at all that difficult from an overall point of view. It may seem that there are so many new systems, including Mobile systems such as Symbian, WebOS (discontinued), Sun, BSD, iOS, and many more, but most all derive from the same kernel structure, with just slight variations in which people can call and tag them their own.
Not to dive too deep into the system architecture, but porting code is pretty easy, especially in C and C++. Steam, for example is looking to port all of their games over to Linux as well. Would the cost benefit to picking up 5% of the Linux market place be fruitful? I wonder.