Services on the desktop
I feel I should say something about desktops, because there's a stunning collection of desktop developers at this conference. I believe that developers in both the KDE and GNOME projects would agree with me that desktops are more than pretty pictures. The component architectures reveal that philosophy. I'm particularly interested in using CORBA to tie together components, which I know was a subject of big debate in the KDE and GNOME communities. Without trying to guess whether Bonobo is the right approach, I'll just say that I'm intrigued by the idea of building CORBA's distributed model right into the desktop and making it automatically available to each application. Microsoft's hope, when it built DCOM, was to allow applications to pull in services from other computers, but that never happened. Now, of course, it's trying again. I don't think we should give up on the ideal; it's a good subject for people interested in peer-to-peer because it opens up all the same concerns peer-to-peer does about resource utilization, security, the reliability of servers, response time, and so forth.
But most of the topics I've mentioned in my talk should be carried out below the desktop level. The reason is simple: Users should be able to interact directly with programs, and programs to interact with other programs. Where is the sweet spot, where desktop developers can support the ground-breaking innovations going on in peer-to-peer while providing something relevant to the user interface?
I have a couple ideas for general functions you can offer users. One is presence, which is a well known concept from instant messaging services: It indicates whether you want to be interrupted and who can interrupt you. Jabber may provide the solution. Desktop developers have a lot to offer here because there's no reason the notion of presence should be internal to a single application. It could apply to everything from email to telephone calls to the coworker who walks in to complain that someone in the quality assurance department has asked her to review the code of the lazy bum who just went out of town because the work he'd done on another project blew up at the site of a major customer and her boss says she should put aside what she's doing right now and play along.
Along with presence, a desktop can help users manage the other side of the connection: who's allowed to be part of a shared P2P space and what their privileges are.
Another piece of infrastructure that might be nice on the desktop is management for a user profile. A lot of interesting peer-to-peer applications are based on collaborative filtering. Do you like to collect white papers about bandwidth? Have you answered a lot of people's questions about Perl? Information like this, stored in a user profile, helps a peer-to-peer system know whether to send a question to you, offer a document you might be interested in, or use your input in rating something. These kinds of peer-to-peer collaborative applications are also intriguing because they gently explore the possibilities of adaptive interfaces, systems that keep track of your preferences and alter the system's behavior as you go along, without presenting you with an annoying dialog box you have to click whenever the systems notice something.
The information you store in your profile is quite private, of course, so unlike proprietary systems, an open peer-to-peer system stores it on the individual's computer. That doesn't completely prevent information leaks through security breaches, but it tries to establish the principle that you own your data. A desktop could help somebody keep this information up to date and indicate when it's OK to share it.
Two key applications
I've gone over the general work that needs to be done for peer-to-peer applications. Now I'll just highlight a couple types of applications that I find exciting: distributed file systems and collaboration tools.
Some would complain that I left out the important application known as distributed computation or grid computing. But I feel I have already covered it adequately, because all P2P involves distributed computing. When you access data, or do something on an end user's site, you're using his or her computing power, aren't you? Distributed computing is just a particularly focused example of peer-to-peer, and the general infrastructure issues I've already listed apply.
A lot of people learned about Napster, Freenet, Gnutella, KaZaA, etc., and said, "Oh, they're just ways of transferring illicit files." Not at all. These systems were laying the basis for a new type of distributed file system, a new generation that goes way beyond NFS or AFS. The new file systems exploit existing wasted space on end user systems instead of using central storage on the servers. They break files up into pieces so you can retrieve the pieces quickly from multiple systems, encrypt the files for security, and provide an indexing service.
You've probably heard of OceanStore, which is an impressive example of the new file systems. But OceanStore is one of those heavyweight systems I mentioned near the beginning of this speech. It's a comprehensive solution to a very ambitious set of requirements, and I don't really think most people would run it. There are commercial systems that use these same principles but have much lower ambitions and are consequently more mature and widespread. I'd like free software systems to have access to this new generation of file systems.
The other interesting application is collaboration. Jabber looks very promising. It's so well thought out, and offers so much as a platform, and is so easy to program, that I'm convinced it will fly. The problem is the dearth of applications, so far, that run on top of Jabber. Jabber is like a new computer for which no programs have yet been written; few people can see its potential. Now we need applications that use Jabber to do all the great things you can do with structured data, such as in the example I gave earlier of political discussions.
When it gets really fun is when Jabber is used for program-to-program communication. With XML, you can structure communications so much you don't even have to be there. And this is a valuable goal, because none of us really want to spend all our time on computers. We'd rather be strolling through the forest or playing the violin or doing something else interesting. And so now I'll stop talking about software.
Don't miss the O'Reilly Emerging Technology Conference, May 13-16 in Santa Clara, California. This year, we'll explore how P2P and Web services are coming together in a new Internet operating system. Register by March 22 and save up to $695.
Return to the Web Services DevCenter.