This week comes with a focus on programming languages, and specifically cross-platform work.
Crossing the streams
It’s always good to see cross-platform work being done, and this past week there were a couple of events that seem to improve that situation.
First, Xamarin was purchased by Microsoft. Xamarin is a platform that allows you to write iOS and Android applications in C# and .NET. Considering how Microsoft seems to have left behind its Windows-only policy and now focuses on making their products available cross-platform this is an obvious move. It also matches with their decision to open source their Visual Studio Code editor late last year.
While I’ve never used Xamarin, I am familiar with a related open source project that it sponsors1 Mono. Mono is an open source reimplementation of the .NET framework, originally designed to run on Linux. The first time I ran into it was when Beagle, a system wide search tool similar to Apple’s Spotlight, was included on Ubuntu. At the time I used that as my desktop environment and Beagle was a nice tool. As it’s no longer under development I assume it’s been replaced by something else now, but I’m not really on top of that anymore.
More interesting is how the wider Linux community at the time reacted to the use of Microsoft developed technology at the time. This was long before Microsoft changed tactics, and not long after they decried open source developers as communists, so you can probably understand that these reactions weren’t exactly positive. The main fear at the time was that at some point Microsoft would do something2 using the proprietary/copyrighted parts of the specifications to make Mono using code useless.
At the time I didn’t trust Microsoft at all either3, so I’m really happy to see that this has all changed for the better. In fact, judging by their recent acquisitions, I suspect they’ll be a good steward of Xamarin and as they’ll probably want to use it for their own products there will probably be quite a bit of improvements to the product.
There’s more though, because last week someone also made a pull request to Swift that I’ve been expecting since it was open sourced: a port for Android. While it’s not ready yet to be merged into master, a lot of good work has been done by the requester and I believe that in time it will be be included. Obviously this isn’t something that Apple would have done by themselves4, so it again shows the advantages of open source software. To be clear, it hasn’t been merged yet so there’s always a chance that no matter what I believe the Swift maintainers won’t merge it.
But it’s nice to think about what happens if it does get merged, and I’m sure there are a number of developers who build cross-platform apps who would love to be able to use a single language. Of course, that would probably involve a lot of rewriting from Objective-C and Java into a single code base, but combined with the ability to have the server side code in the same language as well that would potentially be a big win in the future.
Obviously, something similar could be achieved with Xamarin and other tools like it as well. And of course, Go has been open source for a far longer time so with the release of Go 1.5 last year it introduced the Go Mobile project. At the time it was called an experimental project for running complete Go applications on both Android and iOS devices. While it’s obviously still under development, I haven’t really heard much about it since. Possibly because I’m not a mobile developer so I don’t pay a lot of attention to things like that.
Regardless of who is first, and which language will win, I love seeing that cross platform development options are opening up more and more. Especially when these efforts are supported by the major companies involved.
Go 1.6
Speaking of Go, it slipped my mind last week to mention that they’ve had a new release. While generally more conservative than Swift5 in their version numbers, 1.6 is mostly an incremental update. The biggest change is support for HTTP/2, but there are some interesting improvements all over the board. Instead of repeating those here though, it’s easiest if you look at the release notes yourself.
-
And most likely is using as the backend for its own product. ↩︎
-
This something could be anything, and probably changed depending on who you talked to. ↩︎
-
In fact, to this day I’m not using any of their products, even though I hear good things about their (often acquired) iOS apps. ↩︎
-
Although I’m sure they’d like to use Swift for their Android apps, both Music and their much-loved Move to iOS app. ↩︎
-
I feel like the version numbering for Swift is more focused on the general public than developers, whereas Go probably only wants to jump to version 2 with breaking changes. That said, Swift does still have a lot of breaking changes so maybe there isn’t a lot of difference after all. ↩︎