June 6, 2014

Just a couple of years ago, Symbian was the coolest thing in the mobile industry. Then it got old and was succeeded by Maemo and then Meego, and then they were all discontinued. Before there was Windows Mobile, and then it was also discontinued. That was replaced with Windows Phone 7, which was also discontinued, replaced by the technically completely different Windows Phone 8. Windows XP was the king of the world, and was recently discontinued as well. Eight years ago there was no Android or iOS, but now they rule the mobile market. Very recently, Blackberry was the king of enterprise mobility, but is now struggling for its very existence. On a regular cycle, the industry keeps changing and changing. And it does not seem like this is going to end.


This week alone has been very interesting. Aside from small incremental changes to their products, Apple has introduced Swift (programming language) and Metal (3D graphics API to replace OpenGL in Apple products). Prior to that, Samsung released their first mass-market non-Android smartphone using the Tizen operating system. Prior to these things, the graphics development community has been brewing with technologies such as CUDA, Mantle, DirectX12 and a long period of rising discontentment in the OpenGL community. All of this together most definitely represents yet another swing in how the industry operates now and in the future. The companies involved seem to be engaged in a mad rush towards dominance of the industry, and as of now no one seems to be winning. The game is just getting started. Let's look at what has just happened:

The Swift programming language from Apple

For those that have not yet heard, Apple has introduced a new programming language called Swift as an alternative (but most apparently, eventually a replacement) to the aging Objective-C language for the development of iOS and OSX applications. To its credit, Swift is definitely an improvement over Objective-C. In essence, it seems semantically compatible with Objective-C but with a sensible modern syntax and apparently also comes with improvements to the performance issues related to calling Objective-C methods (= sending Objective-C messages). Indeed, it looks like it was designed as a drop-in replacement for Objective-C. More or less I'm sure this will be easily welcomed by many iOS programmers. It's meant to make their lives easier.

But not everyone will be happy. I must admit that, like some others, I have also increasingly started to see Apple as a fading star. I have not been the only one to feel that Apple has started to lose its relevance and power on the industry. But clearly they have some amount of firepower left. Look at Apportable: A company founded on the idea of being able to execute Objective-C programs on Android. They just recently closed a funding round of $5M, bringing them to a total of almost $10M of investment (interestingly, Google is a major investor, obviously they have some strategic interest here). But then here comes Apple and moves to a new language, and I can only imagine the emergency board meetings that they must be having at the Apportable office right now. The spokesperson of the company already rushed to address the probably anxious customers and users of the potentially soon-to-be-obsolete tool: "rest assured that we're following developments closely and will have more to announce in the coming months”. Must be a tough spot to be in. But by a single announcement, Apple effectively nullified the efforts of the $10M company. Perhaps the idea of building a cross platform solution over Objective-C wasn't really that good an idea after all? This seems like a good case study demonstrating the importance of controlling your own technology.

But of course the ripples go further than that. Other tool providers may need to have their emergency board meetings as well. For committed Apple developers, Swift is meant to be an addition that makes their life easier. But for others, Swift is different. It is not C-based anymore. Those that are relying on cross-platform functionality that is based on the commonality of the "C/C++” platform, should be very concerned. This road may well lead to their extinction. Yes, I'm looking at you, Marmalade. Unity. Corona. After the introduction of Swift, these tools still work. At least for now. But will they still work next month? Next year? They may or they may not, but one thing is for sure: The "C/C++” platform is again less common than it used to be. And, if we really think about it, why would the C language remain as a common denominator for the foreseeable future? C is older than Objective-C and may also well need to take a rest at some point. Building a future on the assumption of the perpetual availability of the "C/C++” platform would not seem like a good idea at all.

Metal will replace OpenGL on Apple systems, competes with Mantle and DirectX by AMD/ATI and Microsoft, respectively

But the programming language is not everything. The battle of 3D graphics rendering APIs is hot and steaming, and Apple has just pitched in their contribution: The Metal API. Again, it seems surprising that just by Apple throwing in a new API, the immediate sudden implication is that OpenGL may have become obsolete. Apple does not necessarily have the power to kill off OpenGL just by itself, but by introducing their solution at this particular point in time it may sort of feel like a "final” blow for OpenGL. Very interesting.

