Comment 0 for bug 828751

Revision history for this message
Martin Pitt (pitti) wrote :

There have been some recent developments and changes for pygobject recently, which would be good to get into Oneiric IMHO.

= Background =
pygobject currently provides two things:

  * static Python bindings for a few basic GNOME libraries, such as glib, gobject
  * dynamic gobject-introspection binding generator [https://live.gnome.org/PyGObject/IntrospectionPorting]

= Status Quo =
So far we have pygobject 2.28 in oneiric, which was the version shipped with GNOME 3.0. It ships both the static bindings (which are being deprecated, and there is e. g. no pygtk for GTK3), as well as a reasonably stable GI binding. During Natty and Oneiric we have ported many of our Ubuntu specific apps, as well as some GNOME ones from pygtk2 (static binding) to PyGI (i. e. using the GI bindings).

= 3.0 =

Recently there has been a 2.90.1 release for pygobject:
http://www.j5live.com/2011/08/14/announce-pygobject-2-90-1-released-3-0-pre-release/

The main changes are:

 * static bindings are dropped completely
 * parallel installability with the 2.28 version
 * Much more robust GI bindings (e. g. the rewritten invoke catches a lot of errors as proper exceptions which previously went unnoticed and potentially caused hard-to-debug segfaults later on)
 * This is now absolutely zero tolerant against importing both the static and the GI version of a particular library. This was mostly the case with 2.28 as well, but did work in some cases (like "import gobject; from gi.repository import Gtk", in particular for "glib" and "gobject"). These now cause errors as well.

It seems the current plan is that GNOME 3.2 will require pygobject 3.0, and recently the jhbuild module set was switched over accordingly:

  http://git.gnome.org/browse/jhbuild/commit/?id=8878eecb377f

= Proposal =

 * Package the old pygobject-2 separately, and disable GI support there. This is just about zero risk, and means that all applications which use pygtk and the old static bindings (such as software-center, and a lot of other older software) continue running.

 * Update pygobject to 2.90.1. (see below for impact)

The main difficulty is to make the package install cleanly in parallel. This work has already been done by Martin Pitt in the Debian svn, and uploaded to experimental (pygobject-2 currently in NEW queue).

= Impact =

The update will cause a lot of GI based python applications to stop working, as it is a very common error to mix static and GI bindings. I already went through most of our GI applications yesterday and prepared them for the switch, in case to be ready if/when we do it.

  https://launchpad.net/ubuntu/+source/software-properties/0.81.8
  https://launchpad.net/ubuntu/+source/aptdaemon/0.43+bzr669-0ubuntu1
  https://code.launchpad.net/~pitti/software-center/gi-fixes/+merge/71854
  https://launchpad.net/ubuntu/+source/usb-creator/0.2.31.2
  (and some more, basically everything I could find except for ubiquity, which I didn't check yet)

While I tested our apps with the new pygobject lightly, I cannot guarantee that they all work without any regression. I am happy to work on fallout if it happens, though.

On the pro side, we'll get the better performance and stability of the rewritten invoker, and also a better platform where new code should be written on, to avoid the bugs introduced by the overly tolerant 2.28 version.

Packages are available for testing in https://launchpad.net/~ubuntu-desktop/+archive/ppa/+packages.