Most Linux distributions support dozens of programming languages. The original development tools used for building both Linux applications and operating system programs are found within the GNU toolchain, which includes the GNU Compiler Collection (GCC) and the GNU build system. Amongst others, GCC provides compilers for
Ada,
C,
C++,
Go and
Fortran. Many programming languages have a cross-platform reference implementation that supports Linux, for example
PHP,
Perl,
Ruby,
Python,
Java, Go,
Rust and
Haskell. First released in 2003, the
LLVM project provides an alternative cross-platform open-source compiler for many languages. Proprietary compilers for Linux include the Intel C++ Compiler, Sun Studio, and IBM XL
C/
C++ Compiler. BASIC in the form of Visual Basic is supported in such forms as Gambas, FreeBASIC, and XBasic, and in terms of terminal programming or QuickBASIC or Turbo BASIC programming in the form of QB64.
A common feature of Unix-like systems, Linux includes traditional specific-purpose programming languages targeted at scripting, text processing and system configuration and management in general. Linux distributions support shell scripts, awk, sed and make. Many programs also have an embedded programming language to support configuring or programming themselves. For example, regular expressions are supported in programs like grep, or locate, while advanced text editors, like GNU Emacs, have a complete
Lisp interpreter built-in.
Most distributions also include support for
PHP,
Perl,
Ruby,
Python and other
dynamic languages. While not as common, Linux also supports
C# (via
Mono),
Vala, and
Scheme. A number of Java Virtual Machines and development kits run on Linux, including the original Sun Microsystems JVM (
HotSpot), and IBM's J2SE RE, as well as many open-source projects like Kaffe and JikesRVM.
GNOME and
KDE are popular
desktop environments and provide a framework for developing applications. These projects are based on the GTK+ and
Qt widget toolkits,
respectively, which can also be used independently of the larger
framework.