If you are one of the "Write Once Run Anywhere" advocates, here is my analysis of where the Mobile/Desktop application world is going.
The world is getting divided again. The groups this time: dotNet(MS), FB/MS and Google/JetBrains.
Here is what is happening. The desktop and mobile OS space is now divided into:
- Apple ( iOS / MacOS )
- Android ( primarily Google, but lot of forks )
Microsoft, with dotNet as the strong foundation, has the best developer experience, with Visual Studio. It is currently enabling its developers to build applications using Xamarin for the mobile and desktop platforms, in a "learn one platform" way. It is using C#/F# as the technology of choice. And if you like these, then definitely explore Xamarin. The last time I evaluated Xamarin, just when Xamarin Forms was being released, the challenge I saw, as with any other multi-platform framework, will be to keep pace with the latest. Things may have changed since then, evaluate thoroughly.
Apple has its ecosystem locked into XCode. Any development that needs to happen for the iOS/MacOS platforms, needs to use xcode as the underlying infrastructure. And, XCode won't work with other languages or tools. So, if you are looking to build something that works on all platforms, look elsewhere.
After Google lost the case against Oracle, JetBrains, the tools company, was quick to pitch its language, and the Android ecosystem just pivoted on Kotlin. Its a great language to work with, and the tooling from JetBrains is really good too. There is some conflict right now between Android Studio and IntelliJ, and that can be an irritant when switching the tools, but I'm sure they will figure it out eventually.
JetBrains is preparing its play on the multi-platform apps story with Kotlin Multi Platform, also referred to as MPP (Multi Platform Project). They are following an approach similar to Xamarin, but with the Kotlin language. You can see this with the recently launched Compose For Desktop project. The alignment of JetBrains to Google is not a chance here, given that Apple refuses to allow anyone close.
All the multi-platform libraries follow the 'Light Weight' UI platform architecture, that renders and last seen very successfully done with Java Swing) Most of the controls translate to platform specific, OS provided implementations, as in Java AWT. And, present a unified component lifecycle across platforms for uniformity and programmability. All frameworks have some kind of
Bridge to allow the applications to reach system specific APIs if needed, to ensure that platform specific functionality is available to the applications, while the "Common" layer figures out the best integration for the multi-platform approach.
Interestingly, each technology stack has exactly one dominant player trying to address the problem, so we will see them growing stronger with the years. The tooling still leaves a lot to be desired, specially if you look at the maturity of functionality when using Docker based development environments with VS Code. But, these are early days.
In Summary, here is landscape:
2021 (and 2022) will be really interesting in this space. I will be keeping a watch, and keep you posted.
About the author: The author, Navneet Karnani, is a Fullstack Veteran with over 23 years of industry experience. Now a freelancer, his profile can be accessed on MandrakeTech
This blog was originally published at mandraketech.in/multiplatform-applications-..