Intuitive packaging is vital to Gentoo

A post I made on the Gentoo development list last night deserves your attention because it illustrates a key aspect of Gentoo. I want to make sure it’s preserved instead of lost in mailing-list archives. This is in reply to a proposal to move a significant portion into a series of variables instead of being written as scripted functions:

I think the idea of ebuilds as scripts showing directly how to build software is a core part of the Gentoo build-system philosophy. This proposal pushes ebuilds toward a formatted file that is not a script. Instead, it is more like an Ant XML file that more abstractly describes a build. I think this is the wrong direction for ebuilds because they should directly resemble how software is built by hand.

One of the key reasons people use Gentoo is that ebuilds are so easy to “get” for anyone who has ever built software by hand. I will continue to vehemently defend anything that I think retains this key advantage of Gentoo over other distributions.

Gentoo is a distribution for advanced Linux users, or those who want to become advanced. Having packaging scripts that are easy to learn lowers the barrier to entry to editing them, which vastly increases our number of potential developers. It additionally comprises a key part of Gentoo’s ease of customization by allowing people to easily write their own packages or modify existing ones for their purposes. When users do this, it creates a natural pathway from building software by hand to editing ebuilds to becoming a Gentoo developer. The more difficult it is to learn how to write packaging scripts, the more of your potential developer base you repel.

You can help get Gentoo into the Summer of Code

This year, let’s try something different! I posted a rough draft of our organization application on the Gentoo wiki, in hopes that we can all work together to improve it over the next week. Applications are due starting March 9, and earlier is better. Here’s a list of questions that you can help answer:

Go to the wiki, and help Gentoo’s application rock!

Xorg-server 1.6 preview in Gentoo’s x11 overlay

To compete with Remi’s post about getting xorg-server 1.5.3 stable in Gentoo, here’s one about getting xorg-server 1.6, which was released today, into testing in the main tree. We’ve been maintaining the 1.6 release candidates in the x11 overlay for a while now. Tonight I added the final release to the overlay. (Update for Google users) What’s new in 1.6, you ask?

What’s left before it can move to the main tree? Here’s what I can think of, offhand:

  • The new XRandR stuff needs to get released upstream (randrproto, libXrandr, xrandr). Right now we’ve got the xrandr userland tool depending on live git of libXrandr, which won’t work for the main tree. (Update: randrproto and libXrandr 1.3 are out, just waiting on the userland tool xrandr)
  • We need to sort out the issue with XCB’s Xlib library renaming forcing recompiles of practically everything. This is becoming more and more of a blocker because now libXext 7.0.5 requires a new libX11. I think giving ourselves a hard blocker on 1.6 from this will help us get it fixed. See bug #248743 to track progress on this. (Update: solution in x11 overlay for testing)
  • The server now has a fix to keep looking for HAL if it’s not running when started. Should we change /etc/init.d/xdm to compensate for this change by no longer depending on hald, thus allowing gdm/kdm/etc to start earlier? This will give us one of the steps taken by the fastboot work seen lately in Moblin and elsewhere.
  • I think Remi’s going to add xf86-video-intel 2.6.2. (Update: done)
  • Our xinit is crazy stale, mainly because we patch it like crazy and I don’t like porting those. I’d like to get it updated to a current release for 1.6. In the longer term, we need to merge distro-neutral parts of our work upstream, but that’s not a 1.6 blocker.

To sum up, you can try xorg-server 1.6 now by adding the x11 overlay with layman, or you can wait for the above issues to get solved, and it will show up soon in testing in your main tree.

Planning for Gentoo in the 2009 Summer of Code

Our application is due for the Summer of Code in less than a month (see FAQ). The applications will include a few parts that I think are key and that are likely to change from last year’s application:

  • Project ideas
  • Previous involvement: successes, challenges
  • Application template specific to Gentoo
  • What we will do to ensure students stick around after the summer

We definitely need a nice big set of project ideas. The rest of them will probably be shorter answers. How do you think we should answer these questions?

You improve your code. What about yourself?

I laid out part of a framework for improving Gentoo in my last post. As many of you kindly noted, I explained what I wanted to do but did a poor job of convincing you why it needs to happen. That’s what I’m going to begin doing in this post.

As this post’s title says, when you develop code, you generally want it to be the best code possible. You also want to improve it over time if it’s not yet up to the highest standards. This holds doubly true when you’re doing this for free in an open-source project. First, there’s no time pressure to pound out minimally working code, so you can take the time to make it beautiful. Second, everyone else can look at your work, so you can’t hide ugly code in a dusty corner somewhere as you might be able to in proprietary software.

These same concepts hold true for you, not just your code. When you’re contributing to an open-source project, everyone sees what you do and how you do it. Strive to make yourself beautiful in the context of open-source development. What’s that mean? Always challenge yourself, grow as a person, and learn new skills. Just as beautiful code perfectly suits its purpose, beautiful developers perfectly suit their purpose. Their skills and actions exemplify how open-source developers should act.

