The output of "aptitude why" is sometimes confusing and useless. For instance: cventin% aptitude why ncal i quilt Depends bsdextrautils | bsdmainutils p bsdmainutils Depends ncal while as output, bsdmainutils is not installed, so that this cannot be the reason why ncal is installed. cventin% aptitude why emacs-calfw i emacs-calfw Suggests emacs-calfw-howm p emacs-calfw-howm Depends emacs-calfw (= 1.6+git20180118-2) This is a circular dependendy, so this is useless. The reason in both cases is that the package is manually installed, and aptitude should output such information.
That's a bit separate from aptitude why's goal. aptitude why doesn't tell you why a package is installed, but the strongest reason why an installed package could lead to the package being installed. The second one I agree is useless, aptitude needs to reject circular reasoning chains. If you are looking for why a package is actually installed, you may find more luck with `apt why` in experimental, which gives you a reasoning trace from the solver [note it just says "X is selected for install" for manual installs, it doesn't yet include the word manual in there, I'm not sure it should and we should pivot to "installed" and "installed as a dependency" instead of "manually installed" and "automatically installed"] Note that `apt why` on the flip side does not work for packages not actually installed because well the solver had no reason to install them :D
But I don't see how this makes sense in the case Here, it is bsdextrautils that is installed; bsdmainutils is not installed. So the dependency on ncal does not have to be satisfied. And the strongest reason why ncal is installed is that it is actually manually installed. Note that "aptitude why" says whenever a package in the chain is manually installed, *except* for the target package. Information on whether the target package is automatically installed / manually installed or not installed would be useful. For instance: cventin% aptitude why dracut-install i initramfs-tools Depends initramfs-tools-core (= 0.148.3) i A initramfs-tools-core Depends dracut-install Here one knows that initramfs-tools is manually installed and that initramfs-tools-core is automatically installed (because of the "A"), but there is no such information for dracut-install. A third line could have been useful, such as i initramfs-tools Depends initramfs-tools-core (= 0.148.3) i A initramfs-tools-core Depends dracut-install i A dracut-install I also get cventin% aptitude why bsdmainutils i quilt Depends bsdextrautils | bsdmainutils while here bsdmainutils is not installed. This is misleading: if I remove quilt, then installed it again, it will not install bsdmainutils, because bsdextrautils comes first. So, what's the purpose of "aptitude why" in such a case?