Chapter 6. User Applications

6.1. Where are all the user applications?
6.2. How do I download the Ports tree? Should I be using Subversion?
6.3. Why can I not build this port on my 11.X -, or 12.X -STABLE machine?
6.4. I just tried to build INDEX using make index, and it failed. Why?
6.5. I updated the sources, now how do I update my installed ports?
6.6. Do I need to recompile every port each time I perform a major version update?
6.7. Do I need to recompile every port each time I perform a minor version update?
6.8. Why is /bin/sh so minimal? Why does FreeBSD not use bash or another shell?

6.1.

Where are all the user applications?

Refer to the ports page for info on software packages ported to FreeBSD.

Most ports should work on all supported versions of FreeBSD. Those that do not are specifically marked as such. Each time a FreeBSD release is made, a snapshot of the ports tree at the time of release is also included in the ports/ directory.

FreeBSD supports compressed binary packages to easily install and uninstall ports. Use pkg(7) to control the installation of packages.

6.2.

How do I download the Ports tree? Should I be using Subversion?

Any of the methods listed here work:

  • Use portsnap for most use cases. Refer to Using the Ports Collection for instructions on how to use this tool.

  • Use Subversion if custom patches to the ports tree are needed or if running FreeBSD-CURRENT. Refer to Using Subversion for details.

6.3.

Why can I not build this port on my 11.X -, or 12.X -STABLE machine?

If the installed FreeBSD version lags significantly behind -CURRENT or -STABLE, update the Ports Collection using the instructions in Using the Ports Collection. If the system is up-to-date, someone might have committed a change to the port which works for -CURRENT but which broke the port for -STABLE. Submit a bug report, since the Ports Collection is supposed to work for both the -CURRENT and -STABLE branches.

6.4.

I just tried to build INDEX using make index, and it failed. Why?

First, make sure that the Ports Collection is up-to-date. Errors that affect building INDEX from an up-to-date copy of the Ports Collection are high-visibility and are thus almost always fixed immediately.

There are rare cases where INDEX will not build due to odd cases involving OPTIONS_SET being set in make.conf. If you suspect that this is the case, try to make INDEX with those variables turned off before reporting it to FreeBSD ports mailing list.

6.5.

I updated the sources, now how do I update my installed ports?

FreeBSD does not include a port upgrading tool, but it does have some tools to make the upgrade process somewhat easier. Additional tools are available to simplify port handling and are described the Upgrading Ports section in the FreeBSD Handbook.

6.6.

Do I need to recompile every port each time I perform a major version update?

Yes! While a recent system will run with software compiled under an older release, things will randomly crash and fail to work once other ports are installed or updated.

When the system is upgraded, various shared libraries, loadable modules, and other parts of the system will be replaced with newer versions. Applications linked against the older versions may fail to start or, in other cases, fail to function properly.

For more information, see the section on upgrades in the FreeBSD Handbook.

6.7.

Do I need to recompile every port each time I perform a minor version update?

In general, no. FreeBSD developers do their utmost to guarantee binary compatibility across all releases with the same major version number. Any exceptions will be documented in the Release Notes, and advice given there should be followed.

6.8.

Why is /bin/sh so minimal? Why does FreeBSD not use bash or another shell?

Many people need to write shell scripts which will be portable across many systems. That is why POSIX® specifies the shell and utility commands in great detail. Most scripts are written in Bourne shell (sh(1)), and because several important programming interfaces (make(1), system(3), popen(3), and analogues in higher-level scripting languages like Perl and Tcl) are specified to use the Bourne shell to interpret commands. As the Bourne shell is so often and widely used, it is important for it to be quick to start, be deterministic in its behavior, and have a small memory footprint.

The existing implementation is our best effort at meeting as many of these requirements simultaneously as we can. To keep /bin/sh small, we have not provided many of the convenience features that other shells have. That is why other more featureful shells like bash, scsh, tcsh(1), and zsh are available. Compare the memory utilization of these shells by looking at the VSZ and RSS columns in a ps -u listing.

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.