Quite a few things happened in the last week with regard to enterprise software development - whilst I don’t do that full-time anymore I still like to keep abreast of events, and this week was something of a doozy.
Firstly, Java has started to become open source. There was some initial surprise that Sun chose to use the GPL rather than a custom-built license like so many others do, but it makes complete sense given that one of their targets is just to get Java distributed with as many Linux distros as possible. Whilst some distros have incorporated Java in the past (normally in Blackdown form), setting up Java on Linux has often been an annoyingly non-standard step, especially if you’re using Debian and are used to that lovely package management system. Only parts of the Standard Edition (the compiler and runtime, not libraries yet), Mobile Edition and Glassfish (Sun’s reference implementation of a J2EE 5 server) are available under the GPL so far, but the libraries for J2SE are promised in early 2007 and I’d imagine the J2EE libraries won’t be far behind. Sun has nothing to gain from keeping this stuff to itself anymore, and everything to lose if it does just in publicity and trust terms.
What difference does this actually make? Well, in terms of the actual community process, not a great deal I think since the Java Community Process (JCP) has long promoted integration of community ideas and in many cases code from previously external libraries (regular expressions, JDO etc). Even under the GPL, Sun will be running the project and I don’t think many will argue with that. However, the actual development may well accelerate since more people will be able to access the code directly and submit patches - and keeping the quality up in the face of this will be Sun’s primary challenge. And, the ability to distribute Java in the packaging systems of ‘purer’ Linux distributions shouldn’t be underestimated - Java’s portability has long been its strength, but in practice that was sometimes undermined through the awkwardness of getting a compatible runtime on some platforms. Hopefully this will streamline the process by integrating it all through the package management system. I hope this goes well for them because I’ve long had a soft-spot for being able to write truly portable enterprise applications - sure it’s not always perfect, and dealing with multiple competing vendors you always need to be careful, but the spirit of the thing is right - .Net while being undeniably excellent technology is still, IMO, mostly vendor-specific technology dressed up in a portable costume.
The recent deal between Microsoft and Novell backs up these concerns significantly. On the surface it all looks about friendly handshaking and politically correct acknowledgement of diversity, but there’s more to it. Underneath it all is a patent agreement whose wording is rather ominous:
“Under the patent agreement, both companies will make upfront payments in exchange for a release from any potential liability for use of each otherâ€™s patented intellectual property, with a net balancing payment from Microsoft to Novell reflecting the larger applicable volume of Microsoftâ€™s product shipments. Novell will also make running royalty payments based on a percentage of its revenues from open source products.”
This has been widely interpreted as Novell agreeing to pay patents royalties on Mono, or at the very least establishing an understanding with Microsoft that they won’t sue them over patents that cover Mono. You know, that portable implementation of .Net which proved that .Net wasn’t constricting to Windows (even though Mono has never caught up with all the tools & libraries in .Net on Windows anyway and thus only certain applications written in .Net will work on it). Sinisterly, this implies that Microsoft does indeed have patent interests in .Net technology (which I’ve long warned about, mostly to deaf ears) - which in turn means that whilst if you run .Net applications on SuSE you’re ok, you’re potentially exposed on any other platform. Of course they haven’t said that, but that’s what’s implied, otherwise there would be no reason for that element of the agreement. Microsoft has also ended up paying Novell for the ‘balance’ which just sounds like a deal sweetener to me.
I’ll warn you again - don’t believe the hype that .Net is portable in the way Java is. Sure, a small amount of .Net tech is ECMA’d (the base language and runtime but you can’t do much without libraries). Sure some elements of .Net have been reimplemented on non-Microsoft platforms (but even those elements still run the risk of being buggy since they’re not from the same codebase, or made obsolete by changes in the ‘standard’ MS implementations, or may end up infringing patents). I see the Novell/SuSE deal in some ways as yet another smoke-and-mirrors publicity win for Microsoft - they get to send out the vague impression that they’re willing to play nice with others (yeah, right) and get some royalties from SuSE to make up for that investment. .Net looks portable since it runs on SuSE, but MS is still holding the edge of the rug, giggling behind their hands as they wait for the right moment to yank it from under the feet of others who have been suckered into standing on it.
I’m not saying .Net is bad - far from it, it’s excellent technology which I wouldn’t hesitate to use if I had a Windows-only application to write, but I’m constantly infuriated by people who claim that it’s cross-platform and thus the portability checkbox is ticked, with no need to look elsewhere for that requrement. For God’s sake don’t kid yourself. Even if you can get it all technically running (and Mono has only managed a subset), legally it’s still very shaky ground. .Net == Microsoft platforms & technology people, don’t be fooled otherwise. Many people don’t care about portability, which is fine if that’s what you choose to do, but I think some are deluded by the warm & comfy feeling that if they wanted to port their .Net applications to another platform, they could. This is one reason that I generally dislike the Mono project in many ways, because it’s helping to propagate the myth that .Net is a safe harbour for applications you might want to port later. It’s perfectly innocent I’m sure - it’s just solving a technical problem as technical people do - but the issue is much bigger than a technical implementation. This agreement shines a light into some dark corners.
Isn’t it telling that MS has generally turned a blind eye to Mono whilst .Net was playing catch-up to Java in enterprise applications? Now that .Net appears to have closed the gap, and the tendency for small projects to use .Net and large ones to use Java doesn’t necessarily follow anymore (especially for green-field projects), MS’s first step is to establish a strategic agreement over patents. If .Net ends up dominating the way Windows does on the desktop, what do you think will happen? I’m guessing it’ll be hardball time, so make sure you’re wearing a box if you’re using .Net on a free platform by then.