my blog

Thursday 23 September 2010

My love for jhbuild

It's apparently cool to talk about jhbuild again, so let me tell you the truth: I'm a heavy user of jhbuild. And as such, I probably got used to various issues with this tool and don't see them anymore. However, I do feel it's a bit weird that people often blame it for being complex or not working well while, most of the time, it does work well and the issues are not in jhbuild itself, but in the way people try to use it, or in some bad things happening in repositories... So let me talk a bit more about this amazing tool!

Why still use jhbuild?

When I first built GNOME from scratch, using a development version of a distribution was a bit of a nightmare, and building GNOME from source was really so much easier. That's why I started using jhbuild. However, nowadays, most distributions have a relatively stable development version, where GNOME is updated really fast to the latest version: if you're a GNOME addict, you can easily get your fix this way.

Still, I keep using jhbuild. In a different way, though: I used to run a jhbuilt desktop, while I now mostly run jhbuilt applications for testing. The reason for this is that it makes my life easier when I fix bugs in various modules: I already have the code, I can tweak things and rebuild quickly something to see the result. No need to install weird packages: I did it once, a long time ago, for my jhbuild environment, and I forgot about it. I can also read the GNOME code whenever I want, even when I'm offline (you know, on the train or plane).

Another reason I still use jhbuild is release management. For each release of GNOME, the release team publishes modulesets that can be used to build this specific version of GNOME, and that we use to make sure that everything builds fine, and then to test the desktop. This is the smoketesting step. It turns out to be quite important, as we often find that we need a new tarball to fix the build (see for example my 2.31.92 nightmare — we can often blame maintainers there). It is more worrying when we also find critical bugs while running the jhbuilt desktop this way, but it doesn't happen that much anymore (phew!).

Also, jhbuild makes it easy to build the next version of GNOME: while most distributions are stuck in the 2.x world, you can try building 3.0 now. Try because, as Andre found out, there are some issues at the moment. But you can also just build the latest GNOME Shell this way!

jhbuild buildone is great, but you need the dependencies!

Diego recommends to use jhbuild buildone. That's all fine, and I use it quite a lot too. However, it's important to mention that just running jhbuild buildone without having installed anything else before will obviously fail. And I'm 100% convinced that many people tried this in the past, and gave up on jhbuild because of this.

You need dependencies to build a module. There's no way around this. And you can't blame jhbuild if you just use jhbuild buildone and it fails, really :-) That being said, you don't necessarily need to build the dependencies yourself.

Skipping the build of system libraries, or of GNOME libraries

Probably the most common complaint about jhbuild is that it tries to build many many things, including low-level bits of the system. Yes, this is a bit annoying, as it takes time and some of those low-level bits can fail to build. But if you complete this once, you can live happy with those built dependencies for many months, or even years in some cases, so it's worth the effort.

It turns out there's a faster way: you can skip these bits and install packages from your distribution. Here is what I skip because I'm rebuilding from scratch every few months, and I don't feel I need to build these modules that my distribution provides (this is from my ~/.jhbuildrc):

skip = [ ]
# skip from bootstrap
skip.extend ([ 'python', 'guile' ])
# skip some big external dependencies that can be annoying and that are
# installed system-wide anyway
skip.extend ([ 'mozilla', 'firefox', 'dbus', 'hal', 'avahi',
               'NetworkManager', 'PolicyKit', 'PolicyKit-gnome',
               'libgdiplus', 'mono', 'monodoc', 'nss', 'nspr',
               'sqlite3', 'pulseaudio', 'pysqlite2', 'mono-addins',
               'WebKit', 'polkit', 'DeviceKit', 'DeviceKit-disks',
               'DeviceKit-power', 'libxml2', 'libxslt', 'libgpg-error',
               'libgcrypt', 'expat', 'libtasn1', 'gnutls',
               'libvolume_id', 'libdaemon', 'udisks', 'UPower', 'upower'
])
# skip some gnome stuff that I can't test
skip.extend ([ 'evolution-exchange', 'evolution-mapi' ])

As you can see, I just append modules to the list and I don't remove old stuff (hi DeviceKit!).

Some distributions even provide a package that installs most dependencies automatically: in openSUSE, this is the jhbuild-recommended-deps package. With this, using jhbuild becomes even more painless!

But wait, there's more. If it happens that you need a specific library for a module that didn't get installed, or that you did the jhbuild buildone trick to only build a specific module and miss a lot of dependencies, you'll get an error like this:

checking for WNCKLET... no
configure: error: Package requirements (gtk+-2.0 >= 2.19.7 libwnck-1.0 >= 2.30.5) were not met:

No package 'libwnck-1.0' found

Or if you have a pkg-config file for libwnck, but it's too old:

Requested 'libwnck-1.0 >= 2.30.5' but version of libwnck is 2.30.4

