Category Archives: design

Software design critique: dnf

I just posted the following comment on a Reddit thread entitled “Strange/confusing dnf and package management quirks”:

Possibly related: I just spun up an old Fedora (27) box I hadn’t used in several years, and went through the process of reacclimating myself to dnf to upgrade things, etc.

In general, I think the “porcelain” for dnf is not very good. It feels like there is no designer (in the Fred Brooks sense) in charge of its development.

It would be nice if the hypothetical chief dnf designer could limit themselves to like 5-7 commands (aka human working memory) with a “flags budget” of 1-2 flags per command. The current situation feels very messy, like people are just hacking on stuff (which is probably what is happening, since this is software).

All i really need from a dnf user porcelain is:

  • dnf update: update all packages on the system to latest versions
  • dnf search $string : show all packages matching $string
  • dnf upgrade $version: just do all the crap to upgrade me to version $version. Especially don’t nag me about stupid intermediate states (‘did you run “dnf upgrade –verify”?’ or whatever is, frankly, a sign of bad design – if the software knows about the intermediate state, then it should handle it)
  • dnf install $pkg: install $pkg
  • dnf uninstall $pkg: uninstall $pkg

Everything else IMO should be punted to RPM and custom scripts, for people who have weird needs.

I’m probably dropping a bunch of use cases on the floor that are “really important” to that one dnf hacker or enterprise customer. But the design above would be perfect for my (end-user) needs. Current situation is very “google random commands, copypasta, and pray”. Current design has way too many bolts and knobs sticking out.

In general, I feel that most software design eventually falls victim to the “thousand hackers making their little semi-random PRs that make sense individually” approach unless there is a big meanie design chief standing at the bridge saying “YOU SHALL NOT PASS”. Which there approximately never is.