Main Page DBusSharp

From NDesk

(Difference between revisions)
Jump to: navigation, search
Revision as of 01:28, 19 October 2006 (edit)
Alp (Talk | contribs)

← Previous diff
Current revision (18:12, 10 February 2009) (edit) (undo)
Alp (Talk | contribs)
(Add note on bug tracker)
 
(101 intermediate revisions not shown.)
Line 1: Line 1:
-dbus-sharp is a C# implementation of [http://www.freedesktop.org/wiki/Software/dbus D-Bus]. It's often referred to as "managed D-Bus" to avoid confusion with existing bindings (which wrap libdbus).+[http://www.ndesk.org/archive/dbus-sharp/ndesk-dbus-0.6.0.tar.gz http://www.ndesk.org/images/step1.png] [http://www.ndesk.org/archive/dbus-sharp/ndesk-dbus-glib-0.4.1.tar.gz http://www.ndesk.org/images/step2.png]
 + 
 +ndesk-dbus is a C# implementation of [http://www.freedesktop.org/wiki/Software/dbus D-Bus]. It's often referred to as dbus-sharp, or "managed D-Bus" to avoid confusion with existing bindings (which wrap libdbus).
D-Bus is an inter-process communication framework that lets applications D-Bus is an inter-process communication framework that lets applications
Line 9: Line 11:
[[Image:ManagedDBus.png|thumbnail]] [[Image:ManagedDBus.png|thumbnail]]
-This software is currently at an early stage of development and not+This software is under development but is already used by a wide range of applications for tasks as simple as maintaining a single instance of the GUI to whole instant messaging frameworks and hardware detection APIs.
-recommended for use in stable applications.+
-However it is hoped that it will soon provide a tested, high-performance+It provides a tested, high-performance
bridge to and from all systems that are exposed via D-Bus, regardless of bridge to and from all systems that are exposed via D-Bus, regardless of
-programming language, UI toolkit or license.+programming language, UI toolkit or license. The source code is MIT X11 licensed (Free Software/Open Source), allowing integration into other projects with very few restrictions.
The code is a clean-room implementation based on the [http://dbus.freedesktop.org/doc/dbus-specification.html D-Bus Specification] The code is a clean-room implementation based on the [http://dbus.freedesktop.org/doc/dbus-specification.html D-Bus Specification]
Line 21: Line 22:
It aims for compatibility with [http://www.mono-project.com/ Mono] and Microsoft .NET frameworks It aims for compatibility with [http://www.mono-project.com/ Mono] and Microsoft .NET frameworks
supporting the 2.0 profile. Backward compatibility with 1.0 will not be supporting the 2.0 profile. Backward compatibility with 1.0 will not be
-a consideration.+a consideration. Ongoing work to ensure CLS compliance means that managed D-Bus can be used by any language that can target the CLR.
- +
<!-- <!--
 +
Note that the UNIX transport requires changes made to the runtime and class libraries that are only available in Mono svn as of August 21 '06. See [http://bugzilla.ximian.com/show_bug.cgi?id=79084 Mono bug #79084] and svn revisions r63823 and r63824. These modifications add support for the UNIX domain socket abstract namespace. [http://www.go-mono.com/archive/1.1.17 Mono 1.1.17] is the first release to include the required fixes. Note that the UNIX transport requires changes made to the runtime and class libraries that are only available in Mono svn as of August 21 '06. See [http://bugzilla.ximian.com/show_bug.cgi?id=79084 Mono bug #79084] and svn revisions r63823 and r63824. These modifications add support for the UNIX domain socket abstract namespace. [http://www.go-mono.com/archive/1.1.17 Mono 1.1.17] is the first release to include the required fixes.
--> -->
Line 31: Line 32:
==== Supported platforms ==== ==== Supported platforms ====
-A standard build of managed D-Bus will work on several platforms:+A standard build of managed D-Bus will work across a wide range of platforms:
- + 
 +* x86
* 64-bit (eg. AMD64) * 64-bit (eg. AMD64)
* Big endian (eg. PPC) * Big endian (eg. PPC)
-* Old Mono compatibility layer to replace broken unix sockets available for pre-1.1.17 releases+* ARM (eg. Nokia 770)
-* FreeBSD (peer to peer)+* Mono 1.1.13 or newer
- +* GNU/Linux
-==== Untested platforms ====+* FreeBSD
- +
-Managed D-Bus should work on these platforms but no testing has been done yet due to lack of hardware:+
- +
-* FreeBSD connections to libdbus (peer credential support not yet tested)+
* Mac OS X * Mac OS X
-* Solaris+* Microsoft Windows / .NET runtime (in the 0.5 development branch)
-* Microsoft Windows / .NET runtime+
-=== Tasks remaining ===+==== Soon to be supported ====
-Updated Saturday October 7 2006+<!--
- +* Solaris (in progress: http://bugzilla.gnome.org/show_bug.cgi?id=370081 -- external patch available to make it work in the meantime)
-==== Tasks towards a pre-1.0 preview release ====+-->
- +* MIPS (untested) (eg. wifi routers) -- pending JIT fix
-* Marshal ObjectPath etc. as a live instance+
-* Fix remaining obscure object mapping and transport bugs+
-* Better checks for signature suitability+
-* Complete internal message queues+
-* Full thread safety (dbus-sharp was designed for thread safety but some strategic locks have still to be added and it would be better to get this right than to rush it)+
- +
-==== Tasks towards a 1.0 release ====+
- +
-* out parameter support+
-* Generic List support+
-* Non-native endian message support+
-* Object path tree for introspection etc.+
-* Finalize public API with input from .NET remoting and D-Bus experts+
-* Run final API through fxcop, gendarme etc.+
-* Complete GLib main loop integration API+
-* Make sure activation works and that writing managed services is elegant+
- +
-==== Tasks for 1.1 ====+
- +
-* Full Exception support (maybe including some amount of stack trace based on contract, if this is desirable)+
-* Build system, versioning and packaging considerations+
-* Proper address parsing and writing if/when the spec is improved to document it fully+
-* Optimize low hanging fruit like marshaling arrays and collections of primitives+
-* Optimize marshaling of entirely blittable structures+
-* Built-in non-unix transports (tcp etc.)+
-* Dynamic type casting and interface implementation+
-* More?+
- +
-==== Tasks for 1.2 ====+
- +
-* Optimize marshaling of structures which are partially blittable+
-* Clever optimizations (scatter gather IO etc.)+
-* Customizable object mapping based on constraints and a regular-expression style mapper+
- +
-==== 1.2 and beyond ====+
- +
-* Complete message filter engine+
-* Daemon+
-* Integration with other message bus systems+
-* [http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython IronPython] API to implement current dbus-python API with managed D-Bus+
-* [[Cilc|cilc]] GObject interface and proxy generator+
- +
-==== General tasks ====+
- +
-These are tasks or thoughts that fall outside of the library itself, such as bugs found in other software during development of dbus-sharp:+
- +
-* [http://mail.gnome.org/archives/desktop-devel-list/2006-October/msg00082.html NetworkManager has bad D-Bus API]+
-* Banshee should expose signals for state changes now that it's easily done+
-* Muine and Banshee may be able to share one or more common public D-Bus interface for control and management, perhaps using [http://bmpx.beep-media-player.org/site/DBus_Interface#DBus_C_API D-Bus work done by BMP]+
-* Managed hal-sharp has regressions that need debugging+
-* Applications that may need porting: Muine, Tomboy+
-* F-Spot could make use of hal-sharp instead of the libdbus command-line tools and a mesh of shell scripts it has now+
- +
-=== Protocol Extensions ===+
- +
-dbus-sharp embraces the D-Bus specification and extends it with certain optional additions to the D-Bus protocol. These are ifdef'd:+
- +
-==== PROTO_REPLY_SIGNATURE ====+
- +
-''This feature is no longer enabled by default.''+
- +
-The signature of the MethodReply expected by a MethodCall. This is implemented as a header FieldCode:+
- +
-FieldCode.ReplySignature = FieldCode.Signature + 1 = 9+
- +
-It has the D-Bus type DType.Signature+
- +
-'''Note:''' This may soon be renamed to FieldCode.RequestSignature to mirror FieldCode.ReplySerial.+
- +
-The defined value will always be 9 and other implementations should consider this field code reserved.+
- +
-==== PROTO_TYPE_SINGLE ====+
- +
-''This feature is enabled by default but shouldn't be used when connecting to libdbus peers.''+
- +
-A single precision floating point type defined by the type code 'f'.+
- +
-Will not work with current libdbus dbus-daemon. Useful for peer to peer connections.+
- +
-==== Further thoughts ====+
- +
-Think about Decimal, DateTime, signed byte, char "primitives"+
- +
-Do they deserve type codes? Look at other IPC systems for guidance.+
=== Users === === Users ===
-Even though this software is ''not yet released'', developers of a few applications have decided to ignore the warnings and (correctly) bundle it or depend on it directly as a moving target. This kind of arrangement can work if you're on good terms with someone who can maintain dbus-sharp, but ideally you should wait for a stable release.+This is a list of applications known to make use of managed D-Bus:
* [http://www.ndesk.org/ NDesk] component object model (NParts etc.) * [http://www.ndesk.org/ NDesk] component object model (NParts etc.)
* [http://telepathy.freedesktop.org/wiki/TelepathySharp telepathy-sharp] * [http://telepathy.freedesktop.org/wiki/TelepathySharp telepathy-sharp]
-* [http://tapioca-voip.sourceforge.net/ Tapioca] VoIP and IM application development framework+* [http://tapioca-voip.sourceforge.net/ Tapioca] VoIP and IM application development framework ([http://telepathy.freedesktop.org/wiki/TapiocaSharp tapioca-sharp])
* [http://tapioca-voip.sourceforge.net/wiki/index.php/Landell Landell] VoIP and IM client using [http://gtk-sharp.sourceforge.net/ Gtk#] * [http://tapioca-voip.sourceforge.net/wiki/index.php/Landell Landell] VoIP and IM client using [http://gtk-sharp.sourceforge.net/ Gtk#]
-* [http://www.banshee-project.org/ Banshee] provides and uses a media player API, and uses Gnome Power Manager, Gnome NetworkManager, notify-sharp+* [http://www.gnome.org/projects/NetworkManager/ Gnome NetworkManager] binding
 +* [http://www.gnome.org/projects/gnome-power-manager/ Gnome Power Manager] binding
 +* [http://www.banshee-project.org/ Banshee] provides and uses a media player API, and uses [http://www.gnome.org/projects/gnome-power-manager/ Gnome Power Manager], [http://www.gnome.org/projects/NetworkManager/ Gnome NetworkManager], Helix, notify-sharp, org.gnome.SettingsDaemon
 +* [http://svn.banshee-project.org/helix-dbus-server/ Helix D-Bus] for remote control of the media stream
* hal-sharp is provides access to [http://www.freedesktop.org/wiki/Software/hal HAL], the Hardware Abstraction Layer * hal-sharp is provides access to [http://www.freedesktop.org/wiki/Software/hal HAL], the Hardware Abstraction Layer
* [[NotifySharp]] provides a client implementation for [http://trac.galago-project.org/wiki/DesktopNotifications Desktop Notifications] and works as a libnotify client replacement * [[NotifySharp]] provides a client implementation for [http://trac.galago-project.org/wiki/DesktopNotifications Desktop Notifications] and works as a libnotify client replacement
* [http://www.f-spot.org/ F-Spot] personal photo management application, for single-instance detection [http://bugzilla.gnome.org/show_bug.cgi?id=361091] * [http://www.f-spot.org/ F-Spot] personal photo management application, for single-instance detection [http://bugzilla.gnome.org/show_bug.cgi?id=361091]
 +* [http://www.beatniksoftware.com/tomboy/ Tomboy] simple note taking application, for remote control and single-instance detection
 +* [http://mono.dcsharp.com/ dcsharp] file sharing client using the Direct Connect protocol, for notifications, single instance and remote control
 +* [http://dev.mmgsecurity.com/projects/lat/ LAT] LDAP Administration Tool
 +* [http://www.snorp.net/log/2006/12/08/im-in-ur-virtual-machines-managing-them/ VMX Manager], Virtual Machine Manager, GNOME SVN(?)
 +* [http://capuchin.k-d-w.org/ Capuchin] (formerly NewStuffManager), a plugin update/download service
 +* [http://folks.o-hand.com/iain/last-exit/ last-exit], a music player for Last.fm
 +* [http://muine-player.org/ Muine], a music player for GNOME
 +* [http://www.chrishowie.com/2007/01/10/the-fuzz/ The Fuzz], process security manager with GUI
 +* [http://yimports.com/~cpinto/projects/gnome/gshare/ GShare], file sharing utility
 +* [http://telepathy.freedesktop.org/wiki/GnomeUI Chatter (Telepathy GnomeUI)] VoIP and IM client using [http://gtk-sharp.sourceforge.net/ Gtk#]
 +* [https://forgesvn1.novell.com/viewsvn/babuines/trunk/Babuine-FoundationComponents/TimeTracker/ Babuine TimeTracker]
 +* [http://svn.myrealbox.com/viewcvs/trunk/gnome-keyring-sharp gnome-keyring-sharp] [http://en.wikipedia.org/wiki/GNOME_Keyring GNOME Keyring] implementation, to get the keyring socket address
 +* [http://developer.novell.com/wiki/index.php/EID-belgium eIDconfig-belgium] configuration toolkit for the Belgian eID middleware
 +* [http://svn.gnome.org/viewcvs/podsleuth PodSleuth] iPod model information discovery/export tool, using hal-sharp
 +* [http://live.gnome.org/Banter Banter] collaboration client (Telepathy)
 +* [http://netherilshade.free.fr/circ/ circ] IRC client
 +* [http://svn.gnome.org/viewvc/beagle/trunk/beagle-xesam/ Beagle xesam-adapter] desktop search API
 +* [[DBusExplorer|D-Bus Explorer]]
 +* [https://edge.launchpad.net/gc GNOME Do]
 +* [http://www.iola.dk/nemo/ Nemo] file manager, for [http://www.gnome.org/projects/tracker/ Tracker]
 +* [http://www.cmartin.tk/blam.html Blam] RSS aggregator
 +* [http://monotorrent.com/ MonoTorrent / Monsoon] BitTorrent client
 +
 +=== Documentation ===
 +
 +See the [[DBus_Documentation|NDesk.DBus documentation]] for a brief developers guide.
=== Contact === === Contact ===
Line 155: Line 97:
Support can be found on the #managed-dbus IRC channel on irc.gnome.org Support can be found on the #managed-dbus IRC channel on irc.gnome.org
-There is no mailing list or email contact address.+=== Reporting bugs ===
-=== Download ===+Bugs are now tracked on the [https://bugs.launchpad.net/ndesk-dbus NDesk D-Bus Launchpad bug tracker].
-==== 0.1 ====+If you have sent bug reports or feature requests directly to the authors in the past, please create a new entry in the tracker to ensure the issues are dealt with.
-Version 0.1 is out: [http://www.ndesk.org/archive/dbus-sharp/ http://www.ndesk.org/archive/dbus-sharp/]+=== Download ===
-This is an ''emergency release'' to provide a working alternative for applications stuck with the unmaintained dbus-sharp binding for libdbus. The API/ABI may change in future releases, and it hasn't been audited for security, which means that it shouldn't be used to provide services to an untrusted audience over TCP. However, a number of applications are successfully using this code base already. Event handlers must be manually removed (foo.MyEvent -= HandleMyEvent;) to avoid flooding the daemon with match rules. MarshalByRefObject may not be supported in future releases, so you should stick to using interfaces to define dbus API. Exceptions are not consistently mapped but should work both in exported and imported API.+See the [http://www.ndesk.org/archive/ndesk-dbus/ managed D-Bus release archive].
==== Development ==== ==== Development ====
-git-clone [http://git.ndesk.org/?p=dbus-sharp git://git.ndesk.org/pub/scm/dbus-sharp]+See the [[DBusSharp/Roadmap|development roadmap]] for a detailed list of remaining tasks.
-The dbus-sharp API is not stable. In particular, please don't check this into your cvs/svn repository or bundle it with your program. And don't even think about installing it in the user's GAC or packaging it for your distribution yet.+git-clone [http://gitweb.ndesk.org/?p=dbus-sharp git://git.ndesk.org/pub/scm/dbus-sharp]
 + 
 +The dbus-sharp API is now fairly stable stable. It's best to install a released version and depend on it from your application rather than bundling the sources directly as has been done in the past.
There is also a module which provides GLib integration as an optional extra: There is also a module which provides GLib integration as an optional extra:
-git-clone [http://git.ndesk.org/?p=dbus-sharp-glib git://git.ndesk.org/pub/scm/dbus-sharp-glib]+git-clone [http://gitweb.ndesk.org/?p=dbus-sharp-glib git://git.ndesk.org/pub/scm/dbus-sharp-glib]
 + 
 +=== Exposition ===
 + 
 +* [http://live.gnome.org/Boston2006 GNOME Boston Summit 2006], MIT Media Lab, Aaron Bockover
 +* [http://www.guadec.org/node/555 GUADEC 2007] Birmingham, UCE Conservatoire, Alp Toker ([http://www.atoker.com/dbus/managed-dbus-guadec07.pdf view slides])

Current revision

step1.png step2.png

ndesk-dbus is a C# implementation of D-Bus. It's often referred to as dbus-sharp, or "managed D-Bus" to avoid confusion with existing bindings (which wrap libdbus).

D-Bus is an inter-process communication framework that lets applications interface with the system event bus as well as allowing them to talk to one another in a peer-to-peer configuration.

Contents

[edit] Status

This software is under development but is already used by a wide range of applications for tasks as simple as maintaining a single instance of the GUI to whole instant messaging frameworks and hardware detection APIs.

It provides a tested, high-performance bridge to and from all systems that are exposed via D-Bus, regardless of programming language, UI toolkit or license. The source code is MIT X11 licensed (Free Software/Open Source), allowing integration into other projects with very few restrictions.

The code is a clean-room implementation based on the D-Bus Specification Version 0.11 and study of the wire protocol of existing tools.

It aims for compatibility with Mono and Microsoft .NET frameworks supporting the 2.0 profile. Backward compatibility with 1.0 will not be a consideration. Ongoing work to ensure CLS compliance means that managed D-Bus can be used by any language that can target the CLR.

[edit] Cross platform support

[edit] Supported platforms

A standard build of managed D-Bus will work across a wide range of platforms:

  • x86
  • 64-bit (eg. AMD64)
  • Big endian (eg. PPC)
  • ARM (eg. Nokia 770)
  • Mono 1.1.13 or newer
  • GNU/Linux
  • FreeBSD
  • Mac OS X
  • Microsoft Windows / .NET runtime (in the 0.5 development branch)

[edit] Soon to be supported

  • MIPS (untested) (eg. wifi routers) -- pending JIT fix

[edit] Users

This is a list of applications known to make use of managed D-Bus:

[edit] Documentation

See the NDesk.DBus documentation for a brief developers guide.

[edit] Contact

Support can be found on the #managed-dbus IRC channel on irc.gnome.org

[edit] Reporting bugs

Bugs are now tracked on the NDesk D-Bus Launchpad bug tracker.

If you have sent bug reports or feature requests directly to the authors in the past, please create a new entry in the tracker to ensure the issues are dealt with.

[edit] Download

See the managed D-Bus release archive.

[edit] Development

See the development roadmap for a detailed list of remaining tasks.

git-clone git://git.ndesk.org/pub/scm/dbus-sharp

The dbus-sharp API is now fairly stable stable. It's best to install a released version and depend on it from your application rather than bundling the sources directly as has been done in the past.

There is also a module which provides GLib integration as an optional extra:

git-clone git://git.ndesk.org/pub/scm/dbus-sharp-glib

[edit] Exposition

Retrieved from "http://ndesk.org/DBusSharp"