Now that things have settled down a bit from the 1.1.0 release, I’ve decided to move the Muon Suite and QApt project’s to KDE’s Git infrastructure. I’d like to thank all the sysadmins that helped with the move. (Namely toma, Sho_, and PovAddict)

… and if you’d like to help advertise Muon even more you can always enable the gathering of the “Popcon” statistics, which gathers info on how many people have a package installed. (This is also coincidentally what determines how many stars apps in the Muon Software Center get)

Oh, and in this screenshot you can also see a feature I’ve added to Git master. Installed apps are given a check mark emblem to help identify them when not in the “Installed Software” view.

After six months of development, I’m proud to announce the release of the Muon Suite, version 1.1.0. The main focus of this release has been to add additional package management utilities to help further round out the package management experience. More specifically, Muon Suite 1.1.0 introduces the Muon Update Notifier, Update Manager, and Software Center.

Packages are available from the QApt PPA for Kubuntu 10.10, and from the official archives in the prerelease version of Kubuntu 11.04. Packages of interest are the “muon” and “muon-installer” packages. Source tarballs for QApt and Muon 1.1.0 can be found here and here, respectively.

Unfortunately, packages cannot be made for Kubuntu 10.04 since the version of APT it has is too old, and a newer version cannot be backported without complications. I did notice that the Kubuntu 10.04 PPA was out of date, (QApt/Muon 1.0.2) so I updated the packages there to QApt 1.0.4 and Muon 1.0.3, the latest releases. 🙂

In addition, I’d like to thank two new contributors for their, uhm, contributions. 🙂 Guillaume Martres is responsible for both the revamped download view and network awareness features, and Felix Geyer has contributed various patches to the project. I would also like to thank the KDE l10n team for their amazing work on translations. In this release, Muon Suite is 100% translated in 16 languages, and it is over 70% translated in 4 other languages. There are seven new fully-translated languages since 1.0.0, which is great!

What’s New

Muon Package Manager

Not to be outdone, the classic Muon Package Manager has received some spiffy improvements in 1.1.0. These include:

Several new status filters, such as the “Residual Configuration” filter for viewing uninstalled packages that can be purged, and the “Installed (auto-removable)” filter for viewing packages that APT thinks are obsolete/unnecessary that can be removed without harm.

A menu item has been added to mark all auto-removable packages for removal.

Packages marked for auto-removal

A progress bar to show the progress of search index rebuilds has been added.

Searches are automatically reloaded after a rebuild of the search index.

The origin of a package has been added to the “Technical Details” tab.

The contents of the “Installed Files” tab are now sorted alphabetically.

You can now sort the package view by the “Status” and “Requested Status” columns.

Canonical-supported packages now have a Kubuntu or Ubuntu emblem on their entry in the package view. (Depending on if you’re running Kubuntu or Ubuntu). (Visible in the above screenshot)

An all-new download view, offering more detailed information on the items being downloaded.

New download view

A configuration dialog for controlling various APT system options has been added.

Introducing the Muon Software Center

The Muon Software Center is a new utility that provides an easy way to get new applications. With a focus on applications, the user does not have to worry about “package management” at all, and its simple interface means that anyone can use it. Primary features include:

Categorical browsing

Informative details about each application

Easily install addons, if available

Browse PPAs

Showing a single PPA

Fast, easy search. (No knowledge of package names required)

Easily launch newly-installed applications

The history view gives a searchable, filterable overview of what you’ve installed, removed or upgraded over the past few months.

The History View

The queuing system allows you to browse packages while larger ones are installing

Introducing the Muon Update Notifier

Not too much to say here. The Muon Update Notifier just notifies you of updates. 🙂

These notifications are configurable from either the Muon Package Manager or the Muon Update Manager.

Muon Notifier settings

Introducing the Muon Update Manager

The Muon Update Manager is a GUI for updating your system. Updates are automatically marked, and can be installed via the toolbar button in the lefthand corner. The details tabs work much like they do in the Muon Package Manager, and the download/commit views are the same as in the Muon Package Manager, too.

The Future

For Muon Suite 1.2 I’d like to further refine all of the applications in the suite. I’d like to add more power-user features to the Muon Package Manager such as package pinning support, as well as support for configuring more APT system settings. I would like to investigate adding optional commercial software support (Ubuntu’s “App Store”) to the Muon Software Center. (Though I’ve not yet been able to figure out the magic behind that from the Ubuntu Software Center sources) The Muon Update Manager definitely needs to become more update-centric. As of now it’s just a stripped-down version of the Muon Package Manager. Hopefully for 1.2 it will become less package-manager and more update-manager.

Geeky Stuff

If you’re a developer developing a package management frontend using QApt, then QApt 1.1 will have some very nice new features. Here’s an overview of what’s new on the QApt front:

General

LibQApt now compiles with QT_NO_CAST_TO_ASCII and QT_NO_CAST_FROM_ASCII.

Compile with -fvisibility=hidden by default so that libqapt doesn’t expose symbols from libraries it links against, making life easier for packagers everywhere.

QApt::Config

The new Config class is an interface to APT’s system-wide configuration. It features a KConfig-style read/write API, and uses proper Polkit privileges for the writing of system settings. The QApt::Backend class contains a QApt::Config object by default, accessible by the Backend::config() function.

QApt::History

The QApt::History class is an interface to the APT history log files. A QList of HistoryItem objects is accessible through the historyItems() function. The HistoryItem class represents a single transaction recorded in the APT history logs. From a HistoryItem you can obtain the start date of the transaction, lists of installed/removed/upgraded/downgrades/purged packages, as well as an error string, if the transaction ended in an error.

QApt::Package

QApt::Package has gained some new features in QApt 1.1 as well.

The new recommendsList(), suggestsList(), enhancesList() and enhancedByList() functions return QStringLists of the names of packages that have the aforementioned relational statuses with the Package.

The latin1Name() and latin1Section() functions offer more efficient ways for internally dealing with package names and package sections. They return QLatin1Strings, which are cheaper to construct and compare than QStrings. This makes them ideal for sorting by package name, or for searching for a package by name.

The controlField() function allows you to get the value of an arbitrary field of the package’s debian/control file. This function is useful for obtaining the values of nonstandard fields, such as the “Supported” field that Ubuntu packages supported by Canonical have, or the custom GStreamer metadata fields that gstreamer plugin packages have.

Added a new setUndoRedoCacheSize() function to QApt::Backend. This allows applications to customize the undo/redo stack size, allowing them to increase it if RAM usage is less of an issue, or decrease/eliminate the cache if RAM is tight, or the feature is otherwise unused anyways.

Added a saveInstalledPackagesList() function to QApt::Backend that exports a list of all installed packages to the given path. This list can be ready by Backend::readSelections() and is fully compatible with the Synaptic Package Manager.

Added an areChangesMarked() function to provide an easier/more efficient way to check if there are pending changes without checking the emptiness of the QApt::PackageList that Backend::markedPackages() constructs and returns.

Changelogs

For those it may interest, here are the detailed, technical changelogs for what has changed between the release candidate and final release for QApt and Muon.

Muon Suite 1.1.0

Features

Automatically reload searches after a rebuild of the search index is triggered

Bugfixes

Only show PPAs/package origins that have applications in the sidebar of the Muon Software Center

Fixed a bug that popped up in the 1.1 prerelease cycle that would disallow quitting an app after a user cancelled a download.

Fixed a crash when an error triggered a reload behind the Muon Software Center’s back (Bug 262712)

QApt 1.1.0

Features

Added a QString-taking overload of the Package::controlField() function

Use a pkgTagSection object from libapt-pkg to parse the control field instead of rolling our own.

Only ask for the passwords after we’re sure we can start downloading. (After untrusted dialog, disk space check, etc)

Bugfixes

Use pkgDepCache::GetCandidateVer() rather than CandidateVerIters throughout the QApt::Package class to make things more robust against errors due to broken/partially installed packages. (Bug 262262)

Fix Package::priority() not working at all due to a faulty validity check

The Supported package tag can also report years, not just months, so support this as well.

The release candidate of the Muon package management suite 1.1 is now available. As with beta 2, the main focus for the release candidate milestone was to iron out issues to make sure the 1.1.0 release rocks. (Expect 1.1.0 to be released in around 2 weeks) Packages are available for the development version of Kubuntu 11.04 as well as for Kubuntu 10.10 via the QApt PPA as usual. Packages of interest are the muon and muon-installer packages.

Here’s what’s changed since 1.1 beta 2:

