<?xml version='1.0' encoding='utf-8'?>
<!-- -*- DocBook -*- -->
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
    "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
    <!ENTITY % shareddata SYSTEM "../debian-faq.ent" > %shareddata;
]>

<chapter id="software"><title>Software available in the Debian system</title>
<section id="apps"><title>What types of applications and development software are available for &debian;?</title>
<para>
Like most Linux distributions, &debian; provides:
</para>
<itemizedlist>
<listitem>
<para>
the major GNU applications for software development, file manipulation, and
text processing, including gcc, g++, make, texinfo, Emacs, the Bash shell and
numerous upgraded Unix utilities,
</para>
</listitem>
<listitem>
<para>
Perl, Python, Tcl/Tk and various related programs, modules and libraries for
each of them,
</para>
</listitem>
<listitem>
<para>
TeX (LaTeX) and Lyx, dvips, Ghostscript,
</para>
</listitem>
<listitem>
<para>
the Xorg windowing system, which provides a networked graphical user interface
for Linux, and countless X applications including the GNOME, KDE and Xfce
desktop environments,
</para>
</listitem>
<listitem>
<para>
a full suite of networking applications, including servers for Internet
protocols such as HTTP (WWW), FTP, NNTP (news), SMTP and POP (mail) and DNS
(name servers); relational databases like PostgreSQL, MySQL; also provided are
web browsers including the various Mozilla products,
</para>
</listitem>
<listitem>
<para>
a complete set of office applications, including the LibreOffice productivity
suite, Gnumeric and other spreadsheets, WYSIWYG editors, calendars.
</para>
</listitem>
</itemizedlist>
<para>
More than &packages-main; packages, ranging from news servers and readers to sound
support, FAX programs, database and spreadsheet programs, image processing
programs, communications, net, and mail utilities, Web servers, and even
ham-radio programs are included in the distribution.  Other &packages-contrib-nonfree; software suites
are available as Debian packages, but are not formally part of Debian due to
license restrictions.
</para>
</section>

<section id="softwareauthors"><title>Who wrote all that software?</title>
<para>
For each package the <emphasis>authors</emphasis> of the program(s) are
credited in the file <literal>/usr/share/doc/PACKAGE/copyright</literal>, where
PACKAGE is to be substituted with the package's name.
</para>
<para>
<emphasis>Maintainers</emphasis> who package this software for the &debian;
system are listed in the Debian control file (see <xref
linkend="controlfile"/>) that comes with each package.  The Debian changelog,
in <literal>/usr/share/doc/PACKAGE/changelog.Debian.gz</literal>, mentions the
people who've worked on the Debian packaging too.
</para>
</section>

<section id="pkglist"><title>How can I get a current list of programs that have been packaged for Debian?</title>
<para>
A complete list is available from any of the <ulink
url="https://www.debian.org/mirror/list">Debian mirrors</ulink>, in the file
<literal>indices/Maintainers</literal>.  That file includes the package names
and the names and e-mails of their respective maintainers.
</para>
<para>
The <ulink url="https://packages.debian.org/">WWW interface to the Debian
packages</ulink> conveniently summarizes the packages in each of about thirty
"sections" of the Debian archive.
</para>
</section>

<section id="buildenv"><title>How can I install a developer's environment to build packages?</title>
<para>
If you want to build packages in your Debian system you will need to have a
basic development environment, including a C/C++ compiler and some other
essential packages.  In order to install this environment you just need to
install the <systemitem role="package">build-essential</systemitem> package.
This is a meta-package or place-holder package which depends on the standard
development tools one needs to build a Debian package.
</para>
<para>
Some software can, however, need additional software to be rebuilt, including
library headers or additional tools such as <command>autoconf</command> or
<command>gettext</command>.  Debian provides many of the tools needed to build
other software as Debian packages.
</para>
<para>
Finding which software is precisely required can be tricky, however, unless you
are planning on rebuilding Debian packages.  This last task is rather easy to
do, as official packages have to include a list of the additional software
(besides the packages in <systemitem
role="package">build-essential</systemitem>) needed to build the package, this
is known as <literal>Build-Dependencies</literal>.  To install all the packages
needed to build a given source package and then build said source package you
can just run:
</para>
<screen>
# apt-get build-dep <replaceable>foo</replaceable>
# apt-get source --build <replaceable>foo</replaceable>
</screen>
<para>
Notice that if you want to build the Linux kernels distributed by Debian you
will want to install also the <systemitem
role="package">kernel-package</systemitem> package.  For more information see
<xref linkend="customkernel"/>.
</para>
</section>

<section id="missing"><title>What is missing from &debian;?</title>
<para>
There is a list of packages which still need to be packaged for Debian, the
<ulink url="https://www.debian.org/devel/wnpp/">Work-Needing and Prospective
Packages list</ulink>.
</para>
<para>
For more details about adding missing things, see <xref linkend="contributing"/>.
</para>
</section>

<section id="no-devs"><title>Why do I get "ld: cannot find -lfoo" messages when compiling programs? Why aren't there any libfoo.so files in Debian library packages?</title>
<para>
Debian Policy requires that such symbolic links (to libfoo.so.x.y.z or similar)
are placed in separate, development packages.  Those packages are usually named
libfoo-dev or libfooX-dev (presuming the library package is named libfooX, and
X is a whole number).
</para>
</section>

