How would I know a decentralized, emergent development model? It���d be messier than what I see with Flash development, for one���more like what you see with HTML and JavaScript. I know everyone points to IE hacks and says, “look how awful that is for developers” but we don���t really see developers shying away from Ajax. Why is that? I suspect it���s because open standards development feels so exciting and fertile.
Allow me to commit and explore what is, for a Java developer, a major heresy by asking: should we really be that freaked out about forks?
Three Replies
The Java-culture answer is “why don’t you go program some C, nut-job?” Though, that answer is a bit more loosey-goosey now, at least technologically
The Flash answer is, in the ongoing discussion, “preventing that fragmentation is one reason we don’t open source Flash [the player at least].”
The web answer is, “what was the question again?”
Point being, “web programming” (HTML, JavaScript, and CSS) is rife with little checks to see if you’re running in the Redmond, Mozilla, or other browser. While it’s a favorite past time of web programmers to complain about this, just as soon as they stop complaining, they start praising the wonders of the web, Ajax, and JavaScript.
(I’m ignoring things like XUL and ActiveX. Feel free to needle in the comments.)
To be fair, the amount of difference between IE, FireFox, Opera, and Safari is much smaller than the similarities. And for more disclaimer-context, by their nature, browsers don’t typically access anything outside of the browser (file systems, databases, etc.) where most of the if (windows2000) else if (windowsxp) else ... annoyance can happen.
Write Once, Run Anywhere
Now, when Java first came out, for coders to start using it, it needed differentiation from C/C++. Back then, open source wasn’t a key differentiator or even a known enough business model for most commercial companies to consider. Aside from memory management, then, having “write once, run anywhere” gusto was a major reason for people to code in Java. Indeed, the complete universe nature of Java — a platform on it’s own — is a large part of what makes Java programming pleasurable: no matter where you go, everything is the same.
(Of course, that analysis is sort of retroactive marketing. As with most things in tech, the early story of Java is more one of finding a use for existing technology and then adding in aspects that fit that new story.)
So, at the time, a forkless Java was fantastic. I certainly enjoyed it. Of course, once I got into systems management and software that was deployed as packaged applications rather than hosted/SaaS, I found myself layering all sorts of platform-dependent code into my software. Sure, Java itself was still “pure,” but all those JNI-linked in DLLs and .so’s took a little veneer off the “run once, run anywhere” sheen, if only at the over-all project level.
In my mind, the platform independence of developing software in Java is about the same as the platform independence of web programming. For the most part, it’s all the same, but there are those edge cases — often in “critical” parts of the system like networking — where you have to face up to the platform you’re running on.
Open Source
Without getting distracted by the ages old thread about Java vs. whatever else, allow me to jump to the point: being an open source, ubiquitous platform seems to alleviate some of the damaging effects of having a forked client, e.g., the web. And if not “alleviate,” then “over-shadow.”
The web definitely has forked clients and we have no hope of ever resolving that fork. Every year, the utopic end-date when we’ll finally “fix” the web platform get pushed up another year. Even if you made IE and Firefox completely the same, you still have the years and years it will take to update every browser on earth. And in that time, cynics have no doubt that the two browsers would fraction again, or another browser-verse would spring up.
So the question is: do forks matter less if the thing forked is open source? The accompanying question is: are forks even avoidable once a technology reaches a certain scale?
Pushing the questions — which I don’t really have easy or even hard answers myself — it seems like running towards a weakness or a problem and actually making a platform in which forks are allowed and help rather than harm is the “easiest” way to reach ubiquity on a web scale.
How sloppy can you be? (Especially if you’re “free”?)
Disclaimer: Sun and Adobe are clients, as is Microsoft.