The Avahi project intends to take part on the Google Summer of Code 2007 as a project.

Update: As it appears Avahi has not been accepted as a GSoC 2007 project, if you are still interested in doing one of these projects during GSoC, you might have a chance to do this under the  GNOME umbrella.

Here a few ideas for possible student projects:

Porting

  1. Port to Windows - Port the Avahi daemon, the avahi client library and the Bonjour compatibility library to native Win32 (no Cygwin please), possibly also avahi-sharp and the HOWL compat libs. Implementing an alternative to the current D-Bus transport might be advisable. Since Win32 ist not home turf for any of the Avahi maintainers, this job requires some good knowledge of Win32, since we cannot help the student with Win32 but only with understanding the Avahi source code. Requirements: Win32 API knowledge, C programming

Language Support

  1. Python support - Replace the current simplistic avahi-python implementation with a full fledged wrapper aorund avahi-client. This could either be done by implementing a C-based module or by using  ctypes. Requirements: Good knowledge of Python, some C
  2. Java support - Implement a JNI Java binding for avahi-client, possibly also implementing a compatibility library for the original Bonjour Java API. Requirements: Good knowledge of Java, some C
  3. C++ support - Add a high quality C++ wrappers for the Avahi libraries. This would probably include both a wrapper around avahi-client/avahi-common (maybe using libsigc++?) and a gtkmm-style wrapper around libavahi-ui. Requirements: Good knowledge of C++, some C

And no, Swig is not really an option. Swig would not be much better than what we currently have: generic wrapping around some D-Bus API. We want bindings that actually feel like native bindings, i.e. Python bindings that feel like python bindings, Java bindings that feel like Java bindings and C++ bindings that feel like C++ bindings.

Also: these wrappers should be based on the C versions of libavahi-client/libavahi-common, and not make use directly of D-Bus. Why? avahi-client offers some functionality beyond mere wrapping of D-Bus, such as per-user browsing domain configuration. Also, if Avahi is ever ported to Win32 the D-Bus is probably replaced (only for that specific port) by some other communication method, and thus basing the wrappers on libavahi-client will make porting them to win32 easier.

Third Party Application Integration

  1. CUPS integration - Implement Avahi based browsing in CUPS, with all bells and whistles, including paper size handling and so on. This item probably requires some cooperation with the CUPS project, since the patch needs to be integrated with their code, not ours. Requirements: Good knowledge of C
  2. res_query() - Find a clean way to add mDNS support to glibc's res_query(), without making Avahi a dependency of GLIBC. This item probably requires some cooperation with the GLIBC project, since it probably requires changes in their code. Requirements: Good knowledge of C
  3. Improved integration into GNOME - This is a bag of small things: notify the user about name conflicts with libnotify; change the mDNS host name depending on the user logged in; make NetworkManager a little bit more Avahi-aware (i.e. replace their IPv4LL implementation with avahi-autoipd; and the previous two items should probably done in NetworkManager as well); a small capplet for configure browse domains; support domains in gnome-vfs/nautilus; add service browsing capabilities through avahi-ui to every single GNOME module that is part of the GNOME Desktop set of packages and where Zeroconf makes sense, such as the proxy configuration capplet, evolution mail erver configuration, various gnome applets, totem streaming server selection and more (Also see  http://live.gnome.org/SummerOfCode2007/Ideas) Requirements: Good knowledge of C, GTK

Protocol Support

  1. LLMNR support - Integrate Microsoft's link-local naming protocol  LLMNR (rfc4795) into Avahi, to allow it to take part on both Apple-style and Microsoft-style Zeroconf networking. Oh, LLMNR ist a much simpler protocol than mDNS, so this should be easier than it might sound. Requirements: Good knowledge of C
  2. DNSSEC, writable wide-area DNS (aka DNS Update), and  DNS-LLQ support - Implement proper DNS-SD over unicast DNS support in Avahi, for use on the Internet and in large corporate networks. Requirements: Good knowledge of C, basic insight into how cryptography works. Federico is working on this.
  3. NAT-PMP support - Implement a  NAT-PMP client and server for integration into Avahi. The client should probably also seamlessly support the UPNP IGD protocol. Requirements: Good knowledge of C. tedp is working on this under the project name  Stallone.

Please note that we - the Avahi maintainers - can only provide full mentoring support for the "Protocol Support" and "Language Support" items. If you are interested in porting Avahi to Win32, make sure to have very good Win32 programming skills, because that is not an area where we can help you a lot. If you are interested in doing the Third Party Application Integration stuff we can certainly mentor you, but some cooperation with the respective projects might be advisable.

Advice for Students

 http://www.postgresql.org/developer/summerofcodeadvice.html