<section id="java"><title>(How) Does Debian support Java?</title>
<para>
Several <emphasis>free</emphasis> implementations of Java technology are
available as Debian packages, providing both Java Development Kits as well as
Runtime Environments.  You can write, debug and run Java programs using Debian.
</para>
<para>
Running a Java applet requires a web browser with the capability to recognize
and execute it.  Several web browsers available in Debian, such as Mozilla or
Konqueror, support Java plug-ins that enable running Java applets within them.
</para>
<para>
Please refer to the <ulink
url="https://www.debian.org/doc/manuals/debian-java-faq/">Debian Java
FAQ</ulink> for more information.
</para>
</section>

<section id="isitdebian"><title>How can I check that I am using a Debian system, and what version it is?</title>
<para>
In order to make sure that your system has been installed from the real Debian
base disks, use the
</para>
<screen>
lsb_release -a
</screen>
<para>
command.  It will display the name of the distribution (in Distributor ID
field) and the version of the system (in Release and Codename fields).  The
following is an example run in a Debian system:
</para>
<screen>
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.4 (wheezy)
Release:    7.4
Codename:   wheezy
</screen>
<para>
You can also check for the existence of <literal>/etc/debian_version</literal>
file, which contains a single one-line entry giving the version number of the
release, as defined by the package <literal>base-files</literal>.
</para>
<para>
Users should be aware, however, that the Debian system consists of many parts,
each of which can be updated (almost) independently.  Each Debian "release"
contains well defined and unchanging contents.  Updates are separately
available.  For a one-line description of the installation status of package
<literal>foo</literal>, use the command <literal>dpkg --list foo</literal>.
For a more verbose description, use:
</para>
<screen>
dpkg --status foo
</screen>
<para>
To view versions of all installed packages, run:
</para>
<screen>
dpkg -l
</screen>
<para>
Note that the existence of the program <literal>dpkg</literal> shows that you
should be able to install Debian packages on your system.  However, since the
program has been ported to many other operating systems and architectures, this
is no longer a reliable method of determining if a system is &debian;.
</para>
</section>

<section id="nonenglish"><title>How does Debian support non-English languages?</title>
<itemizedlist>
<listitem>
<para>
&debian; is distributed with keymaps for nearly two dozen keyboards,
and with utilities (in the <literal>kbd</literal> package) to install, view,
and modify the tables.
</para>
<para>
The installation prompts the user to specify the keyboard to use.
</para>
</listitem>
<listitem>
<para>
Nearly all of the software in Debian supports UTF-8 as character set.  Legacy
character sets, such as ISO-8859-1 or ISO-8859-2, should be considered
obsolete.
</para>
</listitem>
<listitem>
<para>
Currently, support for German-, Spanish-, French-, Hungarian-, Italian-,
Japanese-, Korean-, Dutch-, Polish-, Portuguese-, Russian-, Turkish-, and
Chinese-language manual pages is provided through the
<literal>manpages-LANG</literal> packages (where LANG is the two-letter ISO
country code).  To access an NLS manual page, the user must set the shell
LC_MESSAGES variable to the appropriate string.
</para>
<para>
For example, in the case of the Italian-language manual pages, LC_MESSAGES
needs to be set to 'italian'.  The <command>man</command> program will then
search for Italian manual pages under <literal>/usr/share/man/it/</literal>.
</para>
</listitem>
</itemizedlist>
</section>

<section id="nonfreefirmware"><title>I have a device that requires non-free firmware. What should I do?</title>

<para>
Firmware refers to embedded software which controls electronic devices.
Many devices require firmware to operate. Historically, firmware would be built
into the device's ROM or Flash memory, but more and more often, a firmware
image has to be loaded into the device RAM by a device driver during device
initialisation.
</para>
<para>
Some devices require non-free firmware to work properly. And there could be
firmware updates in the future.
</para>
<para>
In Debian release 11 (bullseye) and older, Debian did not include non-free firmware
on official images and live installations.  For Debian 12 onwards, all the
packaged non-free firmware binaries that Debian can distribute have been moved
to a new component in the Debian archive, called
<literal>non-free-firmware</literal>. If you're upgrading from an older release
of Debian and you need these firmware binaries, make sure that your sources.list
uses this new component:
</para>
<screen>
http://deb.debian.org/debian &releasename; main non-free-firmware contrib non-free
</screen>
<para>
For more information please refer to <ulink
url="https://wiki.debian.org/Firmware">Firmware information</ulink> in the
Debian Wiki.
</para>
</section>

<section id="nonfreewireless"><title>I have a wireless network card which doesn't work with Linux. What should I do?</title>
<para>
Buy one which does :)
</para>
<para>
Alternatively, use <systemitem role="package">ndiswrapper</systemitem> to use a
driver for Windows (if you have one) on your Linux system.  See the <ulink
url="https://wiki.debian.org/NdisWrapper">Debian Wiki ndiswrapper page</ulink>
for more information.
</para>
</section>

</chapter>

