IDE(s): Visual C# 2010 Express/Xamarin Studio/MonoGame/XCode
There’s quite a bit going on in this week’s entry and very little of it has anything to do with actual code.
First I think it’s useful to compare and contrast the XNA Framework with last week’s entry JQuery. Like JQuery, XNA is not a programming language per se but instead is a bundle of pre-coded functions that you can insert into your own code so that you’re not re-inventing the wheel, as it were. Both XNA and JQuery add support for creating animations, games and other types of dynamic content. (Though XNA is primarily targeted at game development and JQuery at Web-based animation.)
That’s where the resemblance ends, however. As we saw last week, JQuery is relatively easy to deploy, can be accessed using a simple text editor and the resulting code can run in any modern Web browser on virtually any computing platform. XNA is more robust and complex and offers more features and power, but requires more complex programming tools and is primarily restricted to Windows PCs and XBox hardware.
This is where my programming odyssey this week turned into an exploration of competing business models. But first, I need to explain how I got to the point where I could produce this:
Since the XNA Framework is a Microsoft product, I fired up Windows and began to search for the software I would need. To their credit, they offer free versions of their programming tools and libraries. After more trouble than I care to go into at this point, I managed to download and install MS Visual C# Express and XNA Game Studio Express, which provided the XNA code libraries. Upon installation I was prompted to install additional software but finally after some time downloading I was able to get things up and running. I then started up VIsual C# Express, loaded up the sample program and tried to build and run the code.
It didn’t like my video card. (We’ll come back to this later.)
Undeterred, a bit of research turned up an open-source project that was porting the XNA framework to other computing platforms. Called MonoGame, it promised software that could not only be coded on Windows, Mac OS and Linux but could also produce games that could run on those platforms, in addition to Android and IOS. While it was not as mature and robust as Microsoft’s XNA Framework, it seemed to be sufficient for my purposes.
I got out my MacBook (my desktop of choice), downloaded Xamarin Studio (a cross-platform IDE) and the MonoGame framework.
Before I could install Xamarin Studio, I was required to install XCode, Apple’s programming toolkit. A quick trip to the Mac App Store later and I was able to finish installing Xamarin. (But remember this, we’ll come back to this later.)
As with Visual Express, I loaded up a sample program and tried to build and run the code.
This time the failure was more complex. It took some searching to find a solution but I eventually succeeded. I won’t bore you with the details, but the solution included sentences like these:
“In the Edit References window, on the .Net Assembly tab, browse to the MonoGame source directory you unpacked. Then find the MonoGame.Framework.dll you built in MonoGame.Framework/bin/MacOS/Debug, and add it to your reference list. Don’t forget to remove the old MonoGame.Framework reference first.”
I finally got it running, made some modifications and produced my program, which amounted to a visual pun. The source code is here, if you’re interested.
But I said the the code wasn’t the point and now is the time to explain that. This week’s exercise got me thinking about business models.
Microsoft is a software company that exerts iron control over the hardware (mostly made by other companies) that runs their flagship operating system Windows. Apple is a hardware company that exerts iron control over their hardware and they give away their operating system and productivity suite. Open source developers are mainly volunteers that want to run whatever software they want on whatever hardware they want but don’t really exert iron control over either. Now let’s review my experiences in light of these three contrasting business models.
While it was a challenge to locate the proper software for my Microsoft solution, once I did, it downloaded and installed with very little difficulty. However, Microsoft’s….oh, let’s say ‘uncompromising’..attitude about hardware caused my program to fail based on detecting an unacceptable video card.
Apple’s programming tools are easy to find, download and install in addition to being free of charge. However, Apple is not interested in building software for other people’s hardware so that any open source code that is not already integrated by Apple is difficult to impossible to do so after the fact, except at a very low level. Hence my requirement to install MonoGame using Xamarin Studio.
Open source software suffers from a lack of quality control and the result of an army of volunteer labor without strong central management.
NOTE: I say this as an avowed fan of Open Source and I freely admit that things have gotten much better.
On the one hand, this model gives your project more flexibility and a much more rapid pace of development and deployment. On the other hand, you wind up shipping sample code that won’t even run without fundamental modifications.
So what’s the point? A business model defines your customer base by producing the precise amount of pain which your customers are willing to endure.
Microsoft customers appreciate the consistency and compatibility of their software and are thus willing to go through extra trouble to install and run it.
Apple customers are very aware that they are paying more up front for their platform of choice but have a much lower threshold of pain when it comes to day-to-day usage. Thus, make the software easy to find, purchase (if necessary), install and use. Better yet, just include it with my purchase.
Open source developers are, for the most part, their own customer base. Their primary motivator is to create software that they themselves want to use and they’re willing to undergo a considerable amount of pain in exchange for the freedom to do so.