|Version 14 (modified by lennart, 6 years ago)|
The Avahi project intends to take part on the Google Summer of Code 2007 as a project.
Here a few ideas for possible student projects:
- 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.
- 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
- Java support - Implement a JNI Java binding for avahi-client, possibly also implementing a compatibility library for the original Bonjour Java API
- 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.
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
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
tedp and federico already started on the last two items. Before anyone also starts to work on these they might want to contact federico and tedp.