Doesn't Anyone Understand Proper Usability Design?

A new Linux user (Debian-based. Umm...the OS, not the user) learns how to install software:

$apt-get install [list of package names] Barf, GTFO. Are you root? $sudo make me a sandwich make: *** No rule to make target `me'. Stop. $sudo apt-get install [list of package names]


Then eventually they need to upgrade something:

"Obviously I'm not trying to install it, it's already installed! I just want it updated. Hmm, but how do I do that?"

$apt-get --help ... install - Install new packages (pkg is libc6 not libc6.deb) ...

"Hm, ok, yes, once again, it's obviously not install, because I'm not trying to 'Install new packages'. Just update exiting ones. Let's look at the other options..."


"Bam! That must be it!"

(Don't anyone try to tell me you've never been impulsive like this. It doesn't matter how much of an expert you are: You've done it, and you know it.)

$sudo apt-get update foosoft E: The update command takes no arguments

"WTF? Hmm, well I guess I didn't actually bother to read it..."

update - Retrieve new lists of packages

"Oh! Ok, of course that didn't work. Silly me! So then what do I want...?"

upgrade - Perform an upgrade

"The upgrade command upgrades? No crap! (Must have been a job for Captain Obvious and his trusty sidekick, Shit Sherlock.) Well, obviously I want to upgrade the package that I'm trying to upgrade, so it's pretty damn obvious which command to use:"

$sudo apt-get upgrade foosoft ...bunch of upgrading...

"Hmm, it looks like it's upgrading the dependencies, too. Neat! Some of them seem odd, but they must be indirect dependencies. Ah, it's done!"

$foosoft FooSoft v2.8

"Yay! The new version!"

Those of you truly familiar with apt-get already know where this is going...

Months later...(actually around two years in my case...yes, I'll admit this all actually happened to me...)

"I need to upgrade something again:"

$sudo apt-get update^H^H^H^H

"...Crap, that's right, it's the other one:"

$sudo apt-get upgrade barzoom ...whiiirrrrr... done $barzoom Barz Oom v1.0 (Ha ha! You thought it was "Bar Zoom"!)

"WTF! That's the version I already had!"

$sudo apt-get upgrade barzoom Fuck you, I did my job already.


Do you know what's happening?

The apt-get upgrade doesn't upgrade specific packages. In fact, it doesn't even take any package names as parameters at all, but you wouldn't know that from either the help page or from apt-get's actual response to your command. What apt-get upgrade does do is upgrade all the packages on your system that can be upgraded without new packages being installed. (Apparently, apt-get dist-upgrade does the same, but allows new packages to be installed.)

So normally, it all seems to work fine because the package you request (*ahem*, that is, the package you thought you requested) is one of the packages on your system and apt-get upgrade simply tries to upgrade all of them. But then, when a new version of your program comes out that has a new dependency you don't already have, apt-get upgrade skips your package.

So what are you supposed to do?

Even though apt-get's help page never bothers to mention it, you're actually supposed to use the install command to upgrade any specific programs that are already installed. Yup, that's right. Exactly the command that "obviously" couldn't have been the right one.

Here's what should have happened:

"I want to upgrade foosoft. Hmm, but how do I do that?"

$apt-get --help ... update... ...

"Bam! That must be it!"

$sudo apt-get update foosoft Error: The update command retrieves a list of new packages. It takes no arguments.

"Oh, I see. That was the wrong one. What else is there?"


"The upgrade command upgrades? No shit, Sherlock! Clearly this must be it:"

$sudo apt-get upgrade foosoft Error: The upgrade command takes no arguments because it upgrades all packages (without installing new ones). To upgrade specific packages, use the 'install' command.

"Whaa...? Lemme look at that help page again..."

upgrade - Upgrades all possible packages (without installing new ones) install [package list] - Install or upgrade specific packages

"Ahh, alright. I get it now."

$sudo apt-get install foobar ...whiiirrrrr... done $foosoft FooSoft v2.8

"Yay! The new version!"

Months later...

"I need to upgrade Barz Oom:"

$sudo apt-get update^H^H^H^H

"...Crap, wait, that's just the list of packages."

$sudo apt-get upgrade barzoom Error: The upgrade command takes no arguments because...

(Smacks forehead) "Of course! I knew that! What the hell is wrong with me today?"

$sudo apt-get install barzoom ...whiiirrrrr... done $barzoom Barz Oom v1.0 (Ha ha! You thought it was "Bar Zoom"!)


$thank you You're most very welcome, of course!

Remember: When you write software, make sure to think through its interactions through the eyes of a new user.

As a side note, I'm curious: Are there any people out there who primarily use Linux (an apt-get based distro) that didn't already know this about apt-get? If you did know, how did you find out? Did you always know? Drop a note in the comments section!

4 comments for "Doesn't Anyone Understand Proper Usability Design?"

  1. (Guest) Robert
    2012-01-14 07:29

    I take a very approach to this (as do most people I think), so I had no idea about this behaviour. That said, I'm guessing most users tend to use the GUI for upgrading packages these days.

    Regardless, sounds like a bug to me, I'd file a bug report -

  2. (Guest) guest
    2012-01-14 16:43

    apt-get is the oldest interface to the package manager and is used mostly by admins or people with good understanding of the system, or so I thought.
    Debian switched to aptitude a few versions ago (== looong time ago) as the default terminal interface. I think they even updated documentation to use aptitude in official manuals. Of course new users would use GUI apps such as synaptic (I still can't believe that Ubuntu no longer installs this by default..). I think (without actually measuring) that the scenario where a new user uses apt-get is very unlikely, not counting copy-paste from online forums.

  3. 2012-01-14 17:16

    "apt-get is the oldest interface...Debian switched to aptitude"

    Interesting, I had no idea. Everything I always used to see said "apt-get", so I just got used to always using that. Actually, I thought apt-get was a front-end for aptitude.

  4. 2012-01-14 17:24

    I do hope that this article can, at the very least, serve as a template for how to think about usability issues, and why to do so.

    Pointing out issues with apt-get was only half of my motivation for this. The other half was to help raise awareness of the importance of, and methods of, good usability design. I suppose that part may have gotten lost in my focusing so heavily on apt-get.

    Of course, I certainly appreciate the comments regarding apt-get (and aptitude)!

Leave a comment