Last month's release of KDE 3.4 was the first to feature Zeroconf's service discovery. Relevant applications can advertise their services, such as shared folders or networked games, which can then be browsed with the zeroconf:/ ioslave. KDE Dot News spoke to the man behind KDE's Zeroconf support Jakub Stachowski to find out more on this exciting technology. Read on for the interview and if you have more ideas for KDE technology interviews please add them to this wiki page.
Please introduce yourself and how you help KDE.
I'm Jakub Stachowski, a fourth year Electronics and Telecommunications student from Czempiń in Poland. My road with KDE is a typical one - I have used it for several years, then started writing small applications for private use and finally decided to join development. My main field of work in KDE is Zeroconf related: maintaining and improving library and support in various applications. I also fix bugs and add small features to various KDE applications when I have some free time and feel like hacking.
How did Zeroconf within KDE start and how did you get involved?
It started about a year ago with a wiki page giving some information about Zeroconf and which KDE applications could benefit from it. I found this concept promising so I returned to that page quite often to see if anything was being done yet. Time passed and it remained in concept stage. I decided to take it on myself because I had some free time and I wanted to help improving KDE. This project seemed like a good way to do it. The openness of the KDE developers community was a very pleasant surprise - no questions asked, just 'here is your cvs account, have fun'. I got lots of help too, like pointing out errors in design, fixing bugs and generally good advice.
What do all the different Zeroconf names mean? There's Zeroconf, dnssd, SLP, Rendezvous and Bonjour.
Zeroconf is a name used by IETF for several techniques that should allow you to setup and use a simple network with no need for any manual configuration. One of its parts, DNS-SD, is the service discovery protocol based on standard DNS. Rendezvous is just Apple's name for Zeroconf, this has recently been changed to Bonjour after a trademark dispute. It is trademarked so you will not find it anywhere in KDE code or documentation. SLP is another service discovery protocol used primarily by Novell. It has nothing to do with DNS-SD or Zeroconf.
What can Zeroconf offer for the end user?
The goal of Zeroconf is making things simpler by removing as much network configuration as possible. KDE uses one of Zeroconf's parts - service discovery. How do users benefit from that? Lets say you have several particularly good songs and you want your friend (using the same local network) to listen to them. Without a service discovery protocol, after starting the server, you have to tell them the IP address and port. With Zeroconf they don't need to worry about that because your songs will just show up in Konqueror and Amarok's file browser. Another similar case is network gaming on a LAN - it is much simpler to select a game from the list than finding and entering a server's address and port number.
What is the status of Zeroconf support in KDE 3.4?
It is a new feature in 3.4 so support is not extensive, but there are some applications that use it - for example games like lskat, kbattleship and kwin4 (a connect four game, not related to our window manager). The 'Public File Server' kicker applet now announces its presence on the network so it can be found by, for example, zeroconf:/ ioslave. This is a kind of universal browser for all published services on the network. Apart from http it also supports ftp, nfs, ssh, vnc and more. One caveat: it will not show you every ftp server on the LAN, but only those broadcasted using Zeroconf. For now I think only MacOSX announces most of its services by default. Another example is remote desktop - krfb and krdc added support for DNS-SD (in addition to existing SLP) for discovering shared desktops. There are also external applications supporting Zeroconf such as Mateedit, a multi-user text editor that allows concurrent editing of one file by several people at once. It uses Zeroconf to announce and locate editing sessions. There is also a daap:/ protocol handler in kdeplayground-multimedia for browsing iTunes shares. I hope more of them will come eventually.
How does the support compare to other platforms with Zeroconf such as MacOS or Gnome?
Apple began integrating Zeroconf into their system much earlier than us. They are also original authors of DNS-SD and multicast DNS specifications. Support in MacOSX is very comprehensive - almost every network application includes it. Because it is part of the platform lots of 3rd party developers started to use it to make their applications easier to use. Gnome also started before KDE - about half a year earlier in their 2.8 release. It was not surprising that in the beginning support was very sketchy - basically only Nautilus being able to discover WebDAV and FTP servers. More unexpected is that it has not progressed too much since initial implementation - support was added to one game (Nibbles) and GnomeMeeting. Apparently GNOME developers want to finish a more Free replacement for Howl daemon called Avahi before making any serious effort to further enhance Zeroconf support. So KDE is somewhere in the middle - already further than GNOME but there is still work to do before it will be on the same level as MacOSX in terms of Zeroconf support.
Do you think Windows will ever support the standard?
To some extent, yes. There are already several implementation for Windows, including 'official' one made by Apple. It is used for example by iTunes. But I don't see many Windows applications depending on it - DNS-SD support is available only as 3rd party add-ons and developer can never be sure if it will be available. Fact that Microsoft pushes its own service discovery protocol (uPNP) also does not help.
What future plans to you have to expand the support?
The current design is centered around DNS-SD, but there are also other protocols like SLP or even good old port scanning (used by our lan:/ ioslave). The plan is to have multiple backend modules and combine information gathered using all protocols to provide a more complete list of services to the user. This will also will help solving second big problem: it is hard to use DNS-SD over internet, because current way ('wide area') requires a DNS server configured to accept dynamic updates - which is not common. The user has to configure DNS server name, domain, hostname and key (used for authentication with DNS server) - it can hardly be called zero-configuration. Instead I want to link service discovery with instant messaging. It will work in a similar way to DNS-SD on local network, but with IM connection acting as a communication medium. When publishing a service the user will select recipients from a contact list. Service description will be sent using an out-of-band channel of IM protocol if one exists. If not, then probably encoded text messages and some kind of filter will be needed. Then it will be received, processed and added to discovered services list for applications to use.
Technically speaking how does Zeroconf work it's magic and what does a developer have to do to implement it?
Zeroconf uses old good DNS to perform new tricks. Instead of a centralised server every host on local network runs its own mini-server that communicates with others using multicast. In order to resolve a name a question is sent to all servers on the network. First one that knows answer responds. Major advantage is that no configuration is necessary - just connect the computer and it instantly becomes part of multicast DNS system. Service discovery also uses DNS. Every service is identified by domain name (for example "My files._ftp._tcp.local.") with an SRV record pointing to hostname and port number. It can also have TXT record with additional attributes. But for developers it is more important to know how to use these services in their of applications. For publishing: create a PublicService object giving its name, type and port, then publish it. That is all, exactly two lines of code. Searching for services is almost as simple - create a ServiceBrowser, connect a signal that will be emitted when something is found and run the browser. If you want to have your services shown in Konqueror (or file dialog) a very simple text file with service description is needed. Several examples can be found in KDEDIR/share/apps/zeroconf.
What are the required server components for ZeroConf to work, and how difficult are they to install and configure?
The sole requirement is Apple's mDNSResponder package. To prevent frequent confusion: it is Apple's mDNSresponder, do not use the Debian package with the name because it actually contains Howl. KDE is the first big project to use Apple's mDNSResponder outside MacOS X so it have not been packaged by most distributions yet and installation from sources will be necessary in many cases. It is really easy: 'make os=linux && make os=linux install' and you are done. Remember that mDNSResponder has to be installed before compilation of kdelibs. If you have problems, look at the KDE Zeroconf wiki page for solutions to several of the most frequent issues. You can also use a Konstruct which automatically compiles and installs KDE with all dependencies.
KDE uses the mDNSresponder library from Apple, what are the licencing issues involved with this and what's the advantage over the (mostly GPL) libhowl?
mDNSResponder consists of two main components - daemon doing all hard job (licensed under Apple Public Source Licence 2) and client library (BSD licence). APSL is considered free software license by FSF but not, for example, by Debian and Red Hat. It is also not GPL compatible and because in older releases also client library was also covered by APSL2, KDE and most open source project could not use it. Recently it was changed to BSD and now it is exactly the same as Howl's license. Apple's implementation has several technical advantages over Howl: better support for IPv6, cleaner and easier to use API and support for 'wide-area' mode using normal DNS server to work with big networks or Internet. There is also a third Zeroconf implementation called Avahi, that has license acceptable even to Debian, but it is too immature to use it currently.
Do any distributions come with KDE Zeroconf support already?
Yes, newest versions of several distributions started supporting it. First was as usual Gentoo - you need to add 'zeroconf' to USE flags in order to enable it. Also users of recently released SuSE 9.3 and ArkLinux 2005.1 can enjoy working Zeroconf out of the box.