Steve Ballmer has recently sent a memo to every Microsoft employee. Ballmer's memo leaked really quickly (I wonder if he expected it). After swallowing the corporate-madness part (but that's allowed: he's a "mad" corporate leader after all), one particular passage really grabbed my attention. Taking about Internet applications being popular, he wrote: "But we also need to make sure developers have the .NET skills to write unique Windows applications using Windows Presentation Foundation". Which begs the question: does anybody still develop Microsoft Windows applications? Really?
A step back
Before the internet changed the world, around 1995, writing software implied that you'd focus on a specific platform. You could write software for Unix (including GNU/Linux), for Dos, for Mac, or (most likely) for Windows. There were a few attempts to create multi-platform libraries (and one of them was the one created by StarDivision, which eventually made StarOffice, which then became OpenOffice; but that's a different story). However, those multi-platform libraries were often immensely complex, expensive, and... they never really exploited the specific neatness of the platforms they worked on: instead, they had to work with everybody's "common ground". For example if a platform allowed a very cool selector widget, and the others didn't have it, a lot of hard work was required in order to provide that widget. And then, there were the philosophical differences, in terms of UI, between different systems: the user interface of a Mac program would be different to the interface of a Windows application. Most programmers or companies basically didn't bother, and picked a specific platform. (Please note that I concentrated on the Interface side of things, but everything also applies to the differences between the underlying layers while programming. Creating a Windows program will imply calling Windows-specific functions in several cases, which will be different to Unix ones.)
Then, the internet changed everything.
A brief history of Java
The first attempt to change the programming world came with Java. At the time, around 1996, Java was often thought as the only "way out" of Microsoft's monopoly in the desktop market. Keep in mind that this monopoly was really recent! A few years back, there was still a war raging between OS/2 and Windows -- does anybody remember? Java, created by Sun Microsystems, provided a way of creating applications knowing that they would run anywhere. More importantly, those applications would run seamlessly within an internet browser. At the time, everybody thought that every web site would become entrenched with Java "applets" which turned boring pages into something interactive and "alive". Being multi-platform, and having a separation layer between the online application and the computer, was considered absolutely necessary; even though most people browsed the internet using Microsoft Windows, the global wisdom was that allowing native execution of arbitrary code downloaded from a web site would have been an act of insanity -- well, an act which was attempted by Microsoft with their ActiveX "technology", which was basically laughed at and never had the slimmest chance to take off. Java was great because it was basically a computer within the browser: un-hackable (if that's a word), safe, and easy.
And slow. Immensely slow.
Java never made it. When it was clear that nobody wanted to include Java applets/monsters into their web pages (and kill their customers' browsers in the meantime), java morphed itself into a platform to create desktop applications. And, once again, it failed. (The only widespread application everybody knows and mentions seems to be Eclipse.) Java eventually managed to find its niche markets:
in the server space, Java Server Pages and all those hard-core server-side technologies (apparently used by hard-to-get enterprise server developers)
in the client space, the mobile market (Sun managed to get a Java Virtual Machine in a lot of phones)
But it took more than 10 years -- and amazingly enough, never managed to get away from the performance and compatibility problems it has always had (ask any Java mobile application developer). For example Android, the mobile platform used by Google, uses Java to write programs; however, it doesn't use the Java Virtual Machine but the speedy Dalvik virtual machine (the Java source code is compiled into Java bytecode, and then translated into Dalvik bytecode to run on Android).
XMLHttpRequest() to their Internet Explorer -- with Mozilla and Safari following shortly afterwards.
XMLHttpRequest() together. Google Maps really looked like magic, with its ability to endlessly drag with the mouse a neverending map. Since then, the AJAX "technology" has evolved immensely, and countless companies today are developing using AJAX.
Programming has fully shifted online
So, here we are. It's 2008. You decide to start a company that writes software. What are you going to write?
I wouldn't want to be the person in charge of turning the development of stand alone, mono-platform applications exciting. Would you?
=TEXTBOX_START=A brief history of Flash=
Macromedia, a company which created a development tool to create CDROMs, saw the rise of the Internet (and the decline of the CDROM market) and did something amazingly smart: created a "Flash player" which could be embedded into internet browsers. (Note: this is a simplification. Macromedia actually bought a company that made the player. But that's again a different story). Flash was somehow comparable to Java: its player was a program able to execute bytecode. There was a major difference: it was immensely easier to create Flash applications, compared to Java. Java was hardcore programming, whereas creating a Flash program was more like creating a movie. While Java-rich web sites (thankfully) never really happened, web designers started creating entire sites which required the Flash plugin in order to do anything. Amazingly enough today, in 2008, there are still some (highly criticised) sites which are basically Flash applications. However, luckily Flash's penetration remained very shallow. Adobe eventually bought Macromedia, and tried to capitalise on the sheer number of people who had Flash installed in their browsers. They tried to "open" the Flash format, (very) theoretically allowing anybody to develop a Flash plugin, and released Flex. I was there in Boston, at Adobe's headquarters, when they presented Flex to the press. One thing was clear: their goal was to penetrate the market of desktop applications. They really, really wanted people to write desktop applications in Flex. The advantage was that the same apps could then run on any platform with a Flash player (they were quick to point out that GNU/Linux was one of them), as well as within the browser. Flex also had amazing internet features and articles.
Three years after Flex's release, in 2008, their market share never reached high levels. I have never seen a Flex desktop application in my life (although sometimes I wish I had, for example when I tried to run, unsuccessfully, a guitar course which Wine refused to run properly). Today, Flash is mainly used as a container for Video playback (think of Youtube), as well as some specialised web sites (see: gambling, stock exchanges, and so on).
I believe one of the reasons Flash/Flex never made it was because the computer world wasn't willing to create "another Microsoft". Flash and Flex were (and are) basically proprietary technologies which tie the developers to Adobe. A strong market share would certainly lead to disasters. It has happened once, and we all know that it might happen again, given the chance.
As a passing mention, I will point out that Microsoft's Silverlight is basically an attempt to replace Flash in people's browsers. It won't replace Flash and Flex: some people might end up having both Flash and Silverlight -- and will still use Flash 99.8% of the time (assuming that that 0.2% is when people browse Microsoft-related sites). Besides, even if Silverlight manages to replace Flash completely, we are still talking about a tiny market. =TEXTBOX_END=