How to write a multi-platform desktop application? Manager's view

    Today, the authors of most applications can no longer afford to be released under one platform. Early adopters sit under poppies, the mainstream sits under Win32, and geeks and adherents of open source prefer Linux. Each of these audiences has unique properties, and therefore is important for most projects.

    This article was conceived as an open attempt to understand what it is worth writing a multi-platform desktop application. I invite people with experience in creating such applications to express their opinion.

    Initially, we define the criteria by which we will evaluate various platforms. First of all, this is user convenience. I am sure that you have noticed common features of applications written for different platforms. The second is the interests of the project. My task is to build a successful business, and not play with various tools.

    Let us designate the scope of the study. My application is a small utility for the “teapot” user, which downloads files from the Internet: a minimum of GUI, a small set of functionality, the use of external C ++ libraries.

    Let `s start. What are the options? I will cover Java, C #, C ++, Python. I would be glad if you tell us about other alternatives.

    Java

    This language / environment was originally conceived as something multi-platform. Java has written a large number of applications, large projects like Eclipse use this particular framework.

    A big minus of Java from the point of view of the user is the need to install the framework. This is certainly more difficult than installing the Flash player and often becomes pain in the ass. Both the installer size (I downloaded 80+ mb) and the constant confusion in the names (JRE, J2SE, JDK, JVM, ...) do not play into the hands of Java application developers.

    Learning curveis critical for any project that puts on viral promotion. If 30% of your users cannot install the Java machine (laziness to download, uncomfortable site, postponed "for later" ...) - your competitors will have a 30% handicap. This huge share of users, which my project cannot afford to lose.

    All the applications that I used to use did not use the "native" Win32 interface. I don’t know what the developers were guided by, but from the point of view of the end user this doesn’t look very nice.

    Application examples : Eclipse, ZDE, a client for Gnutella Limewire.
    Pros : multi-platform, a large number of frames, the development of the framework.
    Minuses: need to install a framework, curvature of the GUI, poor performance.

    C #

    The C # language and the .NET platform came from under the wing of Microsoft, which has never been respected for multi-platform. This language was warmly received by the developers and the Mono project enthusiasts even made an analog of the framework for Linux / Unix / Mac Os X.

    Similarly with Java, applications in C # have a big minus - the need to install the framework. I myself refused to install several applications that required this framework. Less advanced users will be even more demanding.

    The rest are solid pluses, in my opinion.

    Application examples :?
    Pros : multi-platform, a large number of frames, good performance, the development of the framework.
    Cons : the need to install a framework.

    C ++

    The old man has reached our days and feels great. Many applications for the Linux and Windows platforms are still written in this language.

    Programs written in C ++ are an example for others in terms of distribution size and the economical use of system resources (processor, memory). Nevertheless, developers have a lot of complaints about C ++. In my opinion, the language is "obsolete" and its popularity will continue to decline, as evidenced by the TIOBE index .

    In terms of project development, compared with dynamic interpreted languages ​​(such as Ruby and Python), development in this language may have a lower speed and higher costs of changing the project. For a startup that doesn't care about application performance, this can be a significant minus.

    Examples : Firefox,? ..
    Pros : excellent performance, a large number of frames, a large number of libraries.
    Cons : low development speed.

    Python

    MusicBrainz Picard made me look at Python as a platform for desktop applications . Despite its scripting nature, Python easily compiles into a single .exe file, without requiring the user to install additional components.

    If you develop a small application, interpreted languages ​​like Python will be a big plus. Ease of writing and high speed application changes come in handy for any startup.

    A huge disadvantage of various “fashionable” technologies is their low distribution, which means serious problems in finding qualified personnel. The situation with the search for programmers is so deplorable, and if we restrict ourselves to a narrow language, you can not find anyone at all. On the other hand, the most progressive developers have the courage to switch to a new language. It may turn out that choosing a “promising” language will immediately cut off millions of middle peasants, leaving us the choice of several promising developers.

    Example : MusicBrainz Picard, the original BitTorrent.
    Pros : high speed of development and changes, good integration with C and C ++ libraries.
    Cons : few frames, low productivity.

    conclusions

    Unfortunately, any of the above platforms has its pros and cons; a definite solution could not be found. Choosing one of them today will bring advantages and disadvantages, the impact of which on the project we will see only tomorrow.

    I am choosing between C ++ and Python for now. The first is a “reliable” solution with known flaws. The second is “risky,” but interesting and promising. I hope your feedback will help me make the final choice. Which platform would you choose in my place?

    PS. I am currently looking for programmers in this startup (C ++ / python / php), so if you are interested, send your resume.

    Also popular now: