XNA

This is a mini-rant, a short essay refuting a common misconception among users of an Internet forum.
If you think this essay is FUD, feel free to explain why on the essay's talk page.

XNA is a managed execution environment for video games, available on Windows, Xbox 360, and Windows Phone 7.
App Hub (formerly XNA Creators Club) is a $99 per year subscription allowing people with a sufficiently powerful Windows PC to make and run homemade XNA games on Microsoft's Xbox 360 console and Windows Phone 7 devices.
Xbox Live Indie Games and Windows Marketplace for Mobile are online download markets for games created by members of App Hub.

Among major video game consoles, Xbox 360 is the only console with a program like App Hub.
PS3 and Wii have no counterpart; all developers must be "at least this tall" to develop for Sony or Nintendo platforms, with a dedicated office and previous commercial titles, according to Nintendo's developer qualifications. Sony does have the PhyreEngine development kit for making PC games that are easily portable to PS3, but the organizational qualifications to release a PhyreEngine based game on PS3 are still unclear; this press release gives little detail beyond "contact us through e-mail".

Contents

Advantages

The App Hub path to market has one notable advantage over self-publishing a PC game: people are more accustomed to playing single-screen multiplayer games on an Xbox 360.

Disadvantages

With the introduction of the DynamicSoundEffectInstance class in XNA Game Studio 4.0, the last deal-breaking limitation has disappeared.[1]
A couple disadvantages of XNA compared to native PC game development remain:

No unsupported languages

In a nutshell: Genres with conlangs work better on platforms other than Xbox 360.

According to a notice from Microsoft and FAQ entry, the Xbox Live Indie Games submission process requires that all written and spoken text in your game be in one of six specific languages.
Any game containing written or spoken text in other languages, including an inscription in Latin or in the language of a fantasy culture, will fail peer review because the submission "grossly misrepresents content in content info".
This means that, for example, a role-playing game for Xbox Live Indie Games cannot feature an isolated community whose residents speak a foreign language, where one of the goals is to befriend a translator and then come back for clues.
A game like the Hamtaro games for Game Boy Color, where the goal is to learn a fictional community's slang (see Ham-Chat), would be forbidden as well.
But detailed role-playing games work at least as well on a pointing device-driven platform, such as Windows or Android, as they do on a video game console.
So you can just develop this piece of your portfolio for Windows or Android instead of for the Xbox 360 or Windows Phone 7.

Some people interpret the FAQ entry's reference to "made up languages that are documented" as implying that a developer should create a language, use it for a culture in a game, and refuse to document it to the public.
But this would open your game to a denial-of-service attack in which your competitor can make Microsoft take your game down by meticulously documenting the language as it appears in the game (as has been done for Ham-Chat) and then complaining to Microsoft about the misrepresentation.

No ports

One way to make an application work on multiple platforms without rewriting it several times is to use a multitier architecture.
The game logic tier, comprising physics and AI, is written once and compiled for each platform.
Then a "presentation" or "view" tier, comprising graphics and sound engines along with the top level of input handling, is rewritten for each platform.

But this doesn't work so easily with XNA because the XNA ecosystem shares no common programming language with other platforms.
XNA requires all code to be verifiably type-safe .NET IL bytecode.
C++/CLI in the .NET framework has a verifiably type-safe subset, but due to its different syntax for verifiably type-safe pointers, references, and arrays compared to standard C++, a port from standard C++ to the verifiably type-safe subset of C++/CLI will involve a complete rewrite.
And as the program changes, keeping the changes synchronized between a program and its version rewritten in another language will prove laborious and error-prone.
Because it also lacks System.Reflection.Emit (which is also true of Mono for iOS), DLR languages such as IronPython won't run either.

The privileged status of C# relative to other programming languages appears intended to encourage developers to program original, XNA-exclusive games from the ground up in C#.
Such a game won't run on handheld devices without the Mono framework, a clone of .NET published by Novell.
Novell does not make Mono for Android or iPhone affordable for hobbyists who have already graduated from college: the cheapest non-student package costs $400 for the first year and $250 for each additional year.

So because the XNA ecosystem shares no common language with platforms outside the XNA ecosystem, a choice faces you.
Either you can make your game exclusive to XNA platforms or you can invent your own programming language.
The drawback of an XNA-exclusive game is that you lose access to the Mac and Android markets, where a developer can still be the medium-size fish in a small pond rather than the small fish in a big pond.
And as of 2011, Windows Phone 7 has still not become a commercial success.
But that might not be so bad for a game whose design is squarely targeted at devices with a large screen and multiple gamepads.
So a developer can plan to make all "party" style games XNA-exclusive and all other games exclusive to non-XNA platforms.

The other way is to invent your own programming language.
One Slashdot user has suggested that in theory, it may be possible to have a parallel set of C++ templates, one of which spits out managed C++/CLI syntax and the other standard C++ syntax.
Another recommended abusing the C preprocessor.
Yet another choice is to create your own programming language whose compiler outputs either standard C++ or managed C++/CLI.
Still another, which comes with a runtime performance cost but can be made to work for code that isn't a time-consuming inner loop, is to make an interpreted scripting language with interpreters in both standard C++ and managed C++/CLI.

Deprecation

Notes

↑XNA initially had no way to generate and play an audio stream at runtime using purely managed code. One user in the forum discussion about this limitation even suggested that this may have been on purpose to block the creation of emulators that run infringing copies of video games from obsolete platforms. Since then, XNA 4 introduced DSEI, the counterpart to the Allegro library's audio stream API. But what made the wait for DSEI all the more ironic was that Shawn Hargreaves, the head of the Allegro project, was also a regular on the XNA board.