Wednesday, August 19, 2015

Cross platform development - deciding what framework to use

Over the next year or so I'm expecting to develop a couple of desktop applications which I would like to be available (and both easy and pleasant to use) on different platforms. One of them, which relates to my Ph.D., will be an IDE (Integrated Development Environment) like application which I would like to have running on Windows, Macintosh OS X and Linux operating systems, and the other is an application for teachers, which I think effectively needs to run on both Windows and Macintosh, with Linux support being desirable but not essential.

There are a number of approaches to writing cross-platform applications. One of the easiest of course is just to write a web application, and allow the browser writers to worry about the problems of supporting different operating systems, however web applications do have limitations, a notable one being that it is cumbersome to share files between them and desktop applications, something which users of both my applications will need to do. Another approach taken by a lot of the tools that I have been looking at as part of the background research for my Ph.D. is to make use of an existing IDE. The majority of these tools are built on top of Eclipse, and I suspect it would be a suitable base for my applications, however it also would bring a lot of unnecessary overhead. If I was already using Java, and knew the Eclipse API I'd seriously consider it, however for now I'd rather invest in learning something more versatile - not every cross-platform application I write will look like an IDE.

 As neither of these approaches to cross-platform development suit my requirements, I'll be using a more traditional approach. My preferred alternative is to find a good cross-platform user interface library that works well with a programming language that I already know well, and is compatible with my limited budget and for licensing preferences. A second alternative that I should also consider is to develop separate user interfaces for each platform, with shared code for the underlying application logic, however, as I am expecting to be experimenting with some novel control types, rather than sticking to a standard set of widgets I'd rather avoid developing each user interface separately.

I have been looking at a number of different options, starting with the assumption that I will be doing my development in either C# or C++, can live with an GPL license but would prefer something more permissive, and can get started without spending any money. Rather than jumping right in and trying to develop a fairly complicated application I'm going to initially develop something simple, which shares some characteristics with the applications I'm intending to develop. This will be an editor for wiki style markup, capable of supporting different dialects, and with an inbuilt browser view reading the rendered output. I may end up developing this application several times, to see how different frameworks suit me, however the first one I am going to try out is Eto.Forms.

Over the next few weeks hopefully I will blog about this experiment / learning experience a bit more. I will also try and get round to blogging about the other libraries and frameworks that I have had a quick look at before picking Eto is my first candidate.