[Haskell-cafe] ANNOUNCE: dbus-core 0.5 and dbus-client 0.1
jmillikin at gmail.com
Fri Oct 30 17:44:59 EDT 2009
These are pure-Haskell client libraries for using the D-Bus protocol.
D-Bus is heavily used for inter-application IPC on Free and
open-source desktop platforms, such as Linux, OpenSolaris, and
FreeBSD. These libraries allow applications written in Haskell to
inter-operate with other components of recent GNOME, KDE, and XFCE
This is the first "real" release of these libraries; dbus-core has
been published on Hackage for some time, but mostly just to make sure
I got the Cabal bits right. I feel they are now stable / featureful
enough for public use.
Both are available on Hackage:
"dbus-core" is an implementation of the D-Bus protocol, specifically
the parts relevant to clients. Eventually, it will probably grow some
functions useful for implementing a message bus as well. It includes
type mapping / conversion, an implementation of the wire format
(marshaling / unmarshaling), data types for the currently defined
message types (METHOD_CALL, METHOD_RETURN, ERROR, and SIGNAL) and a
basic parser / generator for introspection documents. It is roughly
equivalent in purpose to libdbus.
By itself, a protocol implementation is somewhat cumbersome to use, so
"dbus-client" is a high-level wrapper. It provides some abstractions
like remote object proxies, exported object trees, synchronous method
calls, signal reception, and name reservation. Messages are received
and processed in separate IO threads, allowing asynchronous method
call and signal handling.
The purpose between splitting the library into two packages is
stability; "dbus-core", ideally, will change only rarely --
performance improvements, new message / data types, etc. It provides a
base level of functionality which more specialised libraries may use.
"dbus-client" is an example of what such a library could look like,
though for now it's not very Haskell-y (IO everywhere, exceptions,
explicit locking). By separating the protocol from the client libs,
alternative client libs can safely depend on the protocol
To see a sample of the library working, there's a clone of the
"dbus-monitor" utility in <dbus-core/Examples>. Documentation is
currently a bit lacking, so for now, the best documentation is the PDF
of the source code itself, and the (rather barren) Haddock output:
Once more people have used it without any major API issues, I'll write
up a manual and populate the Haddock entries.
Please respond with any feedback, difficulties, or suggestions. I'm
particularly interested in ways to improve the public API, since I
would rather make any breaking changes *before* anything big depends
on these libraries.
More information about the Haskell-Cafe