Everyone is missing the point. They develop for Windows because they will have the most chance of getting someone to play their game. (95% of installed O/S in PCs).
Speaking from an independent developer's perspective:
Visual Studio + C# + Resharper = .extremely. productive development environment.
Video games tend to require lots and lots and lots of code, so productivity is absolutely critical - especially for independent developers who don't have a dozen man-years to blow on a project. Using autocomplete I can produce raw code an order of magnitude faster than I could by typing out each symbol name by hand. That combined with amazing refactoring/cleanup tools makes windows extremely lucrative for gamedevs.
When it comes to IDEs and things like refactoring and autocomplete, I could never get along with Visual Studio. I mean, the fact that you need Resharper in addition to Visual Studio which costs a lot by itself, is kind of a red flag. Java IDEs have been much more productive for quite some time and I especially like IntelliJ IDEA, being from the same people that provide you with Resharper.
Also, doing games development in C# doesn't make sense to me, C++ (maybe in combination with a scripting language like Lua) being the defacto standard for games. And if you are an independent that values productivity, C# has approximately the same drawbacks as Java. And there are successful games out there that make use of it, like RuneScape, Puzzle Pirates or Minecraft.
I mean, if you value productivity over runtime efficiency and want something that runs on top of a VM, might as well get something out of it, like portability.
C# is actually heavily used by Indies because its the language for Microsofts XNA Toolkit. Many successfull XBLA indie titles (Supermeatboy, Braid, Bastion etc) have been created using it. Using MonoGame you can also bring the games to Linux/OSX/iOS/Android and other consoles (http://monogame.codeplex.com/).
Furthermore the highly popular Unity Game Engine offers C# as its scripting language which is the language of choice for every bigger and serious project because huge projects written in Javascript are alot more pain to maintain.
Part of this is Visual Studio excellent features (you dont necessarily need Resharper).
So there actually is alot of C# in game development these days, mostly used as the Scripting language while the engine and APIs are written in C++.
I think you're confusing "xbox live arcade" with "xbox live." You don't have to create games with XNA to get them on xbox live. I specifically remember C++ code in Indie Game: The Movie (for Super Meat Boy). And I'd bet money that Jonathan Blow, the creator of Braid, prefers C++ over C#.
This isn't to say C# isn't a viable option on consoles. I believe FEZ is all C#...that game is incredible, from an art design standpoint at least. It did have visible garbage collection pauses though.
C/C++ + scripting (Lua, <My own scripting language>) is a killer combination, which won't go anywhere for decades for shear performance reasons.... (Theory : you can always get more performance by using optimised, hand-tuned C/C++ code)
Coming back, proprietary technologies used in $$$ video games, support only windows operating system. Visual Studio can be one of the reasons too.
> Also, doing games development in C# doesn't make sense to me ...
Why not? Not everyone is doing the next Crysis.
> I mean, if you value productivity over runtime efficiency and want something that runs on top of a VM, might as well get something out of it, like portability.
Why don't people learn about compiler design? languages != implementation
Are you aware that Mono also compiles to native code or that .NET on Windows Phone 8 is also compiled to native code?
Having said that, given the prevalence of Windows on the games industry, many studios have migrated their C++/MFC tooling to C#/Windows Forms/WPF, even AAA studios.
Compiling to native code != Performance. Haskell compiles to native code too (ghc)....
Good Graphics and Physics, where required needs performance. As the hardware is improving day by day, our demands are increasing two folds. Just think about the performance we would need, to render the real world as is !!!
We are going towards virtual reality. We need something with very fast optimised runtime.
Some games does not require cutting edge Graphics. Use anything there....
Funny that you say that, I am old enough to have discussed the same issue about Forth vs Assembly, C vs Assembly, C vs C++ and many others language performance issues.
Fact is that eventually the optimizers for the given compiler get good enough for the task at hand and people move on.
Most intensive graphics and physics are already being done on the GPU anyway and there are quite a few ways to target them as well.
Though, GPUs are meant for highly specialized number-crunching, they doesn't have direct access to system memory. One also gets additional latency transferring data between RAM and GPU memory.
Also, GPU is a temporary technology. Wait for some time, and see CPUs getting more GPU like.
Hmm, I always saw each of them as an answer to completely different problem, so I have hard time contemplating this scenario.
How exactly would CPU be more like GPU? What would happen to branching and out of order execution pipelines? Do you see today's complex superscalar cores so cheap and small in the future that you could have thousands of them on single die? What other way is there get vector computations to work as well as scalar computations on same hardware? Would you rather have few superscalar cores and a lot of SIMD's around it? Or do you envision a completely new architecture?
I'm just trying to get a picture of how this would be done. Any reading material would be welcome.
> Though, GPUs are meant for highly specialized number-crunching, they doesn't have direct access to system memory. One also gets additional latency transferring data between RAM and GPU memory.
Yes they do when shared memory is used, not all GPUs have dedicated memory.
Even the PS4 will have shared memory between CPU and GPU systems.
> Also, GPU is a temporary technology. Wait for some time, and see CPUs getting more GPU like.
This is Intel's wish because their GPUs suck, I don't think it will happen.
Runtime inefficiencies are no excuse to use a lower level language - if I had a language that let me write a 2d platformer game in 3 days but pushed every player's computer to their limit, I would use it.
In addition, considering there's languages out there with much, much greater runtime inefficiencies of languages like python being used in the client/server side of massively complex games like Eve Online, there's a lot more that should be taken into consideration when choosing a language other than raw speed.
I'm not sure how portability would be in favor of Java for game development. The number of gaming platforms Unity will run C# on is awesome: http://unity3d.com/unity/multiplatform/ . What can I use to get Java running on the PS3, Xbox 360, and Wii U? As for personal taste, I'd argue C# has a better gaming ecosystem (SlimDX, XNA, MonoGame, the list goes on) and is generally more nicely designed. Interop between C++ and C# is also head and shoulders above most of the other interop options -- the full proper mixed mode debugging straight out of the box is a godsend, and the performance is top notch.
C++ might be an old workhorse for AAA titles needing the best of performance out of the platforms they're targeting (a very specific case), but aside from the loss of productivity, there's plenty of places C++ won't reach: Not everyone has native client, and writing your game as an ActiveX component is easily going to scare people off.
C# is definitely more portable than Java when it comes to games nowadays. You can target all the (big) mobile platforms (WP, iOS, Android) as well as the usual Windows/Mac/Linux. It's also used for Xbox Live Indie and Playstation Mobile games.
A lot of industry domains prefer developing on Windows. I find this culture even in places like embedded programming world.
Want to develop for a TI processor/controller or a Analog devices one? Or anything for that matter? Its a certain that the Linux/Mac tool support is no where closer to Windows. Yes you can argue that you can bypass all that roll out your tool chain and use it. The argument works for a hobbyist set up. If you are doing serious work, which has some form of revenue or business impact at work then its pointless to be solving meta problems when the actual problem is on standby.
Its all about tooling support. If your largest customers are corporate ones. They will inevitably use Windows due to ease of administration and support for tools like Microsoft office. And since most of your customer are using Windows the vendors will always provide a degree of better support for Windows.
With Ubuntu you have one single place to keep all your OS packages up-to-date: apt-get. With Windows, each program installs its own installer, which means boot gets slower...and...slow...er... every time you start it up.
Those updaters all have GUI prompts. Good luck getting them to run remotely, or finding documentation on their command-line parameters (if they accept any).
For that matter, on Linux, you can run commands remotely with ssh. On Windows...there really is no good way to run commands remotely, is there? Other than installing an SSH server in Cygwin or mingw, that is.
And even if you can run administration scripts remotely, Linux distros usually have Bash and Python (at minimum!) installed by default. Although cmd.exe has improved since FOR was introduced, it still leaves much to be desired compared with the flexibility of Linux scripting languages.
>>Why is Windows "easier to administer than Linux"?
Historically speaking desktop Windows has always been easy to administer than Linux. Heck Desktop Linux had no common standard(and still doesn't actually) Want a good standard mail client? Or a spread sheet program? Like it or not Microsoft office has little competition. Its a lot more easier to deal with one true version of Windows, install patches, security updates and other corporate stuff than deal with endless flavors of Linux with each having a different way of doing things.
>>With Ubuntu you have one single place to keep all your OS packages up-to-date: apt-get. With Windows, each program installs its own installer, which means boot gets slower...and...slow...er... every time you start it up.
...
...
Agreed. But that is happening now. Historically Linux had nothing like a Ubuntu.
RDP - Remote Desktop Protocol... runs a remote GUI better than anything in the *nix echosystem. NX is about as close as it gets, and that is still not as good.
That said, you can still put SSH/Telnet on windows even over a VPN. I currently have NodeJS on my servers, so I can run a pretty wide variety of tasks, even through the node REPL interface.
there's way more to 'administer' than using apt-get. All that does is install/upgrade. If it's time for configuration you'll have to dive into /etc, or some subdirectory of ~. And most files you will find there doe not use one unified format. So I thinj the OP means: on Windows you just go to Control Panel / Group Policy editor and those two will get you a long way. Apart from that every GUI application probably has a Tools->Options menu.
Btw "which means boot gets slower...and...slow...er... " basically means you are doing it wrong :P
Most answers offer a triple-A game dev perspective, so here's some indie...
Toolsets are much more obtainable on Windows. That includes cracked apps, educational licenses, and plenty more sources. They're also more expansive; almost anything runs on Windows, even if in an intermediary way. There is also a vast majority of apps that run solely on Windows.
Huge majority of your end users are on it, so you need to have it anyway. Running a VM just to test stuff out is inconvenience to say the least.
Other devs to whom you communicate use it.
Documentation and help all over the internet covers Windows side much better than other OS'. Source files already available for inspection are usually made to compile on Windows.
Macs are expensive and whole experience of being jailed in OSX doesn't really go well with indie attitude. IOS gold rushes somewhat turned game dev eyes on it, but that's dying recently, as more and more devs try to find opportunities on various existing and upcoming Android stores. Toolsets for iOS sucked anyways.
Linux (on which I'm trying really hard to develop a workflow) lacks application ecosystem neccesary to fuel all the game development aspects.
Last, but not least - gaming. We game a lot. And a lot of it is nostalgic, some for inspiration. No other OS offers such a huge quality game title offering as Windows does.
I worked in the games industry for over 10 years. A platform other than Windows was not an option. Microsoft provide a solid platform with an excellent tool set. Not only that but all of the main content authoring tools (3DStudio Max, Photoshop) exist in Windows only (I realise PS exists on other platforms, but MAX did not).
Games studios operate on extremely tight budgets, often a hand to mouth existence on publisher deliverables. This is their only revenue stream. It simply makes no sense to move a team of 50 people to another OS when everything they need and know already exists in Windows.
I've been out of the industry for 5 years now, I still keep in contact with my friends in the industry, and as far as I know things are still the same.
The rise of the game industry happened when Microsoft was the dominant force, thats where the users were and Microsoft made sure that games work great on their platform with DirectX and great Development Tools like Visual Studio.
Its really that simple, wed see alot more Linux games if the market was viable, right now it simply isnt. Even on mobile many games are iOS only because many developers think Android isnt viable yet in terms of monetization while Androids marketshare is bigger than iOS. Looking at that, Linux gaming still has a long road ahead but its getting better, especially when it comes to Indie games.
Vast market share with a far behind #2 competitor? There may be other reasons, but this one is definitely #1 by far. If you really want to ask a question like this, better ask why do they prefer Direct3D over OpenGL, or why aren't they making the games cross-platform. But in most cases, the answer should be the same. Windows is "big enough" and they don't need the other platforms (at least so far - things might change in the next few years).
Speaking as a professional game developer of 14 years, Windows is preferred because of two things:
1. PC Games
2. Visual Studio
Quake was developed using NEXT station (first version of QuakeEd was written in Objective-C and running on it), but since then the tools were transfered to Windows along with the game distribution. Modders could add new levels, change existing assets all on their own machines.
Windows is easy to get, easier to administer, or to say properly - not administer at all, and in the pre-internet years it was not a big deal.
Also all proper graphics cards, drivers were available first on Windows, and Microsoft somehow nailed it with D3D.
Gamers would use Linux if there were lots of Linux games.
Developers would write games for Linux if gamers used it.
The situation is slowly changing, since the rise of widespread broadband has let indie developers break the hold of big publishers on distribution channels, and a fair number of indie developers are willing to support Linux for ideological reasons.
+1 I would say D3D and the best available graphics support are probably at the top of the list... an addendum to that would be More users on windows, which makes D3D even more sane to use.
Now, there are plenty that prefer Visual Studio as well, over other dev environments. I very, very, very rarely do C/C++ coding (forgotten most of what little I ever knew), so can't comment there.. I will say I prefer VS + C# over most of the Java options I've tried... though I am using WebStorm for NodeJS dev (based on InteliJ)
Visual Studio, although apparently beloved, is just an IDE.
Look at the rise of consoles, look at this thread.
See the talk of there not being 'standards' on Linux and consider the biggest way the Linux community gets around that: Open Source codebases that rely on users who are also devs to help fix things up and get them working everywhere.
Linux isn't an ideal 'uniform consumption device', so it's not an appealing target. Now it's starting to get some love because people are looking around and asking 'What about freedom?'.
Direct 3D + windows only sdks + windows only 3d engines + proper graphic card drivers + huge userbase + 3d tools running exclusively on windows + easier binary distribution + not have 50 distribs to maintain + etc ... that's quite easy why , until Linux becomes game developper friendly , linux is dead as a gaming plateform...
I still don't understand that. Simply support ubuntu only, the other distributions will do the rest. E.g. the steam beta worked fine on archlinux and fedora from day one. And if they have problems you can either decide to look into it or ignore it because you officially only support ubuntu.
Firstly historically speaking Ubuntu has gotten famous only now.
Secondly, another distro fan is likely to argue <insert his favorite distro here> should be supported rather than ubuntu because of <insert a pedantic reason here>.
Agree on a standard that works for every one and then we shall talk.
Actually I'm an Archlinux fan but I haven't yet encountered any software targeted at ubuntu that wouldn't work on archlinux too (with some work from repackagers, but as a company you don't have to do it because people who want to use it on an "unsupported" system will).
It's just another linux and everything can be ported from it if necessary. Even unity would work fine, once ubuntu's patched x.org and libindicator were on Archlinux.
As far as I know ubuntu has been the the most popular (for targetting software) distribution for several years now, so why not?
You generally don't develop for a single distro: you develop for linux. Which then works on every distro. If you're optimistic enough you could even try to make it work for every *nix, but whatever.
The only reason steam is made specifically for ubuntu is because it uses apt-get to actually get steam. If valve put more effort into making it like every other linux application nobody on any distro would have trouble running it.