there are a lot more C# programmers out there than Java or Objective-C programmers. (Microsoft says there are more than 8 million of them, in fact.) If you could give these developers an easy way to write iOS and Android apps using just C# and .NET, you’d be opening up the mobile market to a huge new talent base.
That’s exactly why Friedman and de Icaza wanted to pry Mono out of Attachmate. With just a little monkeying, it turns out, the Mono runtime environment can be made to run on iOS and Android, which means applications written in C# can too.
“We think the mobile, post-PC app development world is going to be the biggest software market of all time,” says Friedman. “But there isn’t a single dominant platform and we don’t think there’s going to be one. So you have all of this energy going into supporting Android and iOS and maybe Windows. How do you do that and still deliver a great experience? It’s an unsolved problem, but we believe we have a unique tool that is really fantastic.”
What Xamarin actually sells is access to an integrated development environment, or IDE, called MonoDevelop, and a way for programmers to compile their finished C# programs into packages that will run on iOS and Android devices. These packages include a specialized version of Mono (it’s called MonoTouch on iOS, and Mono for Android on Google devices) that serves as a runtime environment, mediating between the C# code and the native operating systems on the devices.
MonoDevelop provides special software hooks so that apps can communicate with mobile hardware components such as cameras, microphones, and accelerometers, and also includes tools for debugging and performance analysis. Finally, it connects with Xcode Interface Builder, the tool that most iOS developers use to develop icons, buttons, and other user interface elements for iPhone and iPad apps; on the Android side, Xamarin provides a custom interface design tool that Friedman says is better than anything else available to Android developers.
The apps Xamarin users create using C# end up looking just like native apps—because they are, Friedman says. “We are the only ones who give you a way to share code and have no compromises on the native access,” he says. “We have customers like Rdio who have never programmed any C# before, but they thought it was a better way of writing mobile apps, so that’s why they adopted it.”
When I said before that mobile developers have to know either Java, Objective C, or C#, that wasn’t quite true. There’s another possibility: you can write your app in the languages of the Web—HTML5, CSS3, and JavaScript—and enclose it a native “wrapper” before installing it on a given mobile device. That’s the approach taken by PhoneGap, a mobile development framework that’s now owned by Adobe. And there are even more options than that: If you write JavaScript-heavy code, for example, you can use a framework like Appcelerator’s Titanium, and if you program in Ruby you can use Rhomobile’s Rhodes.
As you might expect, Friedman is a critic of all of these “write once, run everywhere” approaches. Each adds a layer of software abstraction that detracts from performance, he says. On top of that,