Tuesday, 17 May 2011

MonoTouch/MonoDroid and Xamarin - what now?

If you are in the mono community then you'd have to be living under a rock not to have read that Novell was purchased by Attachmate then (first) heard the rumors that Attachmate Lets US Mono Developers Go and (second) seen Miguel's confirmation/announcement of the creation of Xamarin.

What I think this means is:
  • Mono should be fine. It has always been open-source (see github.com/mono) and receives contributions from a variety or people regardless of who they work for.
  • The MonoTouch and Mono for Android (aka MonoDroid) products published by Novell will effectively stop being supported "as of now". This is based on the fact that none of the devs work there any more.
  • Attachmate hasn't announced any plans for those products - even whether they'll continue to be available for sale (along with the associated activation servers). It's impossible to predict what will happen here... various people are trying to get answers from Novell/Attachmate. Personally, even if Attachmate attempted to continue selling/supporting the products I would choose not to be their customer as soon as alternatives are available.
  • Miguel and the team who built MonoTouch and MonoDroid have publicly announced they're working on comparable/compatible products to be sold by Xamarin (their new company). These new products are 3-4 months away, betas first prior to a real release. They've done it before, they can do it again!
Lots of people (myself included) have invested plenty of time and money purchasing, learning and using MonoTouch and MonoDroid. I even helped write a MonoTouch book (and some guys have been busy with a MonoDroid one too). We are all collectively upset, disappointed and angry (imagine how the devs themselves feel).

All of this uncertainty has provoked a number of reactions, among them suggestions that all the work done on MonoTouch/MonoDroid projects to-date has been wasted or that people should start learning the native SDKs for iOS and Android instead of committing to the Mono alternatives.


Learning the native SDKs has always been an option for anyone interested in mobile dev, but who wants to go to all that effort!? The value proposition for Mono* remains: .NET developers can leverage their existing language and framework knowledge AND code can be written once and re-used across three platforms (iOS, Android and Windows Phone). Those advantages continue to be true - the two products are definitely useable right now (MonoTouch obviously more mature than MonoDroid) - and if you care to take Miguel at his word they have a 'compatible' future. So what to do in the next 3 or 4 months...

I already have a MonoTouch/MonoDroid app written and published (or almost published)
Keep going! If everything is working for you right now, why change? In future you "might" need to port your work to native IF Xamarin's products are late/don't work. But if you start porting now and spend three months doing the conversion and Xamarin succeeds then you'll have wasted a lot of effort! What's more, your existing codebase will form an excellent 'regression test' for the Xamarin previews/betas... make sure you sign up at xamarin.com and participate! Your knowledge and experience with the existing products will be very helpful testing the new bits.

If you are really pessimistic you can still continue on this path - but maybe allocate some of your dev time learning the native SDKs and possibly prototype/porting some of your code. Don't do all of it - just get comfortable with the fact that it's possible while waiting to see how Xamarin develops.

I have purchased MonoTouch/MonoDroid and was planning to use them in future
Why not give them a try anyway? There are multiple benefits of using Mono*, including learning the native SDK APIs from the comfort of a language you know and also being productive more quickly. Think of it like prototyping - you get something working quickly and along the way learn a lot that can be re-used (you WILL learn the iOS/Android APIs).

If your app is single-platform I can imagine this decision might be a close call (and perhaps you should just learn Objective-C or Java) BUT if you are planning a cross-platform solution then you are still going to save time and effort with Mono* and code-sharing. One obvious risk would be the possibility of hitting something that isn't supported/doesn't work in Mono* yet - so do your research.

On the other hand, imagine spending the next few months learning BOTH Objective-C and Java, and producing two incompatible codebases for your app, only to discover that Xamarin rocks!

I'm a consultant and I've recommended MonoTouch/MonoDroid to clients
Ouch. This is bound to 'look bad' since the less your clients understand about the risk/reward of a tool like Mono*, the more they are going think you've stuffed up. In reality, though, the above points still apply - you can offer them the same bet: switch tools now and potentially waste some time or risk 'maybe' porting at a later time but take advantage of the benefits Mono* provides now... after all you recommended Mono* for a reason and many of those reasons are still valid.

I have done this myself - so I know how uncomfortable it feels.

I am interested in MonoTouch or MonoDroid but haven't purchased yet
This is a tough one. I'm not sure that the Novell Shopping Cart or the Activation Server are even working at the moment (activation behind an authenticating proxy is not supported at all). Even if they were, I'm not sure I'd want to give Attachmate my money. Maybe this will become clearer in the coming days/weeks.
You can definitely try out the 'free trial' (emulator only) editions but for a real project that you want to publish on AppStore/Marketplace soon I'm afraid you might need to consider learning the native SDKs or waiting a while... :-(

