Archive for August, 2011

PackageKit backend for Software Center: pencils down report

Software Center in openSUSE

Software Center with PackageKit backend in openSUSE Factory

Today the official coding period of GSoC 2011 ends. It’s been a four months journey, with challenges, failures and achievements, but nevertheless fun :-) .

You may be wondering what is the status of my project; here it goes: current version of Software Center can be tested in openSUSE Factory; it can populate its database with data from an AppStream XML; it shows application information (fetched from the package manager); it installs and removes software, in the same friendly manner the ubuntu does (showing progress, handling dependencies).

Moreover, my patches to gobject-introspection, PackageKit and obviously software-center, are all upstream and released; kudos to the project managers and the community for helping me get them there.

There are still parts that need work; some of then have been intentionally left with lower priority from my initial plan, in order to get a functional version up by the end of the program; others weren’t covered by the planed feature set. These are: performance (current version is rather slow on first load, and also on showing list, due to many resolve calls), transaction history (it can be implemented using the almighty PackageKit), reviews (currently these are fetched from ubuntu servers), screenshots (same as reviews). Software Center itself passes a period of active development and changes, once its fancy Gtk+3 interface stabilizes, more work can be done into polishing the <other-distro> experience.

Although I’m generally happy with the result of the project, since this is a report, I want to outline what differed from my expectations and slowed me down from bringing a full feature set cross-distro Software Center:

  • fast development – when I started hacking on software-center’s GUI, it was pygtk Gtk+2 based; a Gtk+3 branch existed, but was far from being usable; under the last few weeks, it was merged, and actively developed into a newly designed interface (which will become software-center 5.0);
  • Gio, GLib, GMenu, GObject, usually libs starting with a capital G, which introspection bindings are about to stabilize; having to get them from trunk, and dealing with API breakage;
  • waiting for the pygobject release; when it came, it broke my pygtk mixed work (since static vs GI are no longer permitted in the same program – which is the right choice. btw), and left me with no working GUI; luckily, I took the best advices on IRC, and also software-center devs fixed things along, so that the new UI isn’t affected by the underlying changes.

Something worth mentioning in this finale post is that OBS totally rocks.

Overall, I hope this effort won’t stop here, and with a bit of luck, it will be shipped by your favorite distribution :D

PS: for more implementation/testing/plan details, I have created this page on openSUSE wiki, please check it out.

PackageKit backend for Software Center: week 11 status report

This week in three short achievements:

- personal OBS project (playing around, tutored by DimStar), work in progress

- code tide-up, ready for merging into master

- features, usage and testing documentation, work in progress

I’m now focusing on the gtk3 part, and also documenting things around. Packaging has decreased priority, waiting for the pygobject release.

And done ;-)

PackageKit backend for Software Center: week 10 overview report

This week I’ve been trying to make things work correctly under openSUSE, and also provide an easy way of testing. I couldn’t achieve it, but I’m optimistic about doing it in the current week.

What’s been keeping me busy:

- getting a generic channels list in non-Debian based distributions; how things work: when the update-software-center script is called, a xapian database is populated with application data from various sources (software sources lists, AppStream XMLs, etc); each document entry has an origin property; based on this unique origins a list of software channels is generated dynamically (such as Provided by vendor, For purchase, From given PPA); I couldn’t find (yet) a friendly way of getting a package’s origin in PackageKit so I’m currently mocking it; what now works is listing all the applications from Appstream under an unknown channel;

- compiling a list of dependencies and a recipe for building my PK branch under openSUSE;

- fixing the script that populates the software-center database, making it work with PK too;

What I’m currently working on:

- building pygobject, glib, gobject-introspection and PK from master branches in openSUSE; next step is packaging;

- sanely hiding unused features, such as For purchase (Canonical specific), What’s new or Recommendations

- fixing the newer soon-to-be-pushed-as-default gtk3 interface, so that all the functionality of the backend is there; (fixing my code and assuring there are no unnecessary apt imports)

- getting the PK branch merged into s-c main

- testing and improving (I’m particulary unhappy with some implementation details, such as the fake caching I’m doing inside the PackageInformation class, or the mix of asynchronous calls with synchronous)

What I had on my calendar, and probably won’t happen before the end of GSoC is the personall AppStream mirror and the icon fetching work.

That’s it.

PS: today, somebody asked on #PackageKit when will this be ready, planning to push it to the next Debian. This sounds awesome :-) .