Why portability matters

The XNA Framework runs on more platforms than people tend to realize. There is Xbox 360, and Zune, and Zune HD, and Windows with an NVidia DX9 GPU, and Windows with an AMD DX10 GPU, and Windows with an integrated Intel GPU, and...

I found it interesting but not surprising that the comments on my previous post focused on differences between Windows and Xbox, ignoring the possible variations from one Windows machine to another.

In the years we have been working on XNA Game Studio, we learned several things about making portable APIs:

  • It is impossible to ever make things 100% identical across different platforms
  • But there is still great value in making the attempt
  • It is surprising how much benefit can be gained from even small increases in consistency
  • This is an ongoing journey

Portability is important for several reasons:

  • The obvious: "I want to make a game that runs on more than one platform". This is an interesting goal, but in some ways I think actually the least important reason for having a portable API. Thing is, only a handful of games really make sense to forcibly transplant in such a manner. When platforms have different form factors, screen sizes, and input mechanisms, most games need to be tuned somewhat differently per platform in order to provide a quality experience. Which brings us to...

  • "I want to quickly and easily port my game from one platform to another."

  • "I want to reuse code from my previous game, which was on a different platform from my current project". Related to this: reusing code from samples, tutorials, etc.

  • "I want to learn skills on one platform, then apply that knowledge on different platforms". Related: it would be sweet if my hard-won 1337 skillz did not become obsolete every time a new platform shows up! 

  • "I'm making a Zune game, but want to iterate and test using a PC version of the same project". This is important for developer productivity. XNA Game Studio has great support for deploying and debugging on remote devices, but that is always going to be slower than just running locally on your development PC. The faster a programmer can iterate, the more productive they can be. Plus this lets you use Windows tools such as CLR Profiler and PIX

  • "I want to ship my game on Windows". Xbox LIVE Indie Game developers don't have to worry about this, but as anyone who has shipped a Windows game can tell you, testing the matrix of varying hardware capabilities is not exactly fun!

Some of these goals are easier to achieve than others, but I think they are all worth striving toward.

Comments (10)

  1. Sly says:

    "Developing on Zune, but iterate and test on PC."

    This is very important for us.  Debugging on the Zune HD is an exercise in patience when single-stepping through code.  And we just hope that our profiling results on the PC will help the Zune HD go that little bit faster seeing as we cannot profile at line level on the device.

  2. CiroIp says:

    Yes, I’m impressed by the ambition of Microsoft and XNA trough all my experiments jumping from Windows, Zune, ZuneHD and 360. The effort needed for the different port would be acceptable if only Microsoft had a better ecosystem around the different platform with one centralize download point (I don’t want call it store…) cross promotions a cohesive community etc. Now look like ‘just’ a great toy and experimental geek lab

  3. Óscar says:

    Hi Shawn

    You’re right talking about why portability matters. I’m a professional game developer and we use a multiplatform game engine ( Gamebryo ) because we don’t want to lost our last work and reuse as much as possible in new projects. It doesn’t matter the target platform we’re looking at. by the way great job with your blog i’m a avid reader of it! 🙂


  4. Steve says:

    Portable?  Don’t make me laugh.  Barely portable perhaps, *a* console, *a* handheld device, *a* operating system.  Hell, my OpenGL based game engine already does 3 operating systems, that is already 2 more than XNA, if I bothered to spend 5 minutes porting it to OpenGL ES there would be a whole myriad of phones and portable devices supported as well.

  5. Robert says:

    Its a bit of a stretch to call windows with different graphics cards different platforms.

    If I create a game for windows I would hope that it would work on all windows machines that meet the minimum requirements.

  6. ShawnHargreaves says:

    > If I create a game for windows I would hope that it would work on all windows machines that meet the minimum requirements.

    Hope is a great thing, but hope alone doth not a portable game make 🙂

    The challenge is how to define these minimum requirements, how to check for them, how to know which cards are going to meet your requirements so you don’t accidentally end up excluding a large part of your target market, and how to deal with the many hardware quirks and driver bugs that tend to occur across different hardware especially for users who have not updated Windows for years and are still running ancient drivers!

    The only way to be sure you got this stuff right is to test on lots and lots of different hardware configurations. This is what makes shipping games on Windows tricky.

    So yes, I think it is fair to call Windows a collection of many subtly different platforms. They are all similar for sure, but not exactly the same…

  7. Cardin says:

    I was pleasantly surprised that portability remains a significant issue across Windows platforms. I’m even more impressed by XNA now! Thank you! =D

  8. skytigercube says:

    the step debugging on xbox is fantastic

    but more importantly … you hardly ever need to use it

  9. Allan Chaney says:

    Is this post just a tease to set us up for the soon to be reveal that XNA will run on Windows Phone 7?

    I wish someone would just confirm.  I’m tired of all of the teases.

    Oh wait I think Engadget just revealed that tonight.  But then is that the Indie XNA or the I have to be an approved developer XNA.


  10. ShawnHargreaves says:

    Allan: I must confess, I have been indulging in perhaps just a wee bit of teasing, yes 🙂

    This post from Charlie has some good info:


Skip to main content