Frank Sommers
Posts: 2642
Nickname: fsommers
Registered: Jan, 2002
|
|
Re: Java Creator Gosling says .Net Falls Short of Expectations
|
Posted: Apr 5, 2002 11:35 PM
|
|
I wish Gosling elaborated a bit more on what he found lacking in .NET. Regardless, I don't understand why Sun would be afraid of .NET. As far as I can tell, Sun's revenues are marginally impacted from Java licensing at present, whereas Microsoft's entire revenue stream comes from Windows, and now .NET, licensing.
That said, I have my own pet theory of .NET, and what Microsoft's goals are with it. (Actually, most anyone looking at .NET would probably reach the similar conclusions...) At heart, .NET is about network-mobile code. The common language runtime in .NET is able to load code from different network locations. When you integrate the CLR tightly into an OS, what you get is a network-extensible OS. In fact, the design of Windows NT, 2000, and now XP all share the similarity of being based on the Mach microkernel architecture. That architecture favors a small, minimalist kernel which gains additional capabilities by dynamically loading modules (such those handling file systems, etc). Interestingly, the Mach kernel was pioneered by Rick Rashid at CMU; he currently heads up Microsoft Research. It is only a small additional step to imagine some of those modules coming from the network. And it requires no special sense of fancy to see that you can perhaps, in some way, charge for the modules that come into your system and enable it with additional capabilities you need. (I mean, not you, but Microsoft can...)
Now, the JVM works in a similar fashion, when a small piece of running code can extend itself with new behaviour from the network. So, why is having code go into your OS is better than having code go into your Java application? Well, it's not better, it's just that it enables different kinds of things. The experience of the past couple of years has shown there are advantages in tightly integrating things with an OS. For example, the Explorer browser, by being in effect married to the OS, takes advantage of that close relationship in enhancing a user's experience. For one, it starts up really fast, it can find many things the OS knowns about (such as helper applications), etc. That enhanced user experience is what makes Explorer so successful, and that is a direct result of tight OS integration. And this trend is already manifest in less obvious areas. For instance, transactional file systems are become increasingly common, which essentially introduce database storage system-elements into the OS. Users like that because it prevents them from losing or corrupting their files if a machine or an application crashes or malfunctions. I can easily imagine that at some point users familiar with SQL-like data access will welcome an SQL sort of access to information on a computer to supplant the file-system browser and the registry or directory component viewer. At that point, you'll have a database operating system (DOS -- no pun intended). There are many advantages to having some of those components coming down from the network into your machine at runtime. Spell-checkers or file viewers are the obvious examples. And the OS will have to have cognizance of those components to ensure proper integration and system integrity. As far as I can tell, that's what Microsoft's plan is with .NET, to have that network-enabling extension to the OS. What we're seeing today is just a very first, preliminary step. But I'm folks at MS understand that these evolutions take many years, if not decades, to become mainstream.
Then, why do they focus on XML and Web services? Well, for one, because everyone knows (or think he knows) what the Web is, and it's the buzzword-du-jour. But there is also a deeper issue, and that is that we just don't quite understand the nature of mobile objects yet to the degree that that could form the focus of a developer program like .NET. (Well, I certainly don't claim to understand mobile code; I can't speak for others...) I mean, what does it mean when I send you a chunk of code or an object for you to execute it in your environment? And what do we mean by "environment" where the thing that you're executing my code in is itself extensible on the fly with someone else's code from the network? We're used to building and architecting systems, not orchestrating some amalgam of functionality that flies across wires and serendipidously assembles itself into a computer program. Our very notion of a computer program centers around the idea of algorithms that execute and then terminate in a finite strech of time. What we're talking about in a mobile-objects world are programs that run forever, cruching and biting on small morsels of code consumed from the network. How can we predict the outcome of such systems? And, how do we define those systems, in the first place? What does that system look like? Who owns it? Who is responsible? Whom to call if it misbehaves?
Java is all about network-mobile objects, but very few Java programmers actually take advantage of that concept. When was the last time you specified a network-bound URL as your codebase, instead of the local file system?
People understand XML, because they understand messages. Everyone who ever received a piece of mail via the Postal Service understands messages. Everyone ever operating a voice or email box understands messages. XML is messages, dressed neatly, all tidied up. But XML is not mobile behaviour. When was the last time you received a piece of *behaviour* via the Postal Service?
So, with .NET Microsoft currently focuses on XML-based Web services, but they have the pavement all laid out for non XML-based Web-services as well. I think their hope is that developers will sooner or later find the need to code mobile behavious into their applications, and that they'll be ready by then. And I think what will drive that developer need will be user and customer experience. And you'll get that by having .NET intergrate with the OS.
What I fail to understand is why Sun is complaining about Microsoft, and why they are not doing the same with their own OS, Solaris. As I'm typing away on my Ultra workstation, I'd certainly love to have the capability to discovery network-mobile Java services, and load them into my OS. Just today, I ended up having to install some OS patches -- why can't I do that via a Java patch classloader? And I was looking for a better addressbook than what I am currently using -- why can't Solaris just load one for me from the network? Since Solaris is used by more high-end enterprise servers than Windows is, having enterprise applications load into the OS would certainly benefit many folks.
And Sun has something Microsoft doesn't (yet) have: Jini. Jini is the natural extension of Java, and is the infrastructure that can make mobile objects a reality on the scale of the Web. If I were Sun's CEO, I would certainly mandate to Jini-enable every single Solaris network-management component, every storage array, every piece of hardware and software I or my partners sell. And I'd do that on an emergency basis. For instance, I'd try to convince Oracle to Jini-enable their key database components so that other objects can interact with those databases over the network. Then, I'd construct a world-wide network of Jini lookup services, (possibly teaming up with telcos), and make it so that injecting a piece of object into one lookup service propagates out that object to the entire network, making it available anywhere in the world, to any device or software component. Finally, I'd mentor a developer program to make it easy and profitable to build network-injectable Java components. I think that certainly would cause some worry to MS. But, more important, it would produce huge customer benefits, as it would make the vision of invisible computing just a bit more of a reality.
So, why is Sun not doing that? Or are they? O, maybe it's just that we're having a hard time understand the true nature of mobile objects....
|
|