Sponsored Link •
Was Jini the 'Vision' all along?
Bill Joy's calling the Java/Jini layer a BIOS made an impression on me. When I wrote my book Inside the Java Virtual Machine three years ago, I spent the first four chapters describing Java's architecture and presenting my opinions on the why it was designed the way it was. Looking back, I think that for the most part I got it right, but one concept wasn't exactly there. In my book, I concluded that the point of Java's architecture was to enable the network mobility of software. I still agree with that, but, in those days, when I used the phrase network mobility of software, I was thinking about network mobility of code: in other words, the kind of software mobility demonstrated by the Java applet. As I learned about Jini in the fall of 1998, however, it began to dawn on me that perhaps the point of Java's architecture was not only to enable the network mobility of code, but the network mobility of objects -- to make possible an object-oriented "BIOS" for a network computer.
This past April I had the opportunity to meet Nigel Warren, coauthor of the book Java in Practice, at a small C++/Java conference in Oxford, England. Over coffee Nigel told me he had a suspicion that Bill Joy was the central force behind the entire Java effort at Sun, and that he has pushed the Java effort in directions that would help him realize his vision of Jini. Now, I'm not usually one to believe conspiracy theories whispered into my ear, but Nigel's suspicions made me curious. I had heard that Java was originally envisioned for embedded devices. To what extent, I wondered, was Java's original purpose to provide a platform on which a Jini-like infrastructure could be built? Nigel and I agreed to try to get an answer to this question.
Therefore, when I found myself in Aspen one month later, serendipitously standing a few feet away from Bill Joy as he described the Aspen wireless network, I decided to ask him the question directly. "To what extent," I asked, "was Java created with what eventually came to be called Jini in mind?" Joy replied, "We knew about Jini in '94 and '95 when we directed Java onto the Web." And the next morning during his presentation, Joy said, "We built the JVM to let objects move around."
James Gosling on Jini
A few weeks later I had the opportunity to spend an hour on the phone with James Gosling, interviewing him for JavaOne Today, the online show daily produced by JavaWorld for Sun. I put the same question to him. Here's how that part of our interview went:
Bill Venners: I heard Java was originally envisioned for embedded devices. To what extent was Java designed with what would eventually come to be called Jini technology in mind? In other words, were you just thinking about embedded devices, or were you thinking about a Jini technology-like world?
James Gosling: Oddly enough, something very much like the Jini technology world was in there from day one. The very early version of the Java language, which was called Oak and ran on the Star Sevens, had a distributed message system in it that was very much like RMI.
Gosling offered more insights into his original vision for Java later in the interview when I asked him about the enterprise:
Bill Venners: To what extent did you envision the Java language playing a role in the enterprise when you first developed it?
James Gosling: It was a funny thing where very early on the view was that there was this established technology base that was pretty much impenetrable. Even though there were problems, market forces meant it was essentially impossible to break into the enterprise. So we decided to focus on areas where things weren't as tied up, which is partly where the consumer-electronics thing came in. We focused on that area because it seemed to be the most open one.
But when I designed the whole Java technology system, it came with years of experience doing all kinds of systems. And the reaction of enterprise folks, when they looked at the Java technology system, was, "Wow, this solves a whole bunch of my problems!" But early on getting into the enterprise certainly wasn't a goal.
Bill Venners: So given that it was more perceived along the lines of embedded devices, or that's how you thought of it, would you say there are deficiencies in Java for the enterprise environment, or areas in which you could do better at the language level?
James Gosling: I've done these embedded languages for a very long time. And one of the lessons that kept getting beaten into me over and over again is that when you design a system, you have some kind of a model of what people are going to do with it. And so you tend to build for that model. But every time I've done that, it's just been miserable, because people have always taken the system and done things that I never, ever expected. So when I designed the Java language, in many ways it was grotesquely overdesigned for its target.
Bill Venners: Is this the result of learning the hard way that people like to use things in ways you never imagined?
James Gosling: People always want to scale them up in amazing ways. And so I decided that this time around, rather than trying to focus on the particular application area, I was going to do a full-blown general-purpose thing.
Thus, when he originally designed Java, Gosling seemed to be imagining a world of embedded devices passing objects back and forth. Nevertheless, he tried to make the Java language as general-purpose as possible.
I found one more clue to the original vision of Java (and, subsequently, Jini) in Bill Joy's foreword to the Jini Specification book published by Addison Wesley. There, he writes:
For me, the Jini architecture represents the results of almost 20 years of yearning for a new substrate for distributed computing. Ever since I shipped the first widely used implementation of TCP/IP with the Berkeley Unix system, I have wanted to raise the level of discourse on the network from the bits and bytes of TCP/IP to the level of objects. Objects have the enormous advantage of combining the data with the code, greatly improving the reliability and integrity of systems. For me, the Jini architecture represents the culmination of this dream.
The extent to which Java was part of a master plan to make a Jini-like architecture possible (and the extent to which it was all a happy accident) is open to debate. But what is clear is that Java's architecture enables RMI and Jini, and that together, Java, RMI, and Jini mean that, as Jim Waldo put it during his talk last December in New York, "Object-oriented stuff is no longer limited to a single address space."
My sense is that extending the benefits of object-oriented programming beyond the borders of a single address space out into the network is the main point of Jini's architecture. For an explanation of how Jini brings object-orientation to the network, see the first Jiniology column.