If you’re optimizing code, you know that you can’t optimize what you can’t measure. That’s why profilers and other methods of instrumentation exist. This concept has a parallel in your personal development. Your instrumentation is goals, and what you’re measuring is your performance against your own goals. The purpose of this, as with code, is to optimize performance for your relevant metrics. How do you know whether you’ve improved unless you’re profiling yourself? What you’re left with if you don’t set goals and track progress against them is that frustrating comment people always say, “It just feels faster.”

Gentoo: New release, “new” leadership

I wrote an article discussing Gentoo’s new release and new council for this week’s LWN.net. If you’ve read my earlier blog posts and other posts on Planet Gentoo regarding 2008.0, there won’t be a whole lot of new information. It’s designed as analysis of recent Gentoo events for people who don’t already follow Gentoo development.

If you aren’t already subscribed to LWN.net, get on it. It’s my #1 source for Linux- and open-source-related news, and it saves me huge amounts of time that I would otherwise spend in cesspools like Slashdot. =)

P.S. Anyone going to OSCON, let me know via a comment here or my contact info.

X.Org 7.4 prereleases ready to test in Gentoo

Last night, Dave Airlie released libdrm 2.3.1, which set the stage for all the pieces of the X.Org 7.4 prereleases to actually work (with a couple mesa patches). If you’d like to test 7.4, here’s how. This assumes you’re already running an ~arch (testing) system–if you aren’t, you might want to hold off on testing hard-masked packages. This may not work with binary drivers–particularly ati-drivers. It looks like nvidia-drivers has preliminary support for xorg-server 1.5.

echo "
# xorg-server-1.5 prerelease
=x11-base/xorg-server-1.4.99*
=media-libs/mesa-7.1*
x11-proto/dri2proto
=x11-libs/libdrm-2.3.1*
" >> /etc/portage/package.unmask
emerge -va xorg-server
emerge -va1 $(qlist -I x11-drivers)

I’ve still got 16 more packages to bump before everything’s up to date, but the main parts are in place.

Code as artwork

Many people think of code as artwork in some way or another and consider good code something of elegance and beauty. While working today, I came across another example of that in a visual representation of a project I’m working on.

This image shows the call graph of the file I’m editing, which is one component of a much larger project. I made it with Python’s hotshot profiler and José Fonseca’s Gprof2dot. Brighter colors mean more time is spent in those functions or their children, although it’s hard to see at this size. Or does it show some sort of futuristic gun? Your call.

The above callgraph shows every single function, but here’s a profile generated with the same tools that shows only functions that use a certain percentage of time. You can actually see the colors:

Hot new GNOME apps in Gentoo

The inimitable Dave Neary just blogged about his favorite new GNOME apps, so I thought it’d be interesting to take a look at what it takes to get them running in Gentoo. To get a quick idea of the status, I searched our main tree and overlays using eix, then searched our Bugzilla using pybugz.

for i in gnome-do hamster tasque cheese vagalume pimlico transmission; do eix $i; bugz search $i; done

Here’s what I found (useless output removed):

* gnome-extra/gnome-do
Available versions: (~)0.4.2.0 {debug}
Homepage: http://do.davebsd.com/
Description: GNOME Do allows you to search for and perform actions on items in your desktop environment

* gnome-extra/gnome-do-plugins
Available versions: (~)0.4.0 {amarok debug evo}
Homepage: http://do.davebsd.com/
Description: Plugins to put the Do in Gnome Do

* gnome-extra/hamster-applet [1]
Available versions:  (~)0.6.1
Homepage:            http://projecthamster.wordpress.com/ http://code.google.com/p/projecthamster/
Description:         Time tracking for the masses, in a GNOME applet

[1] "sunrise" /usr/local/portage/layman/sunrise

[I] media-video/cheese
Available versions:  (~)2.22.0 (~)2.22.1 (~)2.22.2 {v4l}
Installed versions:  2.22.2(03:07:37 PM 06/18/2008)(v4l)
Homepage:            http://www.gnome.org/projects/cheese/
Description:         A cheesy program to take pictures and videos from your webcam

225775 maintainer-wanted    New ebuild: media-sound/vagalume-0.6 (Last.fm radi

* net-p2p/transmission
Available versions:  1.1.0 (~)1.11 (~)1.20 {gtk libnotify}
Homepage:            http://www.transmissionbt.com/
Description:         Simple BitTorrent client

Visiting the pimlico homepage, I found that it’s actually a suite of apps. Searching for their names revealed that we also have them. So far we’ve got gnome-do, hamster, cheese, vagalume, transmission and pimlico. Not too shabby. A quick Google search for the terms “tasque ebuild” found an ebuild for that, too! Apparently that overlay isn’t part of the eix cache, perhaps because it isn’t available through layman.

It’s worth noting that out of the 7 apps, 3 exist outside the main tree but are still trivial to find. I don’t have the time or interest in trying some of them myself. If you do try ’em, let folks know how it goes in the comments!