You wrote:
> * From: David Zeuthen <david fubar dk>
> * To: gtk-devel-list gnome org
> * Subject: EggDBus
> * Date: Sun, 21 Dec 2008 21:48:25 -0500
>
> Hey,
>
> For the past 5 weeks or so, I've been working on a new (as compared to
> dbus-glib) D-Bus binding for GObject. The work on this has finally
> reached a stage where the code sufficiently complete and documented so I
> thought I'd send some mail describing it. The code is here

> http://cgit.freedesktop.org/~david/eggdbus

Nine months later, some packages already started to use libeggdbus.

For example, PolicyKit. I got curious (or maybe "appalled") by the number
of libraries this "simple password prompter lib" pulls in,
so I looked at it.

Aside form much other stuff which is not relevant to this email,
it pulls in libeggdbus directly, and libdbus-glib indirectly:

# ldd /usr/lib64/libpolkit-gobject-1.so.0
...
        libeggdbus-1.so.0 => /usr/lib64/libeggdbus-1.so.0 (0x00007fbf5c314000)
...
        libdbus-glib-1.so.2 => /usr/lib64/libdbus-glib-1.so.2 
(0x00007fbf5b3a1000)
...

which made me wonder, how come a replacement for libdbus-glib
and libdbus-glib itself live in the same program. Ain't that
code duplication? Let's see why...

readelf -a says that libdbus-glib-1 is not directly used
by libpolkit-gobject:

Dynamic section at offset 0x1fb50 contains 26 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libeggdbus-1.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgio-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgobject-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgmodule-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000e (SONAME)             Library soname:
[libpolkit-gobject-1.so.0]

It is apparently pulled in by libeggdbus:

# ldd /usr/lib64/libeggdbus-1.so.0
        linux-vdso.so.1 =>  (0x00007fffe85ff000)
        libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007fa5b6355000)
        libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007fa5b6152000)
        libdbus-glib-1.so.2 => /usr/lib64/libdbus-glib-1.so.2 
(0x00007fa5b5f30000)
        libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007fa5b5cf2000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa5b5ad6000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fa5b58cd000)
        libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007fa5b5686000)
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007fa5b53a0000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fa5b5031000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fa5b4e2d000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fa5b4c14000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa5b49f5000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007fa5b47f1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa5b6871000)
        libattr.so.1 => /lib64/libattr.so.1 (0x00007fa5b45ec000)

readelf -a:

Dynamic section at offset 0x46768 contains 29 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libgio-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgmodule-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libdbus-glib-1.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libdbus-1.so.3]
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libgobject-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000e (SONAME)             Library soname: [libeggdbus-1.so.0]


So, your "new D-Bus binding for GObject" is making programs
use both at once anyway. Also, it is more than twice as big
as libdbus-glib just by itself:

# size /usr/lib64/libeggdbus-1.so.0
   text    data     bss     dec     hex filename
 281912   10776     504  293192   47948 /usr/lib64/libeggdbus-1.so.0

# size /usr/lib64/libdbus-glib-1.so.2
   text    data     bss     dec     hex filename
 128367    4612     328  133307   208bb /usr/lib64/libdbus-glib-1.so.2


I do not know, maybe it presents some significantly nicer C interface
for the programmer, but on code size front it does not look good.

Sorry for intruding into your time and basically saying
that you write bloated code, but I wanted to make you aware
of this aspect too.

Feel free to ignore this email if you don't care.
--
vda
_______________________________________________
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list

Reply via email to