At least in openSUSE (and I guess it's true for most RPM-based distributions, not sure about Debian-based ones and others), you can easily install what's missing: sudo zypper in "pkgconfig(libwnck-1.0) >= 2.30.5". Sure, it sometimes happens that the failure is because of a check that is not pkg-config-based, so that won't always work. But with pkg-config slowly progressing towards world domination, this is less and less the case.

Sidenote: if you find a library that is still not using pkg-config, please file a bug and ask its maintainers to add a pkg-config file. Thanks!

GNOME is required to work (which implies... to build) from git

Last but not least: it occurs that people give up on jhbuild because something really just doesn't build from GNOME. A first possibility is that it's using some flags when building from git, that makes the build a bit stricter. A common pattern here is that *_DISABLE_DEPRECATED flags are set, and with all the deprecations work going on in libraries, it sometimes makes life harder. You can try passing --disable-maintainer-mode to configure to help with this. It turns out you can do this automatically in ~/.jhbuildrc:

autogenargs='--disable-maintainer-mode'

(Or just append --disable-maintainer-mode to what you already have.)

But it can also happen that it's just a real build failure, because the module doesn't build with the latest, say, gobject-introspection (remember the 2.31.92 nightmare). In this case, there is nothing jhbuild can do: that's a bug in the module. We're doing our best to avoid such situations, but they do occur. That's what Andre faced a few days ago when he tried to build the 3.0 moduleset. And this is where you can become an active contributor to the project: file a bug! And if you're able to, why not also create a patch? :-)

Interestingly, for a long time, we didn't have such build issues anymore: everyone was using jhbuild back then. But with the stability of development versions of distributions, this is less the case now. We're working on fixing this, and a big part of the solution is the build bots, but we need more of them and we also need people to monitor them to make sure they do not fail because of other weird issues.

jhbuild is well-maintained

Last but not least, I think it's worth mentioning that jhbuild is well-maintained: Frédéric is doing a great job there, and is extremely reactive. This means that even if you hit a real issue in jhbuild, it will likely get fixed fast :-)

I wanted to share my love for jhbuild; now you know about it :-) I really can't imagine working on GNOME without jhbuild: this tool makes my life easier. Daily.

Monday 16 August 2010

Want to join Novell?

I've been at Novell for two years and a half now, and it's been an interesting ride. I must say I've had two amazing bosses who understand the way I work and who have been really supportive, so that definitely helps! I don't know if Klaas will stand me much longer, though ;-) In addition to that, being part of the Boosters is a good way to be with people as crazy as I am, working on weird stuff like me.

Of course, it has been hard to see good people leave the company in the past few months — they are generally still involved upstream, though, so that's positive :-) But recently, we've been joined by two friends: Frédéric, who's working on SUSE Meego, and Jos, the new openSUSE community manager. And guess what? We expect more! Because we're still hiring:

  • the very same team I'm part of (remember, the crazy people) is looking for a new member. The job description is, well, you know, a job description ;-) What is most important, in my opinion, is that we're looking for someone who understands free software communities: the goal of the team is to grow the openSUSE community by enabling the community, and we're having fun with that! You can have the right profile even if you don't know the openSUSE community well at the moment: for example, it's totally fine to come from upstream (some of us do have an upstream-only background). I heard that some people even wonder if it's normal to get paid for such a job. But yes, you will get paid. To apply, go here and use the openSUSE booster keywords.
  • our SLED team is looking for a GNOME developer to help with the maintenance and the development of SLED, and I certainly hope that this developer will also work with the GNOME team in openSUSE :-) If you enjoy fixing bugs and adding some nice features that make a difference to users, this could be a good position for you! To apply, go here and use the SLED GNOME keywords.

If you want to chat about any of those jobs or about how it feels to work at Novell, don't hesitate to ping me!

Saturday 14 August 2010

More GUADEC tidbits

GUADEC Open Space

GUADEC Open Space by Sense Hofstede (Creative Commons by-sa)