In conclusion...
I'll be the first to admit this is a very "glass half-full" point-of-view. Lots of bad s**t could happen: support issues with the current products that can't be resolved, legal issues with Attachmate, product delays from Xamarin, unexpected costs or incompatibilities for the new stuff, etc, etc, etc.

At the end of the day, you'll make a decision based on your risk-averse-ness (triple word score!) regardless of my rainbows and unicorns. Just keep in mind that the apparent 'end of life' of the current MonoTouch/MonoDroid products, while sad, is not (yet) the end of the world. In some ways, you can best support Xamarin by continuing to use the existing tools so that you've got something to migrate to their new stuff.

Make sure you've got some peanuts and a towel, and above all DON'T PANIC.

9 comments:

  1. I have confidence in the Mono team and in the code compatibility between what they produce and the current touch/droid products. So, because I own both of these, I think going ahead with current plans is a sound decision, except... I have a sinking feeling that attachmate might be planning to wait for xamarin to see some success, and then sue the crap out of them AND their customers. As long as we don't know what the legal situation is, all mono on mobile developers have a sword of damacles hanging over us.

    ReplyDelete
  2. It's true there are still a lot of uncertainties, however it seems pretty unlikely that Attachmate would be so 'cunning'. It would have been a lot easier for them to keep the team and product in-house than to (a) sack everyone and let the product die then (b) secretly hope that they'll create a startup, manage to successfully clone the products, create a large market for said clones and THEN (c) after all this is done come back and sue.

    Right now I think the main issue for existing customers is support - it probably doesn't exist (except through the community and the good grace of the team) and there probably won't be any upgrades/updates. You have no legal issues continuing to use MonoTouch & Mono-for-Android as-is. You purchased them from Novell and are licensed to use them for as long as you like - nothing has changed there.

    Worry about the rest when there is something concrete to worry about.

    ReplyDelete
  3. I trust Miguel and team to be true to their word. I would suggest people continue work on MonoDroid and then migrate to the Xamarin stack. It definitely beats writing Object C and Java.

    Just my 2 cents.

    ReplyDelete
  4. Point taken Craig, I hope you're right! I think monotouch is mature enough that, for a good year at least, it can be a solid platform as is, and I think the mono folks will still be hanging around IRC to answer the odd question.

    What made me speculate as I did was Attachmate's odd behavior - why hang on to the IP at all if they have no plans for it? Somebody commented on Miguel's blog about Xamarin possibly acquiring the IP from attachmate, and Miguel replied that they weren't being cooperative, if memory serves me right. So, one possible reason to hang onto it is to litigate later. Another possible reason is that the action is truly incoherent because attachmate is a big bureaucratic dolt, which is also totally plausible.

    ReplyDelete
  5. My concern is support for IOS releases during the next 6 months before Xamarin (optimistically) has an alternative solution.

    How likely is it that some IOS release breaks some or all of MonoTouch-deployed apps?

    ReplyDelete
  6. What about unity 3d ? - since mono is open source that should be unaffected :S

    ReplyDelete
  7. Mitch, I think it's pretty unlikely that a new iOS release will break existing apps or prevent you working with existing MonoTouch apps. MonoTouch is built on the same APIs that Objective-C developers are using - and Apple doesn't (generally) want to break things for everyone!
    Of course, any *new* iOS features are unlikely to be supported by MonoTouch... for that we'll have to wait and see what Xamarin comes up with.

    Jan, I don't know what the situation with Unity3D is... perhaps they have some info on their website?

    ReplyDelete
  8. I second Mitch. apple does'nt accept anymore apps nont tested with the last version of Ios. wht will we do in september, when ios 5 will arrive and Monotouch will not support it?
    We can't bet on Xamarin being ready and stable for september.
    And, if it is unlikely that Attachmate will sue Xamarin, it is possible, and that would create big problems for developers who have to publish an app.
    I have to publish an application by the end of september, so for now I will go on the objective-c side.

    ReplyDelete
  9. Sorry I didn't see this comment earlier. You *can* rely on MonoTouch (now Xamarin.iOS) to be ready and stable. As it turns out, for the iOS 5, iOS 6 and iOS 6.1 releases, Xamarin had a release ready within 24 hours of Apple publishing their final version.

    ReplyDelete