OpenGL is an old API, somewhat rightly so referred to as a "relic from the Silicon Graphics era". And increasingly the graphics development community has been murmuring on the perception that it is OpenGL that is holding them back from increasing 3D graphics performance. But rather than murmuring, it seems popular now to do something about it, and the trend now seems to be simply to move away from OpenGL and go "closer to the metal” (hence the name of Apple's API as well). Up to very recently, OpenGL was the de facto standard that was supported by "everyone” on the desktop (by AMD/ATI, Nvidia and Intel alike) as well as on mobile (by Android, iOS and Blackberry). The only exception to the OpenGL "standard” has been Windows Phone. But what happened now? Suddenly, the perception has completely turned around: AMD/ATI went for Mantle (although not exclusively so). Nvidia is all-in on DirectX12 with Microsoft. Supposedly, Intel doesn't really care about 3D graphics. iOS dropped OpenGL in favor of Metal. Blackberry is not relevant (unless they somehow re-emerge). And Windows Phone still supports DirectX and DirectX only. So suddenly, Android is the only notable OpenGL platform left, prompting the question: Will Google also introduce a 3D graphics API, since all their competitors already have their own? Indeed, did OpenGL just die?

If it did, to its memory we can say this: OpenGL was a convenient API that enabled accelerated graphics on various platforms with a single API. By its demise, the task of developing for multiple platforms just got more complex. Just running the C compiler targeting a different processor architecture doesn't cut it anymore.

Samsung launched a Tizen smartphone

The news of Samsung launching their first mass market Tizen handset may well drown in face of the other news, perhaps intentionally so. The phone was "initially” lauched only in the Russian market, with other markets "to follow soon”, perhaps in an effort to get started quietly. But the threat is in the air: Samsung has the capacity, and perhaps the will, to move away from Android. And if they do, given the fact that an overwhelming majority of all the Android phones in the world are shipped by Samsung, their move away from Android would have a major impact on the Android platform in so many different ways. Of course we are not there today. But given the previous history of the industry, it is by no means a theoretical possibility for the entire Android platform to even disappear very quickly. It may or may not happen, but it is certainly possible.

Where does that leave us, the software developers?

For a little while, there were some indications that a subset of the mobile platforms were in some small sense converging towards some kind of a least common denominator built on a C/C++ platform, probably with an OpenGL rendering backend. All that just ended. No convergence of the kind is happening, and the direction seems to rather be diverging than converging. The platforms do not consolidate in language nor API, and as a result of Apple's moves, we might see the others (notably Google) follow on the same path: No doubt that Microsoft is already there. That means that increasingly, developers will need to be able to target competing technologies and languages that do the same thing but are from different vendors. We are not nearing any kind of standardization.

Like I told my group of students yesterday, from the perspective of us programmers, technology enthusiasts and professionals, this is exciting: There's new technology, and hearing about such announcements should make us excited. For programmers, every technology we experience and learn from adds to the richness of our ability to think and create yet better technology. From that standpoint, these are all really good things that help us collectively move forward.

From a practical perspective of developing systems and applications, the divergence will increase the complexity of software development, prompts the need for additional skillsets and training, and will present additional engineering challenges in maintaining software that is targeting different platforms. Furthermore, these developments as of now, and even more so as they continue, may continue to render many of the currently popular cross platform development tools obsolete or impractical. No doubt some will want to introduce new tools that would enable the use of Swift programs on Android and other platforms, but this will only represent a replay of the same unmaintainable scenario as before, only using a different language. Obviously we at J&E are happy, since all this in fact further underlines what we already knew, and very well demonstrates in practice why the source code conversion approach that we have chosen for Eqela continues to be the best path to develop and maintain software systems that need to work on multiple platforms. The fundamental approach of an Objective-C-to-Android bridge tool is the use of Objective-C: When Objective-C is obsoleted, so is the tool. The fundamental approach of a cross platform C/C++ library is the use of the C programming language: When C is removed, so is the tool made obsolete. But if the fundamental approach is the assumption of a programming language, as is the case with Eqela, the approach will work well as long as programming languages are still used, regardless of what exactly the languages may be.

These developments are by far not over. Let's see what happens next.


Share this article: