Why was `apt` made when we already have `apt-get`?

apt is mostly intended as a new binary with some of the commonly used features of both apt-get and apt-cache (with more to be added later, probably), and with a "simplified" interface. Most of APT's available command line functionality is exposed via apt-cache and apt-get, but these commands aren't ideal from a user experience point of view. Since those two binaries were intended as test/example commands (originally by Jason Gunthorpe, I believe), and not for serious end-user usage.

The apt command is meant to be easier to use, and more "user-friendly". People often find it confusing that functionality is split between apt-get and apt-cache for instance.

See comments by Michael Vogt in his blog post: apt 1.0.

I don't think it is particularly meant to be about overcoming design mistakes.

So, it's not intended as an apt-get replacement.

For more information, try asking the APT developers themselves. They are super-cool, but they don't hang out on Stack Exchange. Try #debian-apt on OFTC instead.

Comments from Michael Vogt on the said #debian-apt channel; I posted the question link on the IRC channel.

<mvo> faheem: "design mistakes" is a bit of a strong word - we are just scared of changing anything in apt-get because it's used in a gazillion scripts by now. "apt" lets us do that plus it's easier to type and we can combine apt-get/apt-cache. so I think the answers are all fine, the key part is really that apt is more convenient to use/type.

<mvo> faheem: [snip] the gist is that apt/apt-get/apt-cache all share the same library and code, just some tweaks to the default.


From the man page:

DIFFERENCES TO APT-GET(8)
   The apt command is meant to be pleasant for end users and does not need to be 
   backward compatible like apt-get(8). Therefore some options are
   different:

   ·   The option DPkg::Progress-Fancy is enabled.

   ·   The option APT::Color is enabled.

   ·   A new list command is available similar to dpkg --list.

   ·   The option upgrade has --with-new-pkgs enabled by default.