There was a time when a developer could say they worked on cross-platform development and their peers would know exactly what they meant. Today, cross-platform development is a loose term that encompasses a wide range of implementation details. It’s no longer an issue of supporting DOS and Linux or Windows and Mac. Today it means supporting Windows and OS X and Linux, or Android and iOS and Windows Phone, or Firefox and Chrome and IE and Safari, or some combination of any of these. Mobile OSs and web browsers are the current kings of cross-platform development and traditional desktop operating systems have expanded to provide more support for the technologies behind that development. Technologies such as HTML, CSS, and JavaScript are being used to create toolkits of varying breadth and depth that can be leveraged to create applications that run in, or on, most major platforms. The stalwart desktop application is still in the fight, though advances in the language and toolkit space seem to occur less often and with less notice.
There are a lot of things to consider when evaluating a software project and, because the platform is typically a driving factor for development, one of the primary considerations is what platforms our customers want/need to target. While a single platform presents specific challenges (compiler, packaging, distribution, etc), multiple platforms may compound or simplify those challenges but often present new challenges that are unique to cross-platform development.
There are several considerations we make when taking on a new cross-platform development project.
- What is the security environment?
- Is there an IT/IS infrastructure available and what are its core technologies and requirements?
- What are the hardware limitations?
- What deployment options are available?
- Is custom hardware involved?
The answers to these questions often lead to more questions but ultimately help us narrow down our choice of technologies for a project and hopefully avoid major redesign and rework at a later time.
Web platforms have converged on the HTML/CSS/JS stack as the most popular front-end toolchain for developing cross-browser applications. The server-side aspect is largely independent and can fall to whatever technology is best suited for the character of the data being served, provided that the interface is understood. I’ve purposely avoided versions with the stack such as HTML5 or CSS3 because that is where the cross-browser support starts to break down as older browsers may not support particular versions of the technology. We support this stack at Duotech for several reasons.
- Consistency: It delivers the most consistent look and feel across browsers with minimal specialization.
- Longevity: The technologies are proven. HTML and CSS are core web technologies and Javascript is consistently rated as one of the most popular and in-demand languages today. We trust that these languages will continue to grow and advance and be supported by the industry in general.
- Ease of use: Though we do experiment with PHP, ASP, and Ruby, the basics of the generated HTML and CSS are well understood by modern developers. Javascript presents issues common to dynamically typed languages but browser development modes have come a long way in terms of providing targeted feedback and debugging. Frameworks such as Dojo and jQuery provide high-level functionality and widgets for a very little development cost.
Desktop platforms are a different challenge with different toolchains for overcoming cross-platform development issues. There is a rich history of toolkits and frameworks that have sought to address the development burdens of differing UI widgets, filesystem incompatibilities, style guides, packager and installation managers, etc. This is an issue we deal with both for clients and internally, as we support systems from all major OS providers (MS, Mac, Linux). While the C/GTK stack and the C++/QT stack remain relevant in today’s desktop environment, we’ve found success using the Java platform and the new JavaFX architecture. We have gone from prototype to compiled application to distribution quickly and almost pain-free using Java. The minor inconsistencies in the new JavaFX UI framework are acceptable when compared to the ease of development and the consistency of the application and we believe that as the platform matures these inconsistencies will be addressed. By allowing the JVM to abstract away the complexities of the operating systems and present the developer with a single concise API, the concern for the platform is mitigated. Quality unit tests with broad coverage provide a base level of confidence in JVM functionality. While targeted integration and regression testing help identify platform-specific issues and developer mishaps. JavaFX also supports application styling via CSS. Combine that with the new Nashhorn Javascript engine released with Java 8 and a wealth of knowledge from the web platform can transfer directly to the desktop application platform.
Cross-platform development is an issue that was once relegated to the large software developers that wanted to get their product on every system and could afford to throw resources at dual development. Today, even the most simple software projects may be expected to run on multiple platforms. Our current considerations and tools provide us with the ability to meet the needs of small and large cross-platform projects. However, it’s important that we continue to research and evaluate newer technologies while balancing the need to master the current ones.