Programming Languages mini-HOWTO
Risto S. VarankaJul 22nd 2000
A brief comparison of major programming languages for Linux and major libraries for creating graphical user interfaces (GUIs) under Linux
Linux is a fascinating operating system because it lets any user participate in its development. The variety of available languages, however, can be confusing to beginning Linux developers. This document lists the most common options for everyday development and states some key facts about them. (Well, ``most common'' and ``key'' as I perceive them.)
My aim is neither to review the languages nor to determine which one is the best. Each language is a tool that fits some jobs and some tastes. You can get further (often conflicting) information easily, if you ask around or keep your ears open. The Links sections in this document will give you some pointers for your own research.
There is a plethora of languages and libraries for Linux, so this document only covers the most common languages and GUI (Graphical User Interface) toolkits at the moment. This document is intended to be fairly neutral, but I haven't included all languages available. Since my judgment is undoubtedly biased in many ways, I advise serious developers to check out the sites that do a better job in listing all languages and libraries. Also note that only the Linux implementations of the languages and GUI toolkits are covered, their features on other platforms are not discussed or implied.
This document is a recent addition to the LDP, so there has not been opportunity for much community feedback. However, it is released in hopes that it will prove useful for people interested in programming under Linux, especially beginners. A question mark in the tables indicates lack of information. If you can fill it in, please contact the author.
You can find the latest modifications at http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/
Copyright (c) 2000 Risto Varanka.
The following license terms apply to all LDP documents, unless otherwise stated in the document. The LDP documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, provided that this license notice is displayed in the reproduction. Commercial redistribution is permitted and encouraged. Thirty days advance notice via email to the author(s) of redistribution is appreciated, to give the authors time to provide updated documents.
Requirements of Modified Works
All modified documents, including translations, anthologies, and partial documents, must meet the following requirements:
In addition it is requested that:
As a special exception, anthologies of LDP documents may include a single copy of these license terms in a conspicuous location within the anthology and replace other copies of this license with a reference to the single copy of the license without the document being considered ``modified'' for the purposes of this section.
Mere aggregation of LDP documents with other documents or programs on the same media shall not cause this license to apply to those other works.
All translations, derivative documents, or modified documents that incorporate any LDP document may not have more restrictive license terms than these, except that you may require distributors to make the resulting document available in source format.
THIS DOCUMENT COVERS A LARGE AND CONSTANTLY CHANGING DOMAIN. THEREFORE, THE INFORMATION CONTAINED IN THIS DOCUMENT MAY BE INCORRECT OR OUTDATED. ALL USE OF THIS DOCUMENT AND ALL INFORMATION CONTAINED IN IT IS AT YOUR OWN RISK. THE AUTHOR DOES NOT GIVE ANY WARRANTY OR GUARANTEE, EITHER EXPLICIT OR IMPLIED.
You are welcome to send feedback to the author at: email@example.com.
Author's web site can be found at http://www.helsinki.fi/~rvaranka/.
I am thankful to several people who commented on language issues. These conversations have given me a better view of the different languages, and I hope future conversations will allow this mini-HOWTO to mature over time. Especially I would like to thank the people at the IRCNet channel #linux: Morphy, Bluesmurf, Vadim, Zonk^, Rikkus and others whose names I have forgotten. Thanks go also to Stig Erik Sandoe for helpful comments.
Exhaustive lists of Linux development libraries and tools:
The Hacker FAQ by Eric S. Raymond is another interesting text for novice Linux developers. It concentrates on some cultural and psychological aspects of open source development.
Other LDP documents covering general programming subjects include the Reading List HOWTO and the Linux Programmer's Guide - several more have been written on specific subjects.
C, Lisp and Perl are traditional hacking languages in the GNU/Linux culture; Python, PHP, Java and C++ have gained new ground recently.
Perl Beginner: Yes - OOP: Yes Examples: Scripting, sysadmin, www Comments: Powerful for handling text and strings Python Beginner: Yes - OOP: Yes Examples: Scripting, application scripting, www Comments: TCL Beginner: Yes - OOP: No Examples: Scripting, sysadmin, applications Comments: PHP Beginner: Yes - OOP: Yes Examples: Www Comments: Popular for web databases Java Beginner: Yes - OOP: Yes Examples: Cross-platform applications, www Comments: Spreading to new areas, eg. e-commerce infrastructure Lisp Beginner: Yes - OOP: Functional Examples: Emacs modes (for Elisp), AI Comments: Variants Elisp, Clisp and Scheme Fortran Beginner: No - OOP: No Examples: Mathematical (scientific) applications Comments: Variants f77 and f90/95 C Beginner: No - OOP: No Examples: System programming, applications Comments: C++ Beginner: No - OOP: Yes Examples: Applications Comments:
Shells are an important programming environment, too. I haven't covered them because I don't understand the field very thoroughly yet. Knowledge of shells is important for anyone who works on Linux regularly, more so for system administrators. There are similarities between shell programming and other kinds of scripting - often they can achieve the same goals, and you have the option of choosing between native shell and a separate scripting language. Among the most popular shells are bash, tcsh, csh, ksh and zsh. You can get basic information on your shell with the man command, man bash for example.
Other languages of note: AWK, SED, Smalltalk, Eiffel, Ada, Prolog, assembler, Objective C, Logo, Pascal (p2c converter)
The standard graphical subsystem for UNIX and Linux, called X, has its own libraries for GUI development. They provide a low-level programming interface to X, but tend to be hard to use. Old end-user applications and other toolkits of course make good use of them. Nowadays the Linux GUI scene is dominated by GTK+ and Qt, since two popular, complete user environments - GNOME and KDE - are based on them.