Sources: Microsoft In Talks To Acquire Mobile App Development Startup Xamarin
crn.com
crn.com
If Microsoft does proceed, it is a sign that they want their tooling to extend to their competitors' mobile platforms, something that has got to be a difficult business decision in light of pushing their own mobile platform.
I'm not sure it would have been that difficult.
Post-acquisition: instead of developing native with Objective-C and targeting only iOS or Java and targeting Android you can develop with C# and have a "native" experience on iOS/Android. The kicker is now Windows Phone/Windows Store is much more accessible to you [1].
It's lowering the barriers to mobile developers considering Windows.
[1] If you go hard with the code sharing that MvvmCross facilitates [2] [3] you don't have to do that much more to support another platform than developing the native views and binding them to your view models.
[2] Anecdote 1 http://stackoverflow.com/questions/10224376/mvvmcross-experi... "In fact 90% of the code is shared and easily testable."
[3] Anecdote 2 I've used MvvmCross myself and I'd say that I've gotten to 70% code shared across multiple platforms.
Such as?
I presume Qt apps use Qt's built-in UI rendering, with QML for any UI-logic. Slightly different to MVVM in Mono where you recreate native UI's on each platform, but also hopefully means you only need to create the UI once?
Develop in Visual Studio using Xamarin for iOS and Android while writing in C#, now the incremental cost to also developing for WinPhone is much, much lower. And by owning these tools, as well as the WinPhone platform, Microsoft can make that increment almost arbitrarily small.
You are counting the cost delta between writing C# for iOS and Android, something that is not that common, and also writing for Windows Phone. Most teams I know of prefer to write their code using the native toolkits. For them, writing in C# would be an extra cost. Few see writing equivalent code in Objective-C and Java as prohibitive because it's very common to host the bulk of the functionality on servers and only run UI code on the mobile client. UI code has traditionally been non-portable.
For those who are already writing their mobile apps in C# for whatever reason, porting to Windows Phone is already easier than porting from Objective-C or Java.
It uses Mono and is intended for making games however.
Microsoft has tried to pay individual developers to get them to develop for WP, but this is short-sighted and ultimately doesn't address the opportunity cost involved. There are a number of cross-platform mobile tools out there (PhoneGap/Cordova, Telerik Icenium, Xamarin, etc). For a small team, it's damn near impossible to maintain both Android and iOS, let alone Windows Phone.
The fact that Xamarin is compiled to native code and built around Mono makes it a particularly interesting play, since it's probably better suited for games as compared to the HTML 5-based solutions.
I evaluated, and liked, Xamarin a lot. As a .NET developer and part of a very small team, it made a ton of sense for me. The main issue was price - it's very expensive which kind of becomes cost prohibitive for the small team that it is a great fit for.
If Microsoft buys Xamarin and builds it into Visual Studio (or gives it away as part of MSDN/BizSpark), all of a sudden you have a lot of people building mobile apps in C#/.NET - and targeting Windows Phone becomes much, much easier.
Microsoft can't compete straight up with Android or iOS because it doesn't have the same audience that either of those platforms have. But providing tooling that makes our lives easier doing cross platform development is an ingenious trojan horse to getting people to be able to target Windows Phone as well.... or even Windows 8 for that matter since it's just the CLR at the end of the day.
[1] http://tmarman.com/Blog/Post/ba9a711f-dcdb-40b5-bca9-ad6eb5b...
While this isn't much, it tells that not everyone is completely infected with not invented here (NIH) at Microsoft.
Because theyre in 3rd place, theres basically zero cannibalization cost and only the potential upside of "owning the cross platform framework (i.e. the java) of mobile"
As I've said before: I want to live in a world where ms buys xamarin, open sources or provides the software for nearly free. Ms could plausibly win the app wars this way, and by extension mobile.
Of the three/four mobile languages C# is tied with JavaScript for the one I'd most like to spend my weeks working in, and alone in first for the one id most like to mentor a child in.
"code for windows phone, get iOS and android for nearly free" is an extremely compelling proposition.
What makes this not a strategic disaster like OS/2 or android on bberry in my opinion is 1) it is a 3 legged race not a 2 way race and 2) it is a "write in our language, we'll compile to the competitors" not a "we can run our competitors apps"
Do you envision coupling it with other apps or resources? What would be your approach in the introduction stages?
Thanks in advance.
My rationale for that preference is fairly simple: it is, to me, the most expressive. Thus I can focus on teaching concepts over syntax.
I want to live in a world where Mono implements the full .NET Framework and I can run PowerShell scripts on Linux. Somehow I doubt that is part of Microsoft's plan here :-(
Sadly not usable yet. But we welcome contributions ;-)
To operate on Xamarin effectively, in addtion to C#, you need to be able to (1) Make use of Objective C documentation and Stack Overflow, etc. (2) Make use of Java documentation and SO (this is easier). (3) Learn the AXML UI development patterns of Android, (4) Learn the nib UI development patterns of iOS.
For (1) and (2) Most of your corner cases have not been hit by Xamarin devs yet, sure, growing will help this, but it will always be just like Mono and C# documentation -- there is some mono information, but often, you go back to the MS CLR documentation and try to figure out where its not quite the same. So right now, you are looking at let's say your A+ through B- level developers as being 'capable' of handling this. Microsoft needs big box corporate knucklehead "developers" to be able to succeed with their tools go get the kind of traction they need.
I don't say this is an impossible task for Microsoft, in fact, they are second only to jetBrains in terms of developing the best IDE's (that was my #1 hope was that Xamarin would contract with JetBrains for Xamarin Studio) and they certainly have more resources and the expertise to get it done. But it's not a home run, and it's not nearly 'right once, run anywhere'.
This could be a super exciting development, I'll be watching for more!
No way Xamarin has saturated the market with their licensing costs. $1000/yr per seat (for VS integration, last I looked) is cost prohibitive. If this deal lowers that cost significantly, it's a very compelling way to go for lots of devs.
The key part of that is "the market available to it" (Xamarin).
Right now a .NET/Windows shop that wants to have an iPhone app has a choice between doing (1) xamarin, (2) having devs learn native iOS development, (3) try one of the HTML5 app frameworks, or (4) contracts the work out. Certainly in the cases of (2), and (4), and maybe (3), it's entirely possible that a Windows phone version of the app will never be built.
While the ".NET shops only use stuff from Microsoft" meme isn't exactly true, it's accurate in a decent number of cases. If Xamarin is "from Microsoft", though, all of a sudden all of these .NET shops that might be considering options 2, 3, or 4 have a much bigger reason to choose option 1. And hey, now that Xamarin's from Microsoft, I bet they make it really easy to build your iOS/Android app for WP, too.
The way I see it, at this point, Microsoft doesn't want to compete on apps. They're never going to be the primary target for most apps until they have the market share to justify it. So, how to best level the playing field, apps-wise? Make it super-simple to build an app for iOS, Android, and WP at the same time.
Disclaimer: I hate Titanium
Microsoft used to embrace, extend, and extinguish their competition before they got too big and too afraid of their own shadow(and shareholders) with Windows and Office. Honestly, it makes total sense for Microsoft to acknowledge they are running a distant #3 and get as many developers behind them as they can. Make Microsoft the place where real hackers go to write code.
Buying Xamarin is embracing. As is maybe a Nokia Android phone. Microsoft needs to make their own "better" version of Android with their own services and get people hooked on that. Then make the "best" version of Android called Windows A. It's Windows, on Android. Windows A's best features would be closed source and patented. It would potentially crush Android in the mainstream.
I don't think that Microsoft has the guts to try and pull that off, but if they did, it would be a feat.
The best parts of Android are already closed sourced and patented: gapps, all the stuff Samsung, Motorola, HTC etc. add on, the baseband etc.
The market will be better off with MS, Google, and Apple as strong rivals.
Samsung is already in this fight, but surely microsoft would at least beat them.
At best this would be an acquihire. At worst this is a defensive acquisition. I hope it doesn't happen, because nothing good can come out of it.
Mono is also an implementation of that standard, a cross platform one, and open sourc-ish (they do some dual licensing stuff)
Nothing except that it wasn't a priority for them. Maybe it is now.
I'm pretty sure releasing a version of the .NET framework and runtime that works across platform is a little more difficult than changing the target architecture on their compiler settings (does their compiler even support different architectures?)
I'm not saying it isn't possible - just that it wasn't a priority for them. This doesn't mean they don't want or support a cross-platform .NET ecosystem. (If I recall something Miguel De Icaza wrote some time ago, the internal teams in Microsoft have been supportive of Mono.)
Do agree though that if this were an aquihire or defensive move, then it sucks for the rest of us.
And, yes, nothing stopped MS from working on an cross-platform .NET implementation before except strategic direction, but if that strategic direction were to change they'd be better off having the leading cross-platform VM and its developers in house.
LibGDX is using RoboVM these days instead of Xamarin, due to the price. Also anecdotally they found RoboVM runs even faster than Xamarin [2], despite being a young project.
[1]: http://blog.robovm.org/2014/03/robovm-0010-is-here.html
Having suffered through MonoDevelop and now Xamarin Studio (which is much nicer) and the various bugs introduced each time you upgrade Xamarin.Mac and other miscellaneous problems I'd love for Microsoft to come in and:
* Polish Xamarin's tools
* Polish Xamarin's code (and swap out Xamarin's implementation of the core CLR/BCL with Microsoft's own ... presumably MS' GC is two cuts above the Mono one)
* Add more QA to the release process (I don't know how Xamarin.Mac 1.4 got released with a broken NSApplication.BeginSheet implementation)
* Make Xamarin's Visual Studio integration free
* None of those "WCF is Xamarin Enterprise only" licensing restrictions
* Buy MvvmCross too
(Don't get me wrong, Xamarin's platform and what they do is amazing. But even if it works 99% of the time that's still a lot of things going wrong, given the size of .NET. Microsoft's tools and code aren't perfect either but I find I have way less issues with them relative to Xamarin.)
Are you kidding me? Let's suppose Microsoft buys Xamarin and doesn't bury it. Further, let's suppose that they actually pump money into polishing and enhancing their tools. Do you actually believe that Microsoft wouldn't wrap 10 flavors of Student, Home, Business, Pro, and Ultimate licensing around the result?
Too many subtle differences when I've tried it the last time (some years ago). Afterwards we changed our course and stopped using it.
We were mostly interested in using Winforms applications on Windows and Linux - but it didn't really work for our application. I had the feeling that Xamarin wasn't interested in making the code any better for our use - instead they were interested in mobile application development.
If Microsoft baught them I really wished our use case would be improved too.
At the very least it would be part of Bizspark and Dreamspark, as well as the MSDN packages aimed at larger businesses that make a la carte purchasing of these things unnecessary. That's the real barrier: Can I justify $600 more dollars per seat for just VS integration and WCF? No. Can I justify another $2000 for the whole company for that plus a slew of other features? Maybe.
Given all that I think this rumor is premature.
Then again, I did predict this... https://twitter.com/keithwarren/status/430874079776632832
After all, he started GNOME after being turned down at Microsoft, and went on to port Microsoft technologies to GNU/Linux.
Bonobo(COM with CORBA), Evolution(Outlook), Mono(.NET)
I literally laughed out loud at that.
I talked to him at Evolve one evening with a handful of other devs while he does not explicitly say it (he is actually pretty humble) you get the impression that Microsoft would make him a distinguished engineer in a heartbeat if he would only say yes. Huge salary, millions in stock options and a write your own ticket kind of involvement like we saw when Russinovich took a job in Redmond.
Miguel is pragmatic, he sees one of the largest pools of developers (at one time the largest by far) and the opportunity to provide them with an exit strategy of sorts. They are bound to Windows now and Microsoft has to this point seen no value in giving those developers the tooling to take their apps out of the Windows ecosystem - so Miguel did just that.
Couple that with the fact that he saw C# and .NET for what it was, Java done right, and he got on board with the idea - but dont mistake for a minute where his heart is. He is a dyed in the wool lover of Linux. He respects Microsoft as a company and realizes that he can feast off their mistakes and doing big things.
My observation is based on how I see his career since the early GNU/Linux days.
Maybe I am being unfair, dunno.
Note that I do appreciate lots of stuff that come out of Redmond.
C# has been a step up over Java, while .NET went in the other direction, getting all the things that Java got right backwards. In spite of .NET being heralded as the second coming of Java back in 2003, Java is stronger than ever and the ecosystem is probably much bigger than .NET will ever be.
The problem that Microsoft always had, and I don't fully understand the dynamics at play here, is with the ecosystem they've grown. Whether this was on purpose, or due to platform limitations, or it just happened because they attracted the wrong kind of expectations, or maybe because of cultural issues, is up for debate. But the fact is the ecosystem is extremely weak and filled with snake oil offerings, with .NET developers waiting for Microsoft to throw solutions over the wall for everything, while complaining about Java's fragmentation, when in fact Java's fragmentation is its bigger strength, as it's based on open-source that survives and competes and evolves and is a much healthier situation than the clusterfuck that happens when a paternalistic company is in charge, like with Windows Forms/XAML/Silverlight/HTML5.
Yes, Java as a language sucks, but focusing on that while ignoring the JVM and the whole ecosystem around it is a pretty shallow comparisson. Hats off to Miguel, he saw something that he liked and built his own version. But for devs looking to make choices, without imposed constraints, picking .NET over Java makes no sense whatsoever.
Even the original motto, with .NET being a runtime for multiple languages whereas Java was a language for multiple platforms proved in the end to be false. The JVM is not only multi-platform, but technically speaking it is much better at hosting other languages, with proof being the alternative languages implementations such as Clojure, Scala, JRuby, Jython, Groovy and Rhino, all of them popular and with healthy communities.
Here's what Erik Meijer has to say about Scala, btw: https://twitter.com/headinthebox/status/438355100310831104
Here's what the Java ecosystem routinely does, as open-source: http://www.robovm.com/ ; http://oss.readytalk.com/avian/ ; https://github.com/google/j2objc
And here's the best IDE ever, coming from the same people that are making Visual Studio usable: http://www.jetbrains.com/idea/
My only concerns if this were to happen are,
* What happens to Mono on Linux, BSD & OSX? Does Mono simply become a deployment target for mobile devices?
* What happens to MonoDevelop? Will VS be the only way to develop such apps?
* What about the web? I'd love to see a Mono port to pNACL or asm.js. An NACL port already exists, but it would be great to have one codebase targeting almost all platforms.
Either way, as someone considering using .NET with ServiceStack on the backend and Xamarin on the frontend, it's very exciting.
This seems like an odd concern, since Microsoft's tools for Windows are better than Xamarin's tools for Windows. They'd be buying Xamarin specifically for their non-MS tooling.
In general it is what they do.
If they do not do that for Xamarin, it would be a departure.
So, I will wait and see. it does sound hopeful though.
I am sorry, but that generalization merits some sources. Can you give me some examples of Microsoft buying a cross platform tool and shutting it down. Mind you I think you are inferring they purchase to eliminate competition. Not a situation where they buy something like Groove, run with it for a bit, see that it is not getting traction and then kill the product.
Lets turn it around though, can you give some examples of Microsoft buying a cross platform tool and continuing to support multiple platforms with it?
I cannot think of any offhand.
I dont think they necessarily purchased it to eliminate the competition exactly, there is likely something about the tech that they really like/want. or maybe it is the people involved.
My wild guess is that they love the ability to target other mobile platforms easily, and will continue to support that. I do predict though that over time they will discontinue/shutdown/slowdown/disable the ability to develop for those multiple mobile platforms on Mac OS X and Linux. ie, that their goal in this case will be to persuade developers that they should be developing for all mobile platforms on Windows, using C#
Note the date: http://blog.xamarin.com/introducing-ios-7-support/
How does Xamarin do with differences like the Android Action Bar vs. Apple's bar at the bottom?
Xamarin leaves details to do with views and presentation up to you. In a properly designed application using MVVM pattern you can use the appropriate native and best practices per platform.
What Xamarin basically does for you (from my experience using it) is that you can now share the bits of code that are not OS-specific (like your business logic, data access layer, web services etc...). It doesn't try to hide the underlying platform from you though.
It's not a solution for write-once deploy everywhere (those solutions suck anyway).
I started doing an Android app using it and loved it but when it came to pay for the developer version, I couldn't justify the cost - especially for an ecosystem that is constantly changing (and therefore requires constant updates which are also paid). I sucked it up and re-wrote the app in Android Studio. Nowhere close to as pleasant as Xamarin but got the job done.
I'm excited about the muscle of Microsoft getting further behind the platform. It is used surprisingly frequently for iOS apps. Regardless of whether I end up using it, this is a good thing in terms of pressure on Objective-C/Cocoa and Java/Android to improve developer workflows. This is exactly the kind of competition the mobile development space needs.
Mono has its own devs and community.
But what will happen now? Will Microsoft silently kill cross platform, especially linux? What interest do they have not to do it?
Having invested heavily in a linux/mono/web stack this worries me a lot.
I think Unity have a good relationship with MS, so Mono being moved to MS should be good news to Unity -- for a while.
I was waiting for something like this to happen, ever since I watched this video from Hanselman at the Xamarin Evolve conference last year: http://www.hanselman.com/blog/XamarinEvolve2013TalkVideoHowC...
Consider, for example, a Jolla handset running Sailfish, which can run Android apps with the Myriad compatibility runtime. And add to that the ability to run Microsoft .NET apps.
Or, if Microsoft is getting serious about adopting the Android-Asha that Nokia cooked-up: Add a .NET runtime, and now you have either something very interesting, or maybe The Island of Dr. Moreau's OS mashups. But it will be interesting.
Microsoft, buy Unity next and you are set for the next 5 years.
It's more of a replacement for Objective-C on iOS and Java on Android. You'll still need to build two different apps for the two different platforms (possibly more for Android) using two different APIs. However you get to work in a nicer language and can share your core functionality codebase between the two platforms.
If Microsoft was interested in having a cross-platform runtime or a cross-platform IDE, they could have done it years ago.
Now, as some kind of side-effect of buying Xamarin, the have acquired most people behind Mono/MonoDevelop ... how do you think this will work out?
Maybe not immediately, but as soon as someone in the management decides that costs need to be cut, someone will ask the question why microsoft maintains two runtimes, two class libraries, two IDEs, etc. and kill them.
That said, Visual Studio is not a cash cow for Microsoft and making it totally free might be a key move in starting to win back dev mindshare.
I am currently learning Intel XDK but surprised why I have never given Xamarin a thought.
p.s. What about QT creator?
It really is a phenomenal piece of engineering.
Biggest drawback, hard to find examples of things in C# so you have to be able to read documentation and code samples in ObjC or Java and mentally map them to C#.
The integration between the two using Xamarin Studio on the mac felt slightly clunky at times. Tweak UI, hook up event handlers, go back to Xamarin... watch it pull those changes across. If it failed, and it did at times, you could end up repeating changes.
Xamarin Studio is not Visual Studio. Better than Xcode, but it's not nearly the tool VS is.
Final app is a native experience nearly on par, performance-wise, with objective-c stuff. Most perf issues I hit also had more to do with working through iOS patterns & practices (e.g. long table views/lists with custom cells).
The cons are usually friction and requirements to understand more than a single tool/language. You will need to bring up multiple games at once.
There is a 1:1 mapping between iOS SDK and library access in the Xamarin API.
I also did the kata thing and made simple apps to deploy across platforms just because I could. That was fun.
I have produced apps for iOS and Android with it after having written many native apps for both, so the transition was very easy as you use the same API's. You just reuse a lot of non-UI code.
Note that I don't use visual tools for either platforms; not in Xamarin nor native; all UI is handcoded which, for me, has been proven to be a lot faster indeed. Reuse, refactoring and reasoning with UI code are easy that way while these visual aids don't really do anything beyond "Hello World".
QT Creator is nice but when I tried it 6 months ago it was not ready for prime time mobile wise and it is an abstraction over the gui/api meaning it is farther away from the API/device than you would sometimes want.
Intel XDK to me was a horrible experience, but after making so many HTML5 mobile / hybrid apps, I learned to hate the process. It's not ready; just forget about it for now. Make web stuff (responsive, web apps) in HTML5, make apps in something else.
I would suggest learning native (Java/Objective-C) first, getting some good experience with that in, then moving away from the visual tooling like storyboards etc (It's a matter of taste but > 100 apps later I would never use it again unless it improves a lot somehow... and I don't see that happening) and then maybe use something like Xamarin if you don't like the original native languages or want to reuse a lot of code. A more painful way of reuse which is used in games a lot is to write the common code in C++ and only the UI in the native tech. This is not a nice process at the moment IMHO esp as Android requires you to do that via the NDK and I have had issues with that.
I don't want to repeat the comments made by others, but one other other thing that impressed me was being able to compile c# code into a portable class library dll on windows, then just copy the binary to a macbook and link it into my iOS app project. Very cool code reuse.
Not knowing ObjC made getting started on iOS harder than it could have been because examples tend to be in ObjC - although Xamarin have some useful snippets and recipes on their site. Android was easy because of the similarity between Java and C#. You still need to learn the platform APIs, obviously.
Its been some time since I felt so positive about a new piece of developer-orientated technology. Definitely recommended.