Friday, June 26, 2009

Why Windows is the best target development platform

For those of you who don't know, I started programming by making games for Windows, and I've recently returned to developing games for the computer. However, like any developer, I was forced to choose a target platform. So should it be Windows, Mac, or Linux? Maybe Darwin?

The definitive answer, I eventually realized, is Windows.

Like any good game developer, you want your game to reach the largest number of users possible. Unsurprisingly, Windows has the largest user base. However, Linux users now have access to a program called WINE which allows them to run Windows programs on their OS.

So, by developing for Windows, I would actually be developing for Windows and Linux. A quick search on Wikipedia as I write this, tells me that 87.90% percent of computers have Windows installed on them and a whopping 1.06% percent have some form of Linux (however that number seems a little too low -- reminding me why Wikipedia isn't the best place for accurate information). In total, assuming that the percentages only accounted for computers with XP or Vista and distros of Linux with WINE, by developing for Windows my games can reach an audience of 88.96% of people with computers. Indeed, there really is no better target development platform than Windows in that case.

Also, as a final note, Microsoft is promising developers that everything they make/code on XP or Vista will be perfectly compatible with Windows Seven. For those of you who follow the Wii Homebrew scene, you'll be glad to hear that developers who installed the Windows Seven beta on their pcs are reporting that devkitPRO works fine.

To summarize: By developing my new game(s) on and for Windows Vista, I'm developing for the largest market audience possible. Even Linux users will be able to use my programs. My programs will also work on future and past versions of the Windows OS as well.


  1. You must also take into account:

    1) There is more competition developing for Windows (this goes hand-in-hand with Window's greater market-share).

    2) The market-share of Windows is gradually declining (is it the best move to code for a declining OS)?

    3) Other OS systems, such as OS X for both Mac and iPhone are growing rapidly. This may be evidence of greater long-term opportunity

    4) Many believe that mobile computing; i.e., iPhone, is the next frontier in all of computing. Coding for iPhone may be a ground-floor opportunity for this next frontier.

    Good luck.


  2. You raise many interesting points, most of which I took into account while writing this but intentionally neglected to mention. Theres an interesting twist to this story, so check back tomorrow ;)

    Also, I agree with what you said about the MAC platform with OS X, the upcoming Leopard, and the iPhone. If I had a computer with a MAC OS, I'd be all over those platforms. (Especially the iPhone/Ipod Touch).

    Thanks for your comment and well wishing :)

  3. I am biased toward mac so bear with me on this... Windows does indeed have a bigger market currently but most developers are going windows AND mac all for the fact that there is an intel chip on every mac made post 2005. Porting libraries that games use doesn't involve an architecture change. Plus, X11 for mac allows all linux written apps to run and with Cygwin (probably spelled wrong...) for Windows, you get 100% of the market if you package it all in one. Just my thoughts.

  4. Forgot to add this one thing... Stability. Windows runs on so many machines that unless you are using the most generic of library someone will be contacting you with an issue because their hardware is too different.

  5. You're forgetting one thing: I'm an open source freeware developer. From my standpoint, the only thing I look at is audience size to get my stuff to reach as many people as possible (and hopefully pick up a few donations).

    If I was selling my programs, I'd probably still choose Windows for a pc OS to develop for or the iPhone/IpodTouch platform as a handheld platform to develop for. (Which reminds me - I hate that you need a Mac to program for those)

    Anyways, despite what I would choose, you'll find out later today that I don't have to choose. Be sure to check back shortly ;)

  6. You neglect the fact that wine is often a pain for Linux users to actually use (it certainly is for me).

    And theres also the fact that wine is far from perfect, so there's no guarantee that your stuff will work on it.

    And last for games, if you use SDL it's really not that hard to keep your code portable to pretty much anything that has opengl...

    (Also if you don't actually test all the differnent windows versions there's no guarantee that anything will work on all of THEM either... wine runs some older stuff vista won't... including at least one game)

    Overall as a FOSS developer your situation is a bit different from a propritary developer, in that if you just write reasonably portable code a Linux developer can probably fix your stuff to work there if they want to, so you just have to not use any windows only stuff and a Linux native version is probably not that hard to get.

    For a propritary developer it's a lot harder, since you actually have to do all the porting yourself there, and it might break at some point... (Although the sorts of things that break old binary only stuff are getting less frequent)

  7. Very faulty arguments.

    As a Linux programmer, my code is 99% of the times cross-platform (that 1% is Windows having problems running it, not me writing platform-specific code). I always use cross-platform libraries (such as SDL) and never write platform-specific code, and that alone makes my software independent from the machine it's compiled on. If your code can't be compiled on two different OSes, it's bad code, regardless of its actual qualities.

    Then, what about Wine? Its performance and ability to execute Windows code is not comparable to how Windows executes programs natively. Sure, it's fine for smaller games and some applications but in many cases you'll encounter problems related to networking, audio or D3D.

    Which brings me to another point: user base. I am a Linux user and I will not buy a Windows-only game to play it through Wine, regardless of its quality. Not because I'm an elitist, just because the developers clearly don't give a crap about me and I don't see a reason to give a crap about them. This may sound harsh but besides DirectX, the Windows APIs are total proprietary, badly written, deprecated crap. Even in the updates. And Microsoft still tries so badly to replicate things Unix had for years.

    If you make a game like Crysis and want to use DX10 because it has a lot of features that make life easier (compared to GL, at least), I'm fine with it. But if you make a small game that could have been done with OpenGL or SDL and you make it Windows-only, say goodbye to my money. Does this mean I would rather spend money on a studio game than an independent game? Yes. Because studios aren't given the same freedom as independent developers regarding their code.

    And the "Windows is more popular" argument is weak, too. Windows is more popular only because of hype and easiness to use. But now we have Linux systems as easy to use (Ubuntu) and more configurable and also free, both as in speech and as in beer. What keeps people away from Linux is the lack of good drivers, which is not Linux's fault (or its contributors) but it's the vendor's faults, which will not release proper drivers and will not release them as Free Software, so that the community can improve them and make them better than their Windows counterparts. That's because Microsoft, Nvidia and the such are all bound by contracts that make them keep the users stuck on Windows so that everyone gets their share of money.

    John Carmack always writes portable code and I respect him a lot for what he did for Linux gaming in general (he even wrote some drivers!). Why don't you do? Use OpenGL instead of D3D, wxWindows instead of Windows Api, Mono instead of .NET. And that's what it takes to write good, cross-platform code, just choosing a library over another. Platform-specific code means lack of abstraction. Lack of abstraction means bad code. Bad code means ten years later someone won't be able to use your software. All these XNA games make me cringe because .NET is terrible and a lot of them are going to be forgotten in a while, even when they are released as open source they use proprietary APIs that make them goofy and obsolete. Bad code.

  8. I wrote this a long time ago. Now I realize that yes you are correct. I've had a lot of experience since than that I didn't have before to back your ideas up. In short: Cross platform is the only true win.