Transcript of the Tim Berners-Lee Leynote Session at JavaOne.
Delivered May 31, 1996 at Moscone Center, San Francisco, California.
Tim Berners-Lee, Director, World Wide Web Corsortium, Laboratory for Computer
Science at the Massachusetts Institute of Technology
Presentation entitled, "The Axes of Revolution"
With opening and closing comments by JavaOne host, John Gage, Director,
Science Office, Sun Microsystems(tm), Inc.
Gage (Host):
Well, everybody's very wide awake, and I want to do something-you're going
to think I'm dumb, but I want to do this anyhow. Remember the first day
I said, this conference, JavaOne, has somewhat the feel of the first Web
Conference where you're meeting people that you'll work with for the next
ten or twenty years. You're meeting the people that are going to make, with
you, the new companies and the new products.
So here's my dumb idea. I want everybody to stand up, and you're going to
look to your left-it's like a religious event-you're going to look to your
left and your right and behind you, shake somebody's hand you don't know.
Alright, we're going to do this, because it's going to overcome all inhibitions.
Alright, everybody up. Alright, now shake somebody's hand you don't know.
Give them a business card.
[For several minutes people in the audience stand up, talk to each other,
shake hands, and exchange business cards.]
Alright, I don't see enough cards being exchanged here. Exchange those cards.
Great.
We have until 4:30 today, so everybody has to take as much advantage as
they can of propinquity. I'm a firm believer in serendipity. Somehow, you're
probably going to end up working with someone you just met, and you just
don't know it. Because you all had the good sense to sit in the same area
that means there's a personality trait you share. Now for Curt Jans, Chip
Webb, Vince Hodge and the entire Mitsubishi crew, and all the other people
that ported the Java Virtual Machine to a device; we've got your blood red
ribbons. So these are for all you who are porters. I think these people
should also get hugs as well as all the authors.
The logistics today... [Speaker continues with details of the day's
schedule] Now talking of BOFs, or Birds of a Feather meetings, there's
one special BOF, I want to tell you about, and that's "Arthur van BOF,"
and that's for Arthur van Hoff. For those of you that don't know Arthur,
let me tell you about the role he played in the development of Java.
You've all been in those engineering meetings where things have gone on
for a long time; and the last two people who said anything have matched
their vehemence and their length precisely proportionally to their lack
of understanding of the problem. You're bored-you're at that moment where
the meeting is falling apart, and it's clear nothing can really be made
out of all that time spent talking. Well, that would be the moment when
Arthur, with Guy Steele, Bill Joy, James Gosling, and all the group deciding
and voting on each aspect of the language, Arthur would say the mantra of
the design group: "If you're going to do it, do it right." And
that led to each of the simplifying decisions in the language design. Each
time some element from Scheme, Oberon, Beta, or the Simula 67 follow- on,
each time a language element came up that would add complexity, new performance,
or new capabilities; Arthur would always say, "If you're going to do
it, do it right." So that maxim has to stay with all the work we do.
And there's a second maxim. Avoid gratuitous difference, because we're aiming
for ubiquity. And that little demon-that little Steve Jobs that lives in
all of us-"I can't make money unless I make it different," you
know, you've got to bat that demon down. We're trying to build something
so that it's ubiquity on the bottom, and innovation up above.
Those are the maxims; those are the primary things I think we need to pay
attention to. When you get that tome, the Guy Steele/Bill Joy book-I was
looking at this last night-when you get to the dreaded Chapter 18, which
is the LALR1 grammar and syntax-the part you always skipped in computer
science courses, the part where you fell asleep-that's what James referred
to as the serious analysis at the bottom revealing things we didn't think
about before; exception cases that no one thought of. When Kahn pointed
out some floating point exception problems that no one had considered, there
were language changes.
So we're soliciting from you now at the end of this conference, every thought
you ever had about how the language can be improved, and also how the conference
can be improved, because we're going to do it again. So please tell us what
you think-changes in the language, what should we do, how the next conference
could be improved, and send anything you have to say to us to: JavaOne.comments@Java.Sun.com.
For those of you that want audio tapes, you know you can get them. Everything
was audiotaped. Many people have asked me about videotapes. The keynotes,
and we think all the Technical Tracks, were videotaped. Do you want those
tapes? We hadn't planned on selling them; but if you want them, we can dupe
them off again, JavaOne.comments@Java.Sun.com, tell us what
you think.
The transcripts for all of the talks, the keynote talks and the Technical
Track talks, are being put up on the Web site, grammatical flaws and all.
[Note: Technical Track transcripts will be published later.] So
you'll be able to track things and be able to recreate those moments when
you sat here. I must say, and I hope you agree, that the technical level
of this conference has surpassed my best expectations. I think these have
been extremely powerful talks.
The next thing I want to tell you about is ubiquity. Now the point I brought
up about avoiding gratuitous difference comes to this design criterion of
simplicity, and Tim Berners-Lee had the good taste to solve the high energy
physics community's problems about communication. He had the good taste
to weave together existing metaphors and existing protocols into a way of
thinking about reading and writing that seemed obvious and clear. That's
the genius of it. So to describe how he thought about that, and what lessons
he's learned as a result of the explosion of the Web, the first revolution,
here is Tim Berners-Lee.
Berners-Lee:
Well, it's incredible to be here in this exciting environment. A revolution
is always exciting. It seems to me it was only a short while ago that we
had the last revolution. In fact, the Web Conference in Boston was subtitled
"The Web Revolution," and that was in December, and here we are
with the Java Revolution. The revolutions are coming closer, and this is
not just coincidence. I think they'll continue to come closer and closer.
And that's one of the themes I'm going to talk about.
And the other thing I'm going to say, and John has just said it, is "Get
it right." If I've got one thing to say to 6,000 people sitting down
at this stage in a revolution, it's "Get it right for the future."
I'm going to start off the thinking about this revolution with a comment
that was made by Bob Beckhoff at the World Wide Web Conference in Boston,
when he wound up-I must admit, in a slightly cynical conference-winding-up
keynote; nothing like the keynote that I'm giving right now, which is of
course going to be terribly positive and enthusiastic-he said, "Well,
guys, you know, what is this Java stuff anyway? Hey, it's just another computing
language." And everybody laughed. And then perhaps, as people went
away, they thought: "So what is it?" And it's a lot of things.
We're celebrating a lot of things today. There are lots of different angles.
There are a lot of different axes.
I should point out, by the way, the importance of multimedia. These are
axes of revolution. If you thought it was axis in the sense of hatchets,
then go back and see your shrink, if that's the way you interpreted it.
Yeah, it's just another language. But it's a good one. We've had languages.
We've had good languages. Well, come along, we've had Eiffel and Small Talk
and lots of really interesting languages, but the nice thing about this
one is that we're allowed to use it, we're allowed to use it because the
time is right for a revolution. Java is sweeping across the world so that
if you go to your boss and say, "I'll think I'll write it in Java,"
then your boss will be very impressed and she won't tell you, "Don't
be silly; we don't program like that here."
And so if there's one thing that you can get out of all this, without all
the other things, it's that we now have an excuse to really use object-oriented
programming. I find it kind of interesting that object-oriented programming
became viable when it went global. Hypertext was around a long time before
the World Wide Web, but when those Hypertext links could only point somewhere
on your local disk, it just wasn't very exciting. Making it go global with
the Web, suddenly made it very exciting. Object-oriented programming in
a global environment is suddenly very exciting when you can inherit from
something miles and miles away written by someone you don't know, from whom
you've only just found the documentation, but whose home page you've read.
That just increases the power of it so much more. I wonder whether this
will happen to other things as well? I'm interested, for example, in knowledge
representation languages. Maybe we'll have knowledge representation on the
Web. Maybe we'll have the great big brain, the great big Web of knowledge
in which computers can wander around and make conclusions. That'll be another
exciting thing. So maybe we'll see a few things which, given the magic dust
of global space, become really exciting.
So yeah, if you count it as just another language, then Java is great just
from that point of view. It's great to have a good, well-thought-out language.
We're celebrating also the idea of putting things in small environments.
Java was designed originally not for zooming around the place at high speed,
but for being put in a small environment without necessarily the overhead
of an operating system; and it was designed to get over that portability
problem. And then it was produced as mobile code on the Web. That's how
it's been rolled out. I mean, Oak was there for a long time before Java
applets suddenly started to turn up. Now, if you ask me, Java applets are
a fairly arbitrary application of Java. There are lots of other things that
are really exciting about Java apart from applets, and lots of them have
been talked about.
And if you're going to talk about this as a revolution; a revolution has
got to leave the world with a totally different view of itself from the
way it started. It's got to be a paradigm shift. So where are we going to
be? When this revolution is passed, what's it going to be like? I'm going
to look at some scenarios. What are the software architecture and computers
going to look like, assuming that we get to globally distributed computing.
So there are lots of different components to this.
One of the aspects of getting it right that I can't say often enough is
keeping things independent where they can be independent. We've got a lot
of things here. We've got a programming language, but it's not just another
programming language. We've got a bytecode. From the point of view of somebody
really interested in interoperability between machines, what goes across
the wire between two machines is a very important standard. Yes, in fact,
there are lots of standards included in it. When you send some Java bytecode
across the standard you're using, it's not just a standard for the Java
bytecode, for the virtual machine that it expects, it's also for all the
APIs that code will expect. So effectively there are a lot of standards
involved in that message. There has to be a lot of common practice between
those two sides, which you have to have agreed on for this thing to work
interoperably.
So we've got the class libraries, which a piece of mobile code finds when
it's arrived. We've got a class loader which is a very important part of
the system, and it seems to me that the algorithms the class loader uses
might determine the whole shape of the future. They may change the whole
political and social topology of the Web after the Java revolution.
There's remote method invocation. Well, I've always been a great fan of
remote method invocation, or IPC. In fact, before I did the Web, I had a
little remote procedure call project whose goals were rather Web-like, and
the idea was that anything running on any machine in any language ought
to be able to call anything else running on any other machine in any other
language. One of the nice things about doing remote method invocation is
that you have the ability to cross between all kinds of boundaries, and
in particular language boundaries. So if we have a remote method invocation
system that allows you to call a Java method, a remote Java class from a
Java object, and it assumes that both ends are Java, then it's kind of worrying.
We've got a great flexibility point there.
Isn't it rather important that we go to the effort of making sure that whatever
we use from our procedure call-whether it is CORBA-like and Java has been
attached to it, or whether it is remote method invocation that has been
extended so that it can encompass anything anybody would want to do in another
language, with as much overlap and match as possible-when we've done that,
the way we do a remote invocation is separate from the programming language
we choose. It's clear that the programming language we choose -- I mean,
Java is a great programming language, and the title of this is the "JavaOne
Conference"-- Java is the name of it. But there are lots of other things
you can put into Java bytecode. And in a way, the importance of the architecture
is also in that bytecode; and is anybody going to object if a particular
bunch of people, who for some strange religious conviction or other, really
like programming in Cobol? If you want to compile that Cobol down to Java
bytecode and send it across the Net; then, no, nobody's going to object.
That's fine. We've got a great flexibility point there, so we've got flexibility
between the programming language and the bytecode, and that's very interesting.
It might even be interesting, if necessary, to look at putting a few extra
things in the bytecode if that meant one could support other programming
languages more easily, more efficiently.
And we're not just doing this because of the legacy things. When the Web
started, there was the same question. There were the URIs, the universal
resource identifiers-well, they're called locators now, but that's a long
historical question-but the original idea with these URIs, call them URLs,
was they could be any address space, and you've seen FTP and Gopher and
News URLs as well as HGDP URLs. Now that was not just an attempt to simply
get the legacy data in there, and bootstrap the thing by allowing you to
get it all out of FTP space, which is, of course, an important part of it.
But, the assumption was-and it's an unproven assumption, but it seems good
to me-that if you can make a system that is sufficiently general to encompass
the previous things, as well as your latest and greatest, then maybe there
is a hope that you will be able to keep that system for other greater things
to come, that somehow you've given it flexibility along that axis, which
you can project into the future.
So that is the more important reason for keeping these flexibility points;
for making your RPC, your remote method invocation system language independent,
for making the bytecode and the programming languages as independent as
they can be, making the APIs callable from other languages. Now I know that's
not simple. I know that when you have garbage collection and everything,
it is very tempting to just rewrite all the APIs, and in a large number
of cases it's a great idea to. But, in the spirit of keeping the APIs, as
John said, with no arbitrary difference, don't put in an arbitrary reason
why one of these things is connected to the others, and can't be disentangled,
because later, you know, there will be other programming languages. Java
may run for 25 solid years; I don't know, Java may have a longer run than
Fortran and C. Or it may be that in seven years' time, somebody comes out
with something that is just a whole different paradigm. Maybe somebody finds
a way of helping a user program graphically, and the result has a different
structure. And so hopefully whatever comes out of that will still go into
the bytecode. It'll still be able to use the class libraries and you'll
be able to interwork remotely or locally. Frankly, the fact that remote
method invocation allows you to move between different processes, different
processors, different architectures, hardware, and software in different
languages, is in a way more important than the fact that it allows you to
go remotely. Architecturally it's really important. So that is one thing
that I am saying to anybody involved in the design of all these things.
Let's try and keep them independent.
I'm going to assume a few things about the future. I was thinking and wondering
as I came out here on the plane. So I'm going to give you the wonderings
I had on the plane about where this is all going to end up; and what the
software that 's actually going to be sitting on one of these computers
is going to be.
So first of all, let me state without argument or discussion what my assumptions
are. I'm going to assume that this crazy situation we have at the moment,
where you have all this space, and that you have a thousand pixels by a
thousand pixels representing your virtual desktop, and that somewhere in
the middle of it you have a window representing the whole wide world, that
all that is going to have disappeared. When you look at the screen, there
won't be a difference between the desktop and the browsers. There will be
an information space out there; the hypertext paradigm will be there; and
the dragging and dropping little icons paradigms will be there, and they
are pretty mixed up. There's not really a lot of difference between a Hypertext
document and a desktop the moment you start writing on the desktop.
So I'm assuming that we have a very consistent user interface. I'm assuming
also that just as the Web allows people who don't really want to know about
computers to browse around, and hopefully to edit, and to communicate, and
work together with people without having to worry about host names, cables,
routers and things. I'm assuming that that will continue, and when you look
at a computer, you'll see less of the computer. For example, you won't have
to keep thinking of file names. The file space will be less visible. You'll
just create information, say what you want to do with it, whether it's important,
whether you want it to be kept, who you want to know about it. You'll simply
be making associations and links.
So let's assume that the user interface is very consistent, but then when
you look at a computer, my feeling is there's going to be a whole bunch
of different sorts of computers, that all the questions about are we going
to end up browsing the Web on our television or on our computer? Hey, they're
going to be the same thing. It's just a question of whether you buy it from
the television company or whether you buy it from the computer company,
which may be interesting if you're a television company or a computer company.
But, basically, the thing that you will see will be the screen, the user
interface, the gloves you put on, and those things will effectively define
what you see as the computer. So I expect that they will be defined very
much by the screen size and the bandwidth, and that will define all the
other things.
So, in my living room I expect to have a big screen; and in the kitchen
I expect to have a much smaller one that I expect to be able to pick up
and carry around with me; and in my pocket I expect to have an even smaller
one. But basically I expect, when I pick this thing up, I'll open it up,
and the information space that I'm provided with there is all part of the
same space, and I'll feel quite comfortable. The difference between these
is going to be the bandwidth, and that is going to fundamentally change
the sort of hardware these devices are going to have.
So the one I pick up and carry around from the kitchen for example, is going
to be communicating by radio. It may not have a very fast link. It will
be going at 900 megahertz into my local radio LAN in my house. It will probably
have a disk on it, because it may want to cache things, because it may want
to run faster than I can really happily run across that local LAN. So the
software architecture in there and the hardware architecture may have different
bits of infrastructure, but the effect will be the same. And of course I
won't really expect to watch video on something that I pull out of my pocket
if it's got a low bandwidth connection. If I'm out of the house, for example,
it has to go cellular, but I won't expect to get the latest movie over the
cellular.
So there's going to be a whole variety of different sorts of computers,
and if you want to call one of those a network computer, go ahead-I don't
mind-you can call whatever you like a network computer.
I'm going to make another assumption. I'm going to assume that as you're
browsing around this information space, as you come across all sorts of
things, that we have a general rule: whenever you come across something,
no matter what it is, no matter how weird it is, or how simple it is, if
you don't have the code that it takes to support it, to manipulate it, to
edit it, look at it, display it on the screen, book it, reserve it, taste
it, whatever it is, then you can go get that code somehow from somewhere
in Java. You can download it so that every single object is supported by
Java. Let's assume we take that to the limit.
I'm also assuming that Java classes are first class objects. There's a little
worrying note I have that there's a namespace out there for Java classes
and it's not an URL space, but it's a different namespace. Whereas in the
Web, we have this rule that if you have a namespace or an address space,
if it's a good one, then you think of a prefix for it, and you put the prefix
and the colon on "my new namespace:-MNSP:" and then you can put
whatever you like after it. And so we like to assume that everything about
the system, the Java classes, objects that define everything about them,
where you can get implementations and everything you can find out there,
are listed like everything else.
In a way, we've got a lot of different things at the moment. We're used
to having helper applications and plug-ins. Now we've got Java applets.
We also, in some cases, have remote procedure call stubs, remote method
invocation stubs. We have some things that are big and sort of autonomous
and sort of rather evident that put menus up, which we call applications.
And we have things that we think of as parts for the operating system. But
I'm just assuming that you'll pick up any of those things. Or basically
when you pick a piece of support code, you may get something, which in 1996
you might call an application, or you may get an RPC stub. But the whole
world will be consistent. Can I assume that, you guys? Can we make it consistent?
Good.
The class loader becomes a crucial thing, as I've mentioned. I'm assuming
it's loading everything recursively, and let's just assume now that the
security problem is solved, okay? When the class loader finds a piece of
code, it's signed, and along with the signature there's a URL pointing to
the certificate for the person who signed it, and when you read that signature,
it's signed, too. And there are some URLs you can follow up to other certificates,
which justify the key that somebody has. And you can follow through, and
your class loader, or the operating system, whatever it is, the basics,
the guts of this thing, can follow through out on the Web. It can retrieve
things, because all these certificates are also first class objects. You
can access them. You can query them. You can check who wrote them.
And so the class loader connects securely and it can pick up things that
you trust. It also understands licensing, because the statements people
make in security at the moment are very simple. But if you look at the licensing
statement you get on the back of a shrink-wrap package, it's this long.
And if you look at the licensing you get on say a train ticket or a plane
ticket or something, you find that in fact you can get air miles if you
go to these hotels; if you travel mid-week and you don't stay over Saturday
you can get discount or you can't get a discount. In fact, things are very
complicated. And I imagine that the licensing of things you load, could
be quite complicated as well. So your loader has got to be able to understand
that it doesn't have to pay with your credit card to get this business software,
because in fact you've got a site license for something that is not the
same implementation, but it's guaranteed to be equivalent by somebody you
trust. Things like that.
So the class loader is quite a healthy and complex beast. And it has to
decide among different versions of things. We're going to have different
versions of things that we really depend on, being brought out. And when
we have a lot of software on there, the configuration control problem is
something that people find very difficult to handle, even when they're given
weeks to think about how to reconfigure a computer. The class loader of
the future is going to have to solve this in a twinkling. It's going to
have to decide, alright, well, this one wants me to upgrade this module
right in the middle of my middleware. It needs to be upgraded. That will,
if I upgrade to this, cause incompatibility here, which will mean that I
will have to swap out that, and that, and that, which will cost me this
much hard work, effort, dollars, time and delay for the user, whereas if
I just wipe that out and drop that back to the previous version, we can
run with what we have as a window manager and we'll be okay.
Now all these things are pretty horrific at the moment, and it's going to
get a whole lot worse when it's so easy to pick up more software to clutter
your computer with. These are the assumptions. So, given those assumptions,
what are various scenarios? What's going to be happening on my machine?
Here's the first scenario. Basically, all this downloading stuff is alright,
it's very nice, but in practice users find they like to okay large downloads.
They don't mind little applets, but when they get things that remain resident,
have more power, that in fact it works out because of the way it's been
designed, and the way human beings are they want to okay things. So large
amounts of code don't get moved down very rapidly. So the content providers
feel that they can't expect users to have a lot of this middleware stuff,
which is above the operating stuff, but below the application. So content
providers tend to really prefer to provide content in terms of that which
is in the operating system, which puts a lot of pressure for every new thing
to be put into the operating system. Bill Gates said the other day of Microsoft,
"Yes we work with research. Our research people produce lots of great
ideas, and of course we are very excited to watch what they produce, and
the moment we see from the research community interesting things come out,
then we incorporate them into the operating system."
So it will go on like that. All major advances have to really become part
of the operating system before you trust it. You know, it was a bit like
this with TCP. But you could get TCP for VAX/VMS machines, but I don't know
whether people already thought it was trustworthy until it came from the
original manufacturer of the operating system. So maybe it's been the same
with TCP and Windows. People feel happier once it's in the operating system,
because there's a trust boundary there.
So the pace of innovation is limited by the pace you can get things into
the operating system, which tends to be limited by the how fast you can
make it a serious threat to that operating system that otherwise it will
be damaged by people doing it other ways and inconsistent ways. That is
scenario one. You may recognize quite a lot of that scenario one.
Scenario two isn't very different. Scenario two says; hey, we don't need
that operating system because every month we're going to be rolling out
10, 15 new Java APIs, and these are going to cover everything for security
and payment; and hey, there's going to be a file system coming out in a
couple of months, and you're already got the Windows manager, what else
is there?
So bit by bit the new Java classes-they're brought out so that you can run
Java applications and Java applets in a lightweight environment where you
don't need a heavy operating system pretty soon-are replacing the operating
system. You really don't need the operating system. This is great. You have
operating system portability. You can run on any operating system. All you
need is Java. And you can get Java with full disk tape support. You can
get the Java operating system to run on your mainframe. In fact-although
the lure of it is the lightweight side, and although it still works for
the lightweight side-pretty soon you get all the things that are fairly
heavyweight, and all the lightweight machines get bigger; and these little
machines start getting enormous quantities of memory. So pretty soon, just
as we see new PCs picking up all you need to become a mainframe, you'll
find the lightweight Java environment picking up everything else you need
to become an operating system, and this may be a reasonable way to go. You
know, maybe it will be a better operating system. Maybe, for example, if
we do the security right, it will be a secure operating system. Maybe there
will be a few things that we can look back on and say, well, there was some
work done on secure operating systems way back when, but it never really
took off. Maybe this is another thing we ought to go back and do right now.
And so we will end up with an operating system perhaps with a different
name. It will be called some sort of secure network distributed computing
environment, but it's going to be an operating system, and it may be a better
one, so maybe this will be a good thing. Or maybe it will just be another
operating system. Maybe it will just tie everybody down, because it would
end up being totally monolithic.
What's another scenario then? Break out of this monolithic operating system
business. Just download. So suppose you accept pretty much everything out
there. They do right now. You know, you can put all kinds of stuff on Web
pages. You can download things and the browsers don't generally ask you
very much. They ask you a lot of questions, but you can always check that
little box that says "Please don't ask me again, because I do not understand
the question." So then with legal impunity, you go ahead and download
all kinds of stuff.
So we don't have to rely on the operating system at all. No-in fact, I mean,
pick up my slides. They're out there. They're on the Web. No, they're not
in HTML? Actually, I developed them in my own special version of Harvard
Graphics, which runs on a Mac. But it's okay, because if you've got Java,
you can do it. What happens? You click on it, and you don't have Harvard
Graphics. This is a Mac version, but it doesn't matter, because you recursively
download a Mac emulator, and you are running a complete Macintosh emulation
inside your browser or in your Java machine-in your space somewhere you've
got a Mac. You might notice that the windows have got these funny little
black boxes, whereas before they had gray boxes, but apart from that it
doesn't phase you too much. And you notice also that the memory meter on
your machine is getting really near the red end of the scale, so you remember
to go out and buy some more memory.
You might also be noticing with these new sites, there's a little thing
that says you can browse this site; this Time Warner site, but please don't
do it; it's best browsed with browsers that haven't been browsing the Disney
site recently. Because if you browse the Disney site, you download a whole
lot of stuff that will clutter up your disk. Don't do it. What you need
to do is to bring down our animations machinery, our high speed video, and
you really need all the space the have. You notice that if you start switching
between those two sites, well, fortunately between those two sites, there
may not be a lot of hypertext links. But if you're browsing between people
who talk to each other, and communicate with each other and you find yourself
switching between one person who's drawn a graph on the Macintosh, and one
person who's drawn a graph on a PC, and you're comparing these two graphs
on the screen, you may find you just have to have a PC and a Macintosh in
there, and the whole stack. In fact, if you look closely, you may find you've
got an Apple II, and a couple of varieties of Mac, and a Quadra, which have
been brought in for various different parts of the applications you've got.
So there's an explosion in the amount of memory you need, and the amount
of virtual memory you need. You find that the thing keeps paging out. You
think that the Web site is slow. It's not slow. It's because you're paging
in and out all this software over your radio LAN into the cache in your
basement. Hang on. This is not up for discussion. That's part of the assumptions,
okay, that you have a radio LAN and you have a big cache in the basement.
The network computer definition starts at 64 megabytes and 10 gigabytes
of disk if you're really going to be able to read your local paper.
In this free-for-all, something else that struck me on the plane, is that
part of the Web community were kind of horrified when they saw the first
advertisement on the Web. In fact, the first advertisements on the Web happened
very early on with people's selfadvertising home pages saying how wonderful
they were. And it happened before that, when people put academic papers
up saying effectively how wonderful their projects were. But then when people
saw advertisements-they're reading a page about one thing and then there's
this little banner about something totally different-they think, "Wait
a moment. I followed a link to get this, and I'm getting something that
is different. That's not on my agenda. That's part of somebody else's agenda."
Now that upsets some people, but most people said, "Yeah, this is advertising;
I recognize this; this is fine." And so we download things.
Another set of people were upset when they hit a search engine and they
found a very large number of times that the top few things on the search
engine were not the things that contained the keyword. They weren't even
the things that they felt were most relevant to the things they'd asked
for. And they found out by talking to people in the corridors that in fact
the people who run the site, who came up top of the search engine had paid
enormous quantities of money to come up top of the list, even though the
rating scale, they thought, was a statistical rating scale down the sites.
They thought, "Oh well. I thought these search engines were sort of
statistically based and all that. But alright, this is the commercial world.
This is fine."
But people are a little bit sensitive to things that come over in the content.
They're sensitive to the quality and whether the content is actually what
it says it is. Now, if you're sensitive to that in text, boy, are you going
to be sensitive to it in code. Now I can see in this free-for-all environment
that there are lots of things you're going to want to put in your code.
In fact, if anything now, there's a desperate, desperate, desperate urge,
"Please link to my site, because I need readership, I need readership,
please tell your friends about my site. Please put a link to it. I'll pay
good money. I'll put a link to your site." It's readership, readership,
readership; everybody needs readership, because they want you to download
their data.
But it may be much worse when they want you to download that code, because
that code can do all sorts of things. That code can do a little bit of tracking
here and there. That code can help you. That code can help you by coming
to a better understanding of your needs. It can help you, it can watch your
keystrokes. By watching your keystrokes, out of a little long running window
that sits off the screen it can start to flash the odd subliminal message
to keep you calm, and cool, and oriented toward the right soft drink company.
And it can, by caching your keystrokes, find out what you need, what sort
of things you like, and that means that it will be able to give you very
much better service in the future. Besides, you have been targeted. They
know who you are. Marketing will be very, very, very much more efficient
in the future. And somebody's making a lot of money by sending your information,
and you haven't figured out how to do it.
But clearly there are things that are way over the edge, and some things
which are totally reasonable. And somewhere in the middle, there's going
to be some line of implementation ethics. Maybe we're going to have to draw
that, just as we're talking about ethics with data, we're going to have
to think about what is something allowed to do. When it says it implements
and interfaces, yeah; this implementation implements this interface; it's
a valid implementation of this class, and also on Thursdays it sends an
entire copy of your hard disk to a given IP address. But it matches the
specs in every way. But there's this question, "What else does it do?"
The free-for-all is going to be interesting. It's going to be a "wild
west" environment. The problem is the mess it makes of your software
when you end up with an architectural chaos on your system.
Scenario four is a loader that is so smart that it's working for you; it
knows what you like, and it knows what you don't like. It knows how much
memory you have and it will optimize. Before loading things, it will check
recursively what they need, and when it has two different versions of something
that it could load, it will recursively check what their requirements are;
and if, for example, it can use one which happens to use the windows system
you've got in, and the class libraries you've got in and therefore will
run efficiently, it will use that instead of loading emulators for everything
else.
So the loader is on your side and it does a great job. In fact, the result
is that the actual swapped-in memory size of a computer you use for doing
your daily work shrinks, because all those bits of the operating system
you don't need, they can be swapped out; all you need are the little bits
of Java that help you use the objects you currently have on the screen.
Right? So the memory size shrinks. This means you can buy more computers
for the same amount of money and that the whole thing is even more ubiquitous
and the code is signed.
We have this web of trust set up so that once you've told your computer
initially who it is, or you've told your smartcard who it is you trust,
basically you are happy to load anything your brother would load, and then
your computer can figure out what to trust and you don't have to worry about
it again. In fact, the only fixed code in the machine is that which you
need to boot, which is the ability to send and receive IP packets in any
one of 20 different ways, and a whole lot of cryptography.
So that allows anything you might now consider an operating system application
to change slowly. Little pieces of your application can be upgraded. For
example, one day your class loader finds there's a free version that is
as good as something you've been paying money for, so it closes down your
license, gets the money back, and subscribes to the free version, and your
memory size shrinks a little bit, and you're bandwidth goes up a little
bit and you don't even know that it's happened. The innovation speed is
just incredible.
Think about the speeds of revolutions. Before we had the Internet, if you
wanted to get a piece of software, it took maybe a few days. You called
somebody up and they sent you a tape and then you asked the system manager
on the minicomputer to load it. He had to go through an installation sequence.
So it took a few days.
But when the Internet was there, you could do all that in just 15 minutes.
When you wanted to get the first World Wide Web browser, you got a piece
of paper with the FTP instructions, you went to FTP, and you found your
way around the FTP site. You brought it over; you set it executable; you
probably did a couple of other things; there may have been some tarring,
untarring, and uncompressing in there. And in fact, you may have had to
go through an installation period procedure, too. But in the case of, for
example, Mosaic, you didn't. You just had to do that change mode plus x
and then you could go. And for an average person who owned a computer at
that time, that was probably only something like 15 minutes if you include
going down the corridor to find the guy who's got the FTP instructions.
Now once you've got a browser, then this time constant for change, for changing
the software that you've got on your machine has shrunk again. Because now
if you have one browser and you want another browser, it's just click. And
then you have to say, yes, yes, yes. Yes, I do want to install it. Yes,
I don't mind putting it in that directory and yes, go ahead. And you have
it. So that's user interaction with a few clicks.
The Internet revolution was not a revolution. It happened slowly in research
labs. It went out through government labs and the Internet spread relatively
slowly. But because the Internet had spread, the Web could roll out of it
like a great big tide. And that enabled everything, a whole lot of things.
The Internet allowed us to forget about roots; the Web established another
level after it rolled in; and the Java tide is rolling over the Web that
much faster. The next tide is going to roll over the Java tide. It's funny;
these tides don't go out. They all stay in. They accumulate. Frankly, I'm
glad I'm up here because it's going to get pretty wet down there.
So the next revolution is going to happen very, very rapidly. These tides
build up on top of each other. In politics you can have a revolution one
way and then you can have a counter-revolution the other way. But if we
do our revolutions right, they build upon each other. And it's worth thinking
about what we mean by doing the revolutions right. John has said, we want
to do it right. The hope is, the Web, for a few good reasons, could be the
basis for the Java revolution. The fact, for example, that there was no
fixed set; that we didn't use an enum type for describing the type of the
data you're moving over; and the fact that HTTP could move any sort of data.
The fact that URLs could encompass any sort of namespace or protocol, allows,
for example, Java applets to come over and take it over. So Java in the
same way has got to be as clean as it possibly can, so that the next revolution
can sweep across.
So going back over the things that I think are very important: One is to
keep the specifications independent. Let's have RMI separate; let's have
as many things separate from the Java language as possible. Yes, you know
and I know that they're all going to work together, they're all part of
the Java revolution. In the early days, I knew that URLs and HTML and HTTP
working together were going to make the Web. But when it came to going on
the ITF, well I started a URI working group; it was a URL BOF, or a URI
BOF and then it became the URI working group, just to look at URIs separately.
I did that as an attempt to say, look, these things are really independent.
They should stand by themselves. In fact, what happened, I admit, with the
URI working group, was-because most of the people there in those days didn't
understand about the HTTP business and the HTML business-an incredible philosophical
discussion about what these things were for. It went off into some elliptical
comet- like orbit and it came back two years later to exactly the same place
it had started without any progress.
So, yes, it is important to enunciate the total, to show the vision so that
people can understand how these things fit together. So it's in your own
minds, and in writing those specs quietly in the back room that you have
to make sure you're keeping them, as much as possible, faithfully independent.
URI space is probably the most important thing. That's the thing where the
argument was that if you've got a namespace that is different, if you want
to argue that these things should have some sort of naming system behind
them, then fine, go ahead and make a namespace, and we'll give it a prefix.
Once you've got one, we'll put that prefix in front of some encoding, some
ASCII-legible encoding of whatever the strings and text you end up with
are, and we'll accept those. And the earliest browsers had ways to configure
themselves so that if you meet a URL with a strange prefix on it, then you
could go through some proxy, which you don't know about, to use the new
protocol. My assumption was that new protocols could happen very, very quickly.
In fact, you know, we're all working on these new protocols. And they will
come fairly rapidly.
Now, if you look at the class namespace, if Sun.Java, or JavaSoft,
or .foo.bodobas is a class name, and that's a good namespace.
Well, if that's a good namespace, people might ask: "Can I put my ping
image in it, please?" "No, it's just for Java classes." "Oh,
Java classes are different? You mean, they're not first class objects? Oh,
they are first class objects. Everything else is second class objects. Sorry,
oh yeah, they go in the Java namespace. So if you've got a namespace that
only works on one sort of object, then can I put my class in the URL space?
Can I put it in the HTTP space or the FTP space? No?" Why don't we
just have a set of name and address spaces that you can use interchangeably,
and we'll have a set of object types and all these object types we treat
as much the same as possible. Yeah. Cleanliness.
Part of that, by the way, is keeping URLs opaque. I will say at this point-
I can't see you, so I won't ask for a show of hands-but URLs are supposed
to be opaque. In other words, if you're dealing with a URL for somebody
else's data, and you look at it and try to figure out from that URL something
about what sort of an object that is-that is bad. Just imagine that in a
couple of weeks we're going to announce a whole new namespace. It's going
to be just amazing. These names will look like random numbers. They're just
going to be gobbledygook. It's going to be "new namespace colon blahblahblahblah,"
and you won't be able to tell anything, because the whole thing will be
name-defined for something else. Anyway, so there's no way you can tell
what's in there, but you put it into one of the newname retrieval service
clients, and it will tell you within a microsecond exactly where all the
copies of that are.
Suppose we roll that out in a couple of weeks. No promises. In fact, I can
tell we won't. But, just as a thought experiment, imagine that. So if, for
example, you are tempted to say that the URL of the file you retrieve is
found by taking this URL, and appending to it the text of the class name.
Stop! You're putting semantics into the URL. Imagine that the URL was suddenly
a UUID and you started appending the class name to it. That would look pretty
silly, wouldn't it.
So keeping the URLs opaque, that's part of the Tao of the Web; you don't
look inside them, but my goodness, it's been a very difficult fight to stop
people looking inside them. From initial times when everybody assumed that
you should look at the end to see if it was a .GIF that you
should have seen as a GIF image, it's been a fight. But that's one of the
important things. I just mention that in case there's anybody out there
who's not intimately aware of that somewhere in their pituitary gland.
Another good thought experiment is, whenever you're dealing with an object
in relationship with another object, that you think global. Just imagine
that the two parts, instead of being on the same machine; instead of being
written in the same language; in fact, one of those two parts is going to
be taken out, and it's going to be replaced by something written by somebody
from another planet. It's as if you were suddenly going to hook it up to
some transmission coming out of deep space, and you have to remove as much
of the environment as you possibly can.
Think global. Assume that the numbers are going to be really, really ridiculous.
It is worth even though there are places when you think that this will scale
fine; this is great; this 32-bit number will do fine for our addresses.
There were times when people felt the Web scaled absolutely wonderfully
because you could put the information server up, and it had zero affect
on all the other information servers. So the load on your server did not
increase at all as a function of the number of the servers, unlike a database,
where, as more people started using this great big database on the mainframe,
this big centralized documentation system starts to slow down as other people
use it; the Web is great-it scales.
Well, folks, now we know, no, it doesn't scale. It doesn't scale because
the load on your server does go up as a function of the number of people
reading it; and that wasn't initially a problem; and if you had a lot of
people reading it, that was great. But now it is a problem with the serious
scaling we've got. We've redefined what scaling is. So when you look at
that, it is very difficult to actually imagine the numbers, actually imagine
the places where it will have to scale. Imagine that whenever you look at
a hierarchical tree, think, should this be hierarchical or should this just
be a totally disconnected namespace? Should these be just URIs in the global
space? Whenever you think of the relationship between two objects, think
that they may be very, very, very far apart or the other one may be one
of say 10 to the 10 other objects.
I don't know when these rules are going to have to be applied next. You
know, when the next revolution comes, they are going to be applied in even
different ways. But think global. Think boundless. When you've got a revolution
like this, don't think about applets. We're talking about a situation where
the whole content of your machine is going to have a totally different shape
to it, and as a result, the whole society and the whole commercial environment
around it, and all the software could look totally different. And the rules
that we're defining now for the way you load classes, for the way you define
protocols, the way objects talk to each other, are defining what those possibilities
will be.
Thank you very much for listening. I'll just say one thing. Hands up those
in the audience who know what this means? [Screen displays the letters:
K U T G W! ] We've had a big turnover. In the Internet days before
the Web, this meant: "Keep up the good work, guys."
Gage (Host):
Thank you Tim, thank you very much. Tim's given us thought experiments,
and I believe each of you have to write those down, put them on your monitor,
or on the wall so you can see them, and perform those thought experiments
each time you begin designing something new.
I wanted to tell you about a few news items that are relevant to what Tim
said. Today, the United States National Research Council came out with a
report on cryptography, which strongly urges that all existing United States
laws be eliminated that restrict the export of strong cryptography. So though
we are by definition non-political, because we work with computers and are
engineers, there is a movement afoot in the United States, and there are
bills in the Senate that would take this recommendation from the National
Academy of Sciences, the National Research Council, and put it into some
legal format. I spoke with Tsutomu Shimomura yesterday, and he says he believes-after
he and Whit Diffie, and about six people deeply involved in cryptography
met with the power structure in Washington-he believes within a month or
so there'll be a relaxation of a number of these restrictions. It's a major
battle.
So follow that a bit. I think the Web site for the NRC is: www.nrc.org
and that's where the text of the report is, as of this morning. It's in
the New York Times this morning as well.
I have two projects -- small projects. The first affects primarily United
States people. The Educational Testing Service is an organization that provides
tests for kids who take the tests to see if they're smart enough to get
into the universities. The Advanced Placement test in computing has had
as a requirement programming in C++. Now, they were going to put this in
place this next year, which would mean this coming school year for every
high school in the United States, every smart kid would be required to learn
C++ to be able to take the AP test. Because of a bit of turmoil, they've
put it off a year.
So there's discussion. If you believe that the steps we've taken, that the
work we've put into this, as Guy Steele designed a scheme to be a pedagogical
language of clarity and simplicity so people could learn about computing,
if you think we're making that same step with Java, and ubiquity allows
everyone to have access-the head of the committee on this is Mark Stehlik.
You may know him; he's at Carnegie Mellon. And his e-mail address is MJS@CS.CMU.edu.
Perhaps before you do this, go to the www.ets.org; that's the testing people.
Look at their Web pages describing this. But they've moved this to the '98,
'99 school year. There's a little bit of time to talk to them, and with
the stack of pedagogical support books that we talked about, I think we
may be able to make a case that we change something that could in fact have
a severe long term- well, it would waste a lot of people's time.
The second project is built, just as Tim said, on the enormous tide that
came in with the Web, and that lovely phrase of Tim's, "This tide doesn't
go out." What we did in California, and in Korea in the last couple
of months was to use the Web to do something for the schools. We said, with
a few Web pages, "Go out, parents, to your school and wire it. Pull
category five wire from five classrooms and a library to a central point.
Do it on a Saturday" Asking no one's permission, I put up 13,000 Web
pages for 13,000 schools in the state of California, and on March 9th, 100,000
parents, engineers, went to 4,000 schools and wired them. And they keep
going. I was not at all sure it was going to work. We put up an appeal.
"Take charge of your own school and go do it." Well, now we have
50 states that want to do this. Korea decided to do it on May 4th and on
Korea Net Day wired schools throughout Korea. Malaysia is planning it. Singapore
is planning it. Country after country.
So look for these announcements. We put a Web page up: Netday96.com.
I'm going to put up that mapping software you saw yesterday, which is the
ESRI software, so you can see worldwide, the location of every school in
the world, and the color of the dot will show whether it's wired or not,
or whether it has computers, or what it needs. So then we can decide by
seeing what needs to be done. That's it.
So watch these announcements about Net Day '96. In the United States, we've
decided to take the four weekends of October-each state gets to pick one
or two of those weekends. Go organize yourselves. Massachusetts' page is
up; North Carolina's pages are up; Minnesota's pages are up-we'll get all
the pages up in the next couple of weeks. Find a school, volunteer, go do
it. And, I think, if engineers worldwide decide to go out and do something,
nothing can stop them. We're going to make tee-shirts that have a drill
on them, and they'll say, "Parents with drills." That scares all
the school boards, but they go along with it.
Now since we're all software people, probably half of us are useless; but
we can all learn. It's just category five wire, a nickel a foot. Just throw
it over the ceilings, and get the schools wired, and then we'll deal with
the questions about computers and links to the outside world and telecommunication
tariffs. And then we can begin to let this tide Tim talked about reach out
into the places it should reach, which are all the schools where the kids
can just take to this and create new things.
Tim had a wonderful phrase; "We have to design systems that are sufficiently
general to encompass not only the existing protocols and systems, but those
that are to come." And the scenarios-I like the free- for-all scenario,
the market scenario-these scenarios of what's going to come all have, as
a result of his thought experiments, extraordinary, rapid change. So the
boundaries of this room that encompass 5,000 or 6,000 of us now are not
actually there. It encompasses all the kids in all the classrooms in the
world, who are going to be the creators of a number of these new ways of
thinking.
And some of the things Tim said reminded me of phrases about what is a language.
Donald Davidson, the language philosopher who has taught at Berkeley for
many years, would say that a language is not a set of rules. It's not a
structure. It's a theory of passing behavior. That is, you say something
to someone else, and you watch to see how they behave; and it evolves. It
changes constantly because life changes. And the conflicts that ideas in
their clash generate change with it.
So old structures just go away, and new conflicts, and new theories of passing
behavior, how we behave at this moment, evolve. That's what we're building
in this giant soup of namespace and identifiable objects. And Richard Rorty
had a wonderful phrase about Davidson. He said that Davidson has described
to us what language is. It's as if a coral reef has metaphors dying off
into solid structure. New metaphors that are startling in their origin die
off into a permanent, accepted structure that everyone uses. "Sunrise"
is an example in English of an old, inaccurate metaphor dying off into a
phrase we all use. You are designing the metaphors and creating the new
language for communication. And each time you come up with something new
and everyone finds it and adopts it-as Tim did, which we instantly adopted
to take to our own purposes- you create this new world.
There was a news broadcaster here in San Francisco years ago, and I'll close
with this thought. At the end of each broadcast, after he told about wars
and disasters and what had gone on during the day, he'd say: "If you
don't like the news, go out and make some of your own." So if you don't
like what we have today in the world of software-- it's hard to like --
then, go out and make some of your own. Thanks very much.
Tim Berners-Lee/JavaOne Page