Building the Best Linux Apps - Applications in UNIX-like Operating Systems and System Management

Building the Best Linux Apps - Applications in UNIX-like Operating Systems and System Management
Page content

Applications in the Linux and UNIX-Type Operating Systems

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?

The Perfect Linux Application: System Management

For system management, the perfect Linux application will be CLI-based (Command Line Interface). I do not mean installing/uninstalling programs or tasks a user performs on his personal computer. Rather the tasks that a system administrator will perform, such as monitoring the system state or top ten applications that are using the most system resources. There are graphical user interfaces to many of the command-line programs but none of them can combine the power of combining many commands into one by redirection. If you want a simple example, just think about your Documents folder, which probably contains more than one folder. Now, imagine that you need to have a simple text file that has all the folders and files inside them. How can you do that with a graphical interface? Open each folder, type the folder name and copy->paste the file contents? You must be joking: open up a terminal and type tree ~/Documents > files.txt and have the file.txt that contains all the information you need; in less than a second.

That’s why, contrary to all the criticism, I think that the power of the UNIX-type systems lies in the small applications that does one task perfectly and which can be combined with other CLI-based applications to do complicated tasks in just seconds.

All the command line programs conform to the following universal design principles, making them perfect for system administration:

  • Scalability
  • Efficiency
  • Simplicity
  • Extensibility

The Perfect Linux Application: User Programs

Contrary to what I said above, a user program should contain a GUI (Graphical User Interface) as well as the option to execute commands from the command line. It should:

  • Match the user’s needs, goals and skill-level.
  • Have a basic tool set: toolbar, menu items, submenus, dialog boxes, and where applicable, the option to switch to an advanced user mode.
  • Be consistent both internally and externally: the application shall be both consistent inside itself and the environment in which it is run.
  • Have keyboard shortcuts allowing for faster use.
  • Be focused on what it is doing and where necessary can output customizable reports.
  • Have an interface that conforms with the basics of grammar such as Object -> Action (as in File -> Open) or Action -> Object (View -> Folder).
  • Have the principles of help, such as answering the questions of “what can I do with this program”, “what does this button do”, “how can I make this”, “why did I receive this message”
  • Be secure, meaning that any ports opened during the use of the application should be closed as soon as the port is no longer in use.
  • Be responsive. Clicking something and waiting for the program to respond is -as we all know- annoying.
  • Be aesthetically pleasing. A balance of speed and a fancy GUI is a must.

Is there such a thing in Linux programs? Yes there are. Many. Consider your KDE or Gnome preferences window. The icons are well-thought out, grouped together in a logical manner, the interfaces are consistent, they focus on their configuration tasks, help is available in the individual windows, they are responsive and working with them does not make your system more vulnerable.

Choosing Applications for a Linux Distribution

At this point, considering the focus of the Linux distribution as we have discussed in the previous article, it’s better to forget about the specific distribution tasks such as penetration testing, professional multimedia creation and editing or some embedded distributions (such as OpenWrt for routers) and focus on the end-user. The tastes for particular programs vary but I have put my personal preferences inside the parentheses:

  • Productivity: An office suite (OpenOffice.org), a personal information management (PIM) program (Thunderbird with Lightning), taking notes (tomboy), clipboard manager (klipper or glipper)
  • Internet: Web browser (Firefox and Opera), e-mail manager (preferably part of the PIM package - Thunderbird), download manager (D4X), torrent manager (KTorrent or Transmission), news reader (Akregator)
  • Graphics: Photo manager (Digikam or Picasa), digital camera manager (Digikam or Picasa), photo uploader (Digikam or Picasa or F-Spot), image editor (GIMP)
  • Multimedia: audio player (Amarok), video player (KMPlayer or Totem), audio recorder (Audacity), webcam capture (Cheese)
  • System tools: various system-related programs to manage and customize the system, such as an application installer (package manager)
  • Games: depending on the users preference: anything from card games to first person shooters.
  • Accessories: programs that help the user complete simple tasks; e.g. a graphical text editor.
  • Accessibility: any/every tool to assist disabled users.

The initial selection of software should get the user up and running immediately after installing the system. Generally there will also be programs the user wants to have on his system. This should be explained clearly with something like a “first run wizard”, making the wizard something the user can revisit if need be.

In the next installment of this series we will discuss the perfect Linux package management system.

This post is part of the series: The Perfect Linux

As far as operating systems go, Linux is about as perfect as you get. In this series of articles we will discuss what makes a Linux application, package manager, and overall distribution perfect.

  1. The Perfect Linux Distribution
  2. The Perfect Linux Application
  3. Perfect Package Management
  4. The Perfect Linux Distribution - Myth or Reality