This Spec describes the integration of ZeroConf technologies for Dapper


ZeroConf allows computers to communicate on a network without any kind of configuration, additionally it provides for discovery of services, so instead of specifying an IP you can select from a list of advertised servers on the network. This is usefull so that you can simply plug two laptops together and transfer a file or play a network game. It is also useful in situations where you don't know about the other services, such as people to chat to or files to share.

Scope and Use Cases

Home Users

  • Trent wants to send a file to Jeff, he plugs an ethernet cable in between his two computers and is able to drag and drop it onto Jeff's computer in the Network Servers. Neither Trent nor Jeff touched any configuration and a pre-existing network was not setup.
  • Trent is at a conference and sitting around doing nothing, he opens up gaim and can see other people on the network to talk to.
  • Jane wants to play a network game of Four-in-a-row with Claire, they are using wireless at Jane's place with an existing IP setup, Jane starts a game and Claire is able to connect to it simply by clicking the name of the game Jane specified in Four-in-a-row.
  • Isaac is at Uni, he has completed his work and wants to print it out. His Uni' printers advertise via mDNS/DNS-SD and cups automatically configures itself to print to these printers when he connects his laptop.
  • Sebest subscribes to the domain using Wide-Area Zeroconf and his firefox's bookmark is automagically updated with links to launchpad, wiki, bugzilla, etc...

XXX:smurf: Previous versions had a rather large section on corporate uses here.
Please either re-add this section, or mention explicitly that this is out of scope for this spec (why?).


  • Avahi/Zeroconf should be turned off by default and have an easy option to be turned on (both to respect the Ubuntu default policy of "no open ports", and privacy issues). The option will be a added to the network-admin tool and allow to specify the interface to use.

Implementation Plan

  • Move avahi into main [deps libdaemon], SebastienBacher has already made a wiki page about this

  • Make avahi not listen on the network by default.
  • Install/configure avahi and libnss-mdns by default with the desktop.
  • Install zeroconf, if NetworkManager does not provide sufficient zcip autoconfiguration by then

  • Ask Trent to add an option to avahi to start/stop listening on a particular interface (so that we don't have to start/kill the daemon whenever we change the option or bring an interface up/down).
  • Add an option to one of the GNOME dialog to activate the feature. This option will send a dbus signal.

Packages Affected

  • zeroconf - configures IPv4 Link Local addresses when there is no static IP or DHCP address
  • network-manager - May be able to do what zeroconf does
  • avahi - Handles service dicovery, allows applications to publish and browse for services
  • libnss-mdns - Allows the system to resolve .local addresses, advertisd by avahi via the standard resolver interface.
  • libknssd-avahi - Allows *all* kde programs already using dns-sd with the KDE api to use avahi
  • libavahi-bonjour-compat (doesnt exist in ubuntu yet, avahi 0.6, for dapper) -- Allows applications to use avahi that use the bonjour API (in both a API and ABI compatible manner)
  • libavahi-bonjour-howl - as above, but for HOWL
  • service-discovery-applet - gnome applet display services and allowing you to launch them
  • gaim - gaim 2.0 will support zeroconf (currently support howl, port to avahi may happen)
  • gnome-vfs - support zeroconf with howl (avahi 0.6 has a howl compat layer specifically for gnome-vfs)
  • rhythmbox - DAAP (Music Sharing) support

Outstanding Issues

  • where do we put the option to turn it on/off
    • BenGoodger: IMO it should be part of the installer: "Enabling automatic network discovery increases convenience, but may decrease the security of your computer under certain circumstances. Do you want to enable it?"

    • MartinVisser: Alternatively, Avahi be enabled to listen-only when network-manager detects a network change and could prompt the user with "I see you have joined a new network, and these <listed> services are being advertised. If you trust this network, and aware of the security risks, do you want to enable visibility of these servers?"

  • printing support: as mentionned by TrentLloyd, it is upstream work. Hub plan to do it to implement

    • ZeroConf printer support

    • Advertise shared printer
  • zeroconf (the application) needs a bit of work to become usable
  • make clear for the user if the feature is used or not
  • make certain the interaction between avahi and n-m is sane
  • Avahi is not limited to lan, there is wide-area (unicast dns) support coming soon. We should take this in account, because an UI will be needed for the users. He will configure the domain(s) that he'd like to publish/browse and also an optionnal login/pass for publishing purpose. This UI could also be use to enable/disable avahi publishing for lan use.


lathiat:Avahi 0.6 has support for wide-area zeroconf; some work was just being done to allow this to be configured on a per-user basis, so we could work with that

lathiat: (on the issue of allocating a zeroconf address to interfaces which also have a real IP address) This is not a design issue at all, the IPv4-LL spec 'strongly recommends' that you only assign a IPv4-LL IP when no other IP is available (on that interface), essentially, theres no point having both a routable and non-routable address, other than when there are existing left-over connections still using that IP from before, see the RFC for a better discussion on that

LucaFerretti2: gnome-vfs supports avahi 0.6 from version 2.13.2 Smile :-) no compatibility layer needed

Dyssident2: service-discovery-applet should be thrown out because it a) doesnt do much b) feels very hackish. perhaps concentrating on improved support in Gnome/Nautilus would be more fruitful.


ZeroConfSpec (last edited 2008-08-06 16:59:57 by localhost)