Muon 1.0.95

Bugfixes

Don’t return back to the main view on the first error encountered during a commit. APT commits can continue after some errors, and we wait until it is done to show all of our errors in the first place.

Fixed a small memory leak in the Muon Software Center where blacklisted/invalid Application pointers were never deleted.

Add a timeout for the search index progress bar so that we don’t have a phantom progress bar hanging around if the apt-xapian-index updater dies or doesn’t send a finished signal.

A few typos have been fixed

Not all sizes of the application-x-deb mimetype icon in KDE 4.6+ are appropriate for an application icon. To remedy this, take the other sizes from KDE 4.5 and install them in hicolor as muon.png

Ensure toolbar actions are re-enabled after errors during commits.

Don’t quit if an InitError comes from the worker. If the timing is right a LockError can be reported as an InitError in the worker, and we don’t have to quit all of Muon over that.

Fix a bug in the Muon Software Center where a menu path could not be found for a lot of installed applications.

Fix a bug in the Muon Package Manager where the QApt backend was being reloaded twice. This speeds up reloading after installing/removing packages and fixes the busy spinner not being present during reloads.

Fix a bug in the Muon Software Center where the search results page would show up for search terms that were too short to be accepted as searches.

Optimizations:

Use the more efficient Backend::areChangesMarked() function in determining whether or not to enable toolbar buttons

Small optimization in HistoryView: Don’t create a KIcon and grab a pixmap from it for each historyItem. Do it once and use this saved pixmap for all items.

KLocale::formatDate() is somewhat expensive, so make a cache of resulting date strings so that we can call formatDate less while setting up the HistoryView.

Hash the past-tense states and the past-tense state strings so that we don’t have to construct a new localized string each iteration. This cuts the amount of l10n string construction in half for a nice speedup constructing the HistoryView.

Don’t set the HistoryView items’ icons by pixmap, but rather by QIcon. QStandardItem expects a QIcon in the first place, and setting the icon by pixmap made it invoke the QIcon constructor anyways.

QApt 1.0.95

Features

Use APT’s pkgCacheFile for QApt::Cache’s cache implementation. This saves around 50 lines of code, plus we get the benefits of using the officially-sanctioned APT cache implementation that we don’t have to maintain.

Add a Package::controlField() function to get the string data of a certain field of the package control file. It can be used to get custom data fields from packages such as GStreamer-specific fields from the GStreamer packages.

Report whether or not an InitError comes from the worker. This way applications can know if they should quit or not.

Bugfixes

Use the new Package::controlField() function to get an accurate support length for supported packages, rather than hardcoding it at 18 months.

Use Q_FOREACH explicitly to avoid potential issues with other libraries using the “foreach” keyword as a macro.

Two days ago I committed patches to Kamera in KDE trunk (4.7) that remove all usage of the kde3support libraries. (It seems that tsegdos had the same idea with KWalletManager.) All the changes I made were to elements of the GUI accessible without a camera. Due to this, I unfortunately was not able to remove the remaining usage of the Qt3Support libraries. If anybody with a USB-enabled camera wants to step up, they can have the satisfaction of knowing that they helped wean one more program off of deprecated libraries. 🙂

On the subject of kde3support and qt3support, I saw some people wondering how many things still depend on it. Fortunately, it is easy to find this out using the “rdepends” feature of apt-cache. Here is the state of things in KDE 4.6:

Reverse Depends for kde3support:

akregator

kspread

kexi

kplayer

k9copy

kvpnc

krecipes

kradio

kmplayer

kmldonkey

kiconedit

kgraphviewer

kftpgrabber

kepas

umbrello

plasma-scriptengine-superkaramba

libkpgp4

libkopete4

libkleo4

libkdepim4

libk3b6

kwalletmanager

kspread

krita

kppp

korganizer

kopete

konversation

konqueror

konq-plugins

kompare

kommander

knode

kmouth

kmail

kinfocenter

kimagemapeditor

kfloppy

kfilereplace

kexi

kdepim-groupware

kdenetwork-filesharing

kdebase-workspace-bin

kate

kamera

k3b

juk

jovie

digikam

cervisia

The Qt3support list includes a lot of non-KDE apps, and most of the apps listed in the kde3support list also depend on qt3support, so I won’t bother posting that list.