[Development] Request for a sandbox area: Replicant
Thiago Macieira
thiago.macieira at intel.com
Sat May 31 01:33:34 CEST 2014
Em sex 30 maio 2014, às 22:57:02, Stottlemyer, Brett escreveu:
> I'd like to officially request a sandbox for: Replicant
Hello Brett
I again support the creation of the repository. We'll have to discuss whether
this can become part of the Qt standard release because of the overlap in
requirements with QtDBus as well as the Publish & Subscribe framework that
used to exist in Qt Mobility and is still present in qtsystems.
> What need does this module solve?
> There were a number of reasons that made QtDBus unattractive for my use
> case.
> 1) Desire to work on Windows as one of the target platforms. This
> required building the module/dependencies from source, by every developer
> working on the project.
One of the goals for QtDBus is to replace the need to have libdbus-1
installed. We discussed this at QtCS last year and we all agreed this is the
future, but work has not happened. This is required for kdbus support on
Linux. See the notes from last year:
http://qt-project.org/groups/qt-contributors-summit-2013/wiki/QtDBus_CS
If libdbus-1 is gone, peer-to-peer D-Bus communication should just work on any
platform that Qt can run, including Windows, without external dependencies. A
bus-type communication will still require a server: either dbus-daemon or a
replacement of your choosing.
> 2) Complexity in initialization vs. notification.
> There did not seem to be a good way to get the desired properties of an
> object and enable change notification from that instant forward. Getting
> properties and getting notifications are separate requests, so there is the
> possibility of a race condition that would cause the client to be out of
> sync with the server.
That is correct. I've opposed so far any use of the PropertyChange signal that
other D-Bus bindings use. The property is very useful for the receiver side,
as it could get the change notification from the remote. But it's very clumsy
from the sender side, as you don't know whether there's anyone listening for
the notifications. Without that piece of information, a generic framework like
QtDBus could end up spamming the bus with unnecessary signals.
In order to implement it, I will require a counterpart method to enable the
emission of signals.
The same goes for the proposed ObjectManager interface that would notify of
the creation and destruction of objects in the service.
> 3) Using QtDBus as an IPC mechanism between multiple
> physical computers does not seem to be a recommended use-case.
Correct, but only because libdbus-1 does not offer native support for
encryption and authentication. It does offer a "d-tube" functionality, which is
simply getting and setting the bytes that correspond to one D-Bus message, so
that the upper layer could send over their preferred communication method. By
using this, we'd be able to put the bytes over a QSslSocket provided by the
user and thus execute RPC securely.
Converting QtDBus to use "d-tube" is one of the steps in getting rid of the
lidbus-1 dependency altogether. See the QtCS link above.
Once we get QtDBus independent of libdbus-1, it should be possible to simply
provide an opened, bidirectional QIODevice* to a QDBusConnection and would do
the communication for you.
> 4) QtDBus
> makes it easy to incorporate an existing D-Bus implementation (often not in
> Qt) and incorporate it into Qt. However, QtDBus requires a fair amount of
> refactoring if all programs are Qt programs, to marshal to/from D-Bus types
> and connect the event handler.
That is true and there's little we can do about it, until at least C++ comes
up with a generic reflection mechanism (which will most likely not happen until
2020) or we provide one ourselves.
However, is the creation of the operator<< and operator>> really that difficult?
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Development
mailing list