Expertise

Cross-Platform Development

Looking for Cross-Platform Development? Give us a call.

Cross-platform development involves the creation of a single program which operates on multiple operating systems, typically including Windows, Linux, Mac and Mobile. Some applications can even deliver a consistent experience across desktop/mobile, although they aren't necessarily written in the traditional cross-platform sense (i.e. they may look and function the same, but use completely different technologies under the hood). An example of this is Minecraft - Java on desktop, and C++ on Windows mobile/Android/iOS/Xbox.

Introduction

With the growth of Linux and the resurgence in popularity of the Mac, software product developers are coming under increasing pressure to deliver versions of their products for these additional platforms.

Blueberry’s primary expertise lies in Windows custom software development, but we have recently become involved in a significant C++ cross-platform product development, which required us to gain skills in this complex area.

This page presents an introduction to cross-platform development which we hope will be useful to some potential customers.

Platform Specifics

Before looking at the options available for cross-platform development, it’s worth taking a quick look at how normal applications are developed for the main platforms:

Windows   

Most installed applications are developed in C++ or .NET, and typically have large dependencies on Microsoft libraries and usually some third-party components. GUI is delivered via Microsoft APIs.

Mac

Most installed applications are developed in Objective-C and Swift, and use OSX’s in Cocoa library for GUI. The OSX is a certified POSIX compliant version of Unix, but it’s quite heavily customised.

Linux

Most installed applications are developed using the GNU C Compiler Collection, and use one of the two major UI toolkits, Qt or GTK, to manage the GUI parts of the application. Many applications are delivered to users as a source code bundle. Otherwise, they are compiled and packaged into distribution-specific "packages", one for each of the major distros.

Cross-Platform Development Options

From this description, the scale of the challenge of cross-platform development becomes clear: each of the three major OSes has a completely different development process. Each uses a completely different approach to deliver the user interface.

There are a few ways to improve on plain HTML, as follows:

HTML AJAX

Implementing an application as a plain website is the simple option – it’s easy to make this work on all platforms. With AJAX (used to make web-sites more interactive) it becomes trickier – and more testing is required, but it’s quite possible

Flash

Although Adobe is phasing it out, Flash is supported by all major OSes, and delivers very good cross-platform compatibility – a Flash app that works on one OS generally works on all. However, Flash programming is specialised, and many developers do not have the skills. It is rare to see major business apps developed in Flash, probably because it’s too difficult.

But in many situations, a web-based solution isn’t acceptable. The following are the main options for cross-platform development of installed programs:

Mono

Mono is an open-source project coordinated by Xamarin and the Mono community that aims to make .NET applications run on Linux and Mac. Mono is very impressive, and is doing well on Linux, but unfortunately Mac support is weak. We believe it to be an acceptable option for delivering cross-platform .NET applications.

PortableC++ - Separate GUI

In this route, the core application is developed using portable C++ , and the application user interface is developed using native platform tools. This route allows common code to be shared while delivering a native style UI on each platform. Obviously this requires that the UI be written three times over. There are a number of strong cross-platform C++ libraries which can make the core code development easier, notably Boost++.

PortableC++ - Common GUI

In this route, we use portable C++ and a portable graphics library. There are a number of graphics libraries which can be used for this – such as QT or GTK. This approach saves time, but generally means that the final applications will not have a “native” look and feel – Mac users in particular might think the application looks a little odd, although Qt looks like-for-like the same as Cocoa nowadays.

Conclusions

This page has attempted to provide a brief introduction to the complex topic of cross-platform development. If you have a project which requires cross-platform development, or would just like some advice, please give us a call.