en flag +1 214 306 68 37

A fork in the road: desktop apps and technologies

Published:

Quick intro: why go desktop?

Since the creation of the first digital computer, it has been evolving along the two major axes: improving the performance and making it cheaper. As a result, personal computers (PCs) have gained a huge number of users. And nowadays the emerging mobile platforms allow you to always have your PC with you wherever you go. So, where is the place for the desktop platform apps?

Performance / Availability chart

Speaking about the differences between mobile and desktop platforms from the development point of view, first of all, we mean the operating system (OS) of a PC. Both supercomputers and desktops work on the similar OS types. Laptops and netbooks also run on these OS’s, so as long as the software is concerned, they will also be treated like desktops with the only difference that they have limited battery use, which is also significant for mobile apps.

From the perspective of usage, general-purpose platforms can be split into:

  • convenient for content creation (which typically have a hardware keyboard)
  • wired for content consumption (tablets, smart-phones, Smart TVs, etc.)

Almost all content creation devices have desktop OS. Software that tends to be predominantly desktop:

  • office software, like text editors, data sheets, etc.
  • communication and information tools
  • graphics and video processing applications

In addition, mobile apps could have their desktop siblings.

Modern OS’s come from three big families: Windows, Mac OS and Linux. Let’s take a look at the GUI desktop applications development and examine their options.

Technology cloud

Native desktop development

It should be said in support of the case for platform-native development that it makes perfect sense when the future application is supposed to closely work with the system functions or access hardware. It is also common for certain desktop apps to be targeted at users of a particular platform, for example, OS X or Windows. If an app’s DNA is wired for a certain platform and there are no plans to replicate it on others, or you hardly limited on the application executable size, you may go all in native development and utilize its pros to the fullest.

For Windows – C++ / Win API, MFC

WinAPI is a set of libraries of functions to manipulate OS Windows entities. It was developed in the middle 90s and provide powerful, but not always convenient interface for application development. An easier way to develop Windows native application is MFC. From the first introduction in 1992, it has been significantly improved and is still supported for new Windows versions. Visual Studio IDE fully supports MFC. With ATL and WTL, MFC provides rather simple and powerful way to create new applications and maintain old, however, the compatibility issues do not allow to significantly modify its API, which makes it rather an old-fashioned library.

For Windows and others – C# / WPF.NET

Developed by Microsoft, .NET framework was intended to replace other tools for Windows Applications development. .NET supports a number of programming languages (PL), including Managed C++, F#, VB.NET, and others, the most suitable of them, in our opinion, is C#, which was developed specially for the .NET platform. For Windows, .NET framework allows to create more sophisticated solutions and solves some common programming issues in a more efficient way than, let us say, Java. WPF.NET is used for enterprise applications as such apps are easily integrated with other MS Office products. The pool of WPF.NET developers is quite big, and they are eager to work with this technology because the development tools such as Visual Studio IDE are quite convenient and advanced.

Additionally, a .NET desktop application can also be rendered cross-platform with the help of the well-supported Mono – a .NET framework implementation for Linux-like systems.

Potential cons include not the maximum application performance due to JIT compiler usage and the versioning troubles brought around by major differences among Windows OS versions.

For OS X – Objective-C / Cocoa

Native applications for Mac devices are written in Objective-C, the language grown from C, or the new language Swift. It may be viewed as a drawback or a limitation for the maintenance because experienced specialists with topnotch experience are scarce and, thus, costly. Looking for technology experts may also turn out to be a prolonged process which will boost the product‘s time-to-market.

On the other hand, like in the case with Windows, native development presupposes a perfect match of GUI and UX with the expectations of the target audience. Since Mac users are accustomed to the smooth and quite specific design, controls and layout, any differences and deviations are perceived rather acutely and may even tamper the market success of the software product.

Desktop applications development with Qt / C++

Even if you do not plan to go cross-platform, the cross-platform Qt framework may be your option. Qt provides powerful and productive tools to create applications with C++ and other PLs, like Python, Ruby, Rust, C#, Go, JavaScript, etc. The pros of choosing C++ as a programming language are:

  • the possibility to gain the maximum performance from the computer hardware
  • a huge number of domain-specific libraries, with both open-source and commercial licenses
  • a plenty of software developers with C++ experience with various seniority will be happy to maintain your application

If the application does not require deep OS integration, it might be cheaper to develop it with Qt. And because of its cross-platformity, your application could be very quickly and inexpensively ported to other platforms / OS’s. So, choosing Qt as a development framework is based on the following arguments:

  • saving development costs and effort
  • reaching out to a larger market
  • eliminating the need to comply with different OS versions (especially important for Windows)

Qt supports all modern desktop and mobile OS’s.

With Qt the application UIs look and run well on any screen. Native look-and-feel in Qt is achieved with the help of styles that render widgets according to the platform requirements. Look-and-feel of Qt application may be easily improved with style-sheets, with syntax similar to HTML/CSS.

Backed by a large and active user community, Qt relies upon the open-source framework and development tools available under the GNU Lesser General Public License (LGPL). For commercial use, there is flexible licensing which allows keeping the price of the final product affordable.

Qt framework goes with very convenient IDE for Qt features Qt Creator. It includes code editors with syntax highlighting, UI designer, internationalization tools, etc. Nevertheless, using Qt Creator is by no means a must, as there is a plugin for Visual Studio IDE and easy integration procedure for Xcode.

On the other hand, Qt is first and foremost a cross-platform framework, and one should not expect from it absolutely everything that every OS can do. Depending on the application needs, Qt may be used in combination with native development.

Takeaways

As you see, every option has both advocates and opponents. A lot depends on a developer’s or a consultant’s personal experience with a particular language or platform, so their opinions should be taken with a grain of salt. When making a final decision it is important to carefully weigh the pros and cons, and keep in mind the product’s marketing strategy and the must-have features that solve the problems of end-users.