The applications in the Linux and Unix-type (*NIX) operating systems are fundamentally different from other systems. UNIX systems have small applications that do one task and do this task perfectly. You can think about Lego blocks, which one of the blocks are perfect for its task (being rigid, allowing connections and displaying color) but when you combine with the other blocks, the things that you can build are endless. This is the same in Linux and all the UNIX derivates.
The front-ends to the command-line programs bring these powerful small applications together. For example, consider that you have downloaded one application which does not have any dependencies in an rpm-based distribution, say openSUSE. To install this application, you can open up a terminal, switch to root account and type rpm -ivh application.rpm. Or, you can go to YaST, select the downloaded folder as a software source, tick the application’s name and click install. What YaST does is to execute the rpm -ivh application.rpm command and output the results in its window.
When programs get a little complicated, they tend to do the things on their own. For example, consider Datacrow, a media cataloging application that I use to catalog my books, CDs, movies, e-books etc.. It has its own database to store various items, an engine to output PDF/HTML/XML reports, which all are performed within the program.
So we see two fundamentally different application types. For system management you have your Lego blocks, for user-level applications you have self-contained programs. So where does the “perfect application” fit in?