See my previous post for the first GUADEC tidbits.

  • Of course, Fernando and Xan's talk was a great moment!
  • Apparently, I was not for sale (I didn't know, or well, I knew it). And the result is that someone I won't name (let's call this someone Kat) tried to buy me. Without success.
  • Sílvia and Gil won the GNOME Pants this year! Woo! It's a bit sad that they chose to wear it only during the Collabora party: they pretended they were not the right size...
  • I had quit an interesting chat with Luis during the Collabora party. I liked his keynote.
  • Gustavo and I are invincible at table football when in the same team. Mwahahaha!
  • Some people didn't know how to easily get GNOME Shell running from GDM. I hope that by now, most distributions do something like openSUSE, where you can select a GNOME 3 Preview session in GDM.
  • Ryan made some I support the release team stickers. Sweet. He also made some that used a cryptic vuntz 3.0 message...
  • Jos, the new openSUSE community manager, happens to live just a few kilometers away from the Hague. He was still at his previous work back then, but we were able to share a dinner before the Canonical party.
  • I got a very nice Openismus t-shirt (thanks Kat!). I was told there's a fox on it. I see a cat.
  • It was great to have more time with Dominique, one famous openSUSE hero.
  • Bastien and I tried to send a poster to a generous Friends of GNOME donor. During 45 minutes, we walked around, asked people, looked on maps, etc. to find a post office. And when we found one, it didn't have what we needed to send the poster. Oops!
  • Didier helped me find a real post office on Saturday. And there we were able to send the Friends of GNOME poster.
  • I was finally able to chat with Adam from Yorba. I've been wanting to meet the great people at Yorba for a long time!
  • Some people are talking about a French Conspiracy. I don't know why. Anyway, after Reinout's closing speech, Bastien and I went on with the closing ceremony together.
  • The Foundation released three press release this week. Many thanks to Zonker for his help for this!
  • The next GUADEC will be in Berlin, with Akademy! I'm already excited!

Friday 13 August 2010

My late GUADEC post

I came back from the Hague after GUADEC nearly two weeks ago, and I still haven't posted anything about it. Bad me. The short summary: it was a really great event! I don't know exactly why, but I'm thinking it's the GUADEC I enjoyed the most. Many thanks to all the organization team who did a fantastic job! Also a big thank you to the sponsors who made this event possible!

GUADEC Group Photo

GUADEC Group Photo by Nicolas Christener (Creative Commons by)
See the whole set or download the full sized pictures.

The first few days of the events were quite busy between a good board meeting on Sunday (woo, and the last one for me!), a Monday where Frédéric and I chatted with various teams about the current status of GNOME and an advisory board meeting with useful feedback on Tuesday. Busy but good busy. And after that, the event simply went well. I don't think I attended many presentations since I used most of my time to chat with people — that's what is most useful for me at events.

Some tidbits about the event (I have more coming in a later post):

  • The first thing I did when I got at the hotel: I slept for a few hours. Jetlag. When traveling from France to the Netherlands.
  • Apparently, Diego and Germán slept together, and took a shower together. I'm happy for them!
  • Quote from the very first evening: This is not javascript, this is real code. -- Diego, who works on a web browser.
  • Somehow, I couldn't stop saying we when talking about the board. I guess that's what happens after four years and a half.
  • Daniel (or David? ;-)) has a twin, Adrien, and it turns out they were sharing the same room.
  • We had a release team meeting during the event. On IRC. (only two release team people were in the Hague on Monday).
  • I was surprised to see the GNOME roadmap we've started working on in Jon's slides. But good surprise :-)
  • People loved the openSUSE Geekos we gave away! We need more of that!

GNOME Policy on Copyright Assignment

I guess a few people remember that Clutter was proposed for inclusion one year ago. Most of the GNOME community loves it, so there was no real question about accepting it. Except that it required copyright assignment, and the release team didn't really know how to handle this. So we contacted the Foundation Board to see what should be done. And the Board did two things: talk to Intel about it, and work on a more general solution.

First, we talked to Intel to understand if the copyright assignment for Clutter was really needed, or if it could be removed in the future. As this is a discussion involving some legal magic, it obviously took some time. But Emmanuele kept pushing this internally to get a resolution, and in June, it was announced that everybody could contribute to Clutter without signing anything :-) Thanks Intel! It's my guess that this happened not just thanks to GNOME, but I don't have any details on that...

Still, we wanted to have some general guidelines to know how to proceed in case this happens again in the future. The Board discussed this topic with the Advisory Board in December, and after the discussion, we felt that Bradley and Michael had a position that reflected best what would be the position of the community. So we asked them to work on the topic. They wrote some blog entries about the topic, and drafted a first document providing a policy for copyright assignments in GNOME. This got discussed again with the Advisory Board, and finetuned. The whole process took quite some time — and Bradley talked about it during a lightning talk at GUADEC.

As a result, we got two documents that were published in July on the wiki, but I actually only really announced them now. You can read the policy and the additional document, but here's the short version for the lazy ones (quoting my mail):

The inclusion of a new module in GNOME that requires copyright assignment has to be explicitly approved on a case-by-case basis by both the Release Team and the GNOME Foundation Board. The decision will be made based on criteria explained in the policy as well as in this additional document.

It was a great experience to work with Bradley and Michael on this, especially as I was doing nothing and they did all the hard work :-) So I'm glad this is finally out, and even though I personally hope we won't have to look at copyright assignments in the future, at least, now, we will know what to do if the original issue occurs again.

- page 9 of 119 -

by Vincent