Ports? I'm so new to FreeBSD I haven't figured out how to install it yet. I'm gathering that the term "ports" has nothing to do with a computer's i/o?
In FreeBSD term 'port' is used to refer to a piece of third-party software. Be careful to not got confused: this terminology and meaning of 'port' are specific to FreeBSD. For example,
NetBSD uses 'port' to refer to a supported architecture.
Essentially, term 'port' here comes from 'porting' - applying changes to the software for it to be able to run on another OS. Today, with contemporary compilers and standards, most of the programs are written the way they can run on a dozen OSes without fiddling with them much. But back in the day, it was much more on the cards. Still today we have cases when particular software is written for a particular OS and it needs 'full' porting so to speak.
It is important that port implies that you fetch the source code of the software and compile it on your machine (and then optionally install). Don't worry, this task can be automated.
In FreeBSD ports are represented as 'ports tree' (or sometimes it's called 'ports collection'). Ports tree is a huge hierarchy of directories and files. Usually it's located in /usr/ports. Simply put, a directory - is a port, and it contains a bunch of (usually, around one dozen, but often even less) simple text files that describe how to build this program. In this small text files there are instructions how to download the source code, unpack it, then, if needed, apply some changes (patches) to the source code (this is the abovementioned 'porting') and then compile the program. In the end, you will get a ready-to-run binary executable file, that you can install on your system.
Building the software from ports may be tricky and requires some confidence with the system. Also it requires decent hardware and with huge programs (like web-browsers) it may literally take days to build them. Another option is 'packages' or 'binary packages'. Remember, when you've compiled the port from sources, you got an executable binary? Now imagine that this 'porting' (downloading, patching, compilation) was done not on your machine, but on some other one that did all the work and spitted out a binary file to you. And now imagine that it did it not only with this single port, but with all the ports available in FreeBSD (as for July 2025, there are about 33000 ports available). So, you don't have to imagine, because this is exactly what's happening: powerful FreeBSD servers build all the ports and serve binary result for users. These 'results' are called 'packages'.
To sum it up: 'install a port' means go into /usr/src, find the directory you need, compile the program and the install it. 'install a package' means go ahead and pick up the binary package for desired program that has already been built and served.
It was a general introduction to ports and packages. I failed to mention some things, for example, that building a port yourself allows you to adjust some settings or options to fit your needs, meanwhile binary packages don't allow such luxury.
Technical details: for manipulating packages, FreeBSD uses package manager
pkg(8) (see also
pkg(7)). For dealing with
ports(7),
make(1) commands are issued. There are also some programs that allow to deal with ports more easily, for example,
portmaster(8).
If you got interested and want to get more details, you can continue with
FreeBSD Handbook dedicated chapter.