Back in 1995, Sun released Java, with the promise of writing code once and running it everywhere. The fulfilment of that promise was mixed, with problems that became familiar to cross-platform developers: performance issues, lack of capability compared to native code, and user interfaces that looked like Java rather than fitting perfectly with the platform on which they were running.
That does not mean Java failed. Its elegant but familiar language combined with the lure of cross-platform support propelled it forward, though Java on the server soon overtook its use for client applications. Today Java vies with C and C++ for the title of “most popular programming language”.
In 2007 Apple launched the iPhone, and in the following year the App Store, enabling third-party developers to release apps for the device. Apps for smartphones were not a new concept, but until the iPhone the app market had been fragmented and small compared to desktop applications. The iPhone reinvented the market, and today there is a huge market for apps for smartphones and tablets, whether for Apple’s iOS, Google Android, or for smaller players like the new Blackberry 10, or Microsoft’s Windows Phone and Windows 8 tablets.
The consequence of the app revolution is that enterprise developers are under pressure to support corporate applications on mobile devices, either with apps, or with web applications. Developing only for Windows is often no longer enough.
Another factor is the rising popularity of the Mac on desktops and laptops. Apple’s computer now has an 11.6% market share for new sales in the USA, according to Gartner’s figures for the first quarter of 2013, and while its share is lower in Europe, its growth overall is enough to put pressure on developers to avoid Windows-only solutions.
The necessity of cross-platform support gives developers tough choices. Building dedicated apps for every platform is ideal for performance and usability, but maintaining multiple development teams is costly. Further, multiple code bases makes maintenance harder and defects more likely. Writing code that runs on multiple platforms is therefore attractive; but the issues that afflicted Java in its early days have not gone away entirely and there are always compromises.