hi all, I just wanted to explain why so many of you are getting segmentation faults when you try to run the nautilus 3 client.
The pygtk world used to be quite simple and nice, with good documentation and well known best practices. These were “static” gtk bindings that someone had to set up by hand (including me for nautilus-python). These bindings were a pain in the butt to maintain over time but they worked pretty well and were predictable (good for coding against them). However, a couple years ago the pygtk maintainers decided to abandon these bindings and start from scratch with “dynamic” bindings that would execute the original C code of the gtk library, which would have the effect of dramatically reducing the amount of hand-written binding code the pygtk developers would have to maintain. These new dynamic bindings have been released for a while but are still pretty new to the world, but for the most part they work pretty well. As you might be able to tell, the original Nautilus extension used the static pygtk bindings to run, and the new Nautilus 3 extension uses the new dynamic bindings to run.
Running Nautilus 2 with the static bindings works great, and running Nautilus 3 with the dynamic bindings works great as well, but problems start to occur when you try to run Nautilus (2 or 3) with both the static and dynamic bindings at the same time (this is possible). Unfortunately this is what is happening for many of you right now. Some extensions are written with the expectation that they can run with a mix of static and dynamic bindings, and if Nautilus 3 loads extensions that try to use the static and dynamic versions of a set of bindings at the same time, it will crash.
I’m not entirely sure what the solution to this is, though it will become less of a problem over time, as people switch completely over to the dynamic bindings. However, for now, things will be a bit messy and you will have to decide which extensions you want to run. Right now, the Nautilus 3 RabbitVCS extension uses dynamic bindings. If you see the following error:
** (nautilus:2259): DEBUG: Syncdaemon not running, waiting for it to start in NameOwnerChanged
/usr/lib/python2.7/dist-packages/gobject/constants.py:24: Warning: g_boxed_type_register_static: assertion `g_type_from_name (name) == 0′ failed
import gobject._gobject
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: specified class size for type `PyGtkGenericCellRenderer’ is smaller than the parent type’s `GtkCellRenderer’ class size
from gtk import _gtk
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_type_get_qdata: assertion `node != NULL’ failed
from gtk import _gtk
Segmentation fault
Then it means you have another extension running that is trying to use the static bindings. If you see this error (check in ~/.config/rabbitvcs/RabbitVCS.log) and your Nautilus isn’t able to run, first disable all nautilus-python extensions, then try to run RabbitVCS again. Then one-by-one, enable your other extensions until Nautilus crashes again. You should then report the issue either to myself or to the maintainer of said extension.
Hopefully this will resolve itself within a year or so, but until then it will be a somewhat bumpy ride.
Adam