Notify-osd and libnotify: how do they cooperate?

Solution 1:

notify-osd (like the standard notification-daemon and GNOME Shell) implements the Desktop Notifications Specification, which specifies a DBus interface for applications to talk to.

libnotify is a C library providing an API for applications to create and manage notifications; it uses DBus internally to talk to the notification daemon.

notify-send is a tiny commandline application which uses libnotify to show notifications.