5.3. Categorization

5.3.1. CATEGORIES

When a package is created, it is put under /usr/ports/packages/All and links are made from one or more subdirectories of /usr/ports/packages. The names of these subdirectories are specified by the variable CATEGORIES. It is intended to make life easier for the user when he is wading through the pile of packages on the FTP site or the CDROM. Please take a look at the current list of categories and pick the ones that are suitable for the port.

This list also determines where in the ports tree the port is imported. If there is more than one category here, the port files must be put in the subdirectory with the name of the first category. See below for more discussion about how to pick the right categories.

5.3.2. Current List of Categories

Here is the current list of port categories. Those marked with an asterisk (*) are virtual categories—those that do not have a corresponding subdirectory in the ports tree. They are only used as secondary categories, and only for search purposes.

Note:

For non-virtual categories, there is a one-line description in COMMENT in that subdirectory's Makefile.

CategoryDescriptionNotes
accessibilityPorts to help disabled users. 
afterstep*Ports to support the AfterStep window manager. 
arabicArabic language support. 
archiversArchiving tools. 
astroAstronomical ports. 
audioSound support. 
benchmarksBenchmarking utilities. 
biologyBiology-related software. 
cadComputer aided design tools. 
chineseChinese language support. 
commsCommunication software.Mostly software to talk to the serial port.
convertersCharacter code converters. 
databasesDatabases. 
deskutilsThings that used to be on the desktop before computers were invented. 
develDevelopment utilities.Do not put libraries here just because they are libraries. They should not be in this category unless they truly do not belong anywhere else.
dnsDNS-related software. 
docs*Meta-ports for FreeBSD documentation. 
editorsGeneral editors.Specialized editors go in the section for those tools. For example, a mathematical-formula editor will go in math, and have editors as a second category.
elisp*Emacs-lisp ports. 
emulatorsEmulators for other operating systems.Terminal emulators do not belong here. X-based ones go to x11 and text-based ones to either comms or misc, depending on the exact functionality.
financeMonetary, financial and related applications. 
frenchFrench language support. 
ftpFTP client and server utilities.If the port speaks both FTP and HTTP, put it in ftp with a secondary category of www.
gamesGames. 
geography*Geography-related software. 
germanGerman language support. 
gnome*Ports from the GNOME Project. 
gnustep*Software related to the GNUstep desktop environment. 
graphicsGraphics utilities. 
hamradio*Software for amateur radio. 
haskell*Software related to the Haskell language. 
hebrewHebrew language support. 
hungarianHungarian language support. 
ipv6*IPv6 related software. 
ircInternet Relay Chat utilities. 
japaneseJapanese language support. 
javaSoftware related to the Java™ language.The java category must not be the only one for a port. Save for ports directly related to the Java language, porters are also encouraged not to use java as the main category of a port.
kde*Ports from the KDE Project. 
kld*Kernel loadable modules. 
koreanKorean language support. 
langProgramming languages. 
linux*Linux applications and support utilities. 
lisp*Software related to the Lisp language. 
mailMail software. 
mathNumerical computation software and other utilities for mathematics. 
mbone*MBone applications. 
miscMiscellaneous utilitiesThings that do not belong anywhere else. If at all possible, try to find a better category for the port than misc, as ports tend to be overlooked in here.
multimediaMultimedia software. 
netMiscellaneous networking software. 
net-imInstant messaging software. 
net-mgmtNetworking management software. 
net-p2pPeer to peer network applications. 
newsUSENET news software. 
node*Ports related to npm, a package for Node.js. 
palmSoftware support for the Palm™ series. 
parallel*Applications dealing with parallelism in computing. 
pear*Ports related to the Pear PHP framework. 
perl5*Ports that require Perl version 5 to run. 
plan9*Various programs from Plan9. 
polishPolish language support. 
ports-mgmtPorts for managing, installing and developing FreeBSD ports and packages. 
portuguesePortuguese language support. 
printPrinting software.Desktop publishing tools (previewers, etc.) belong here too.
python*Software related to the Python language. 
ruby*Software related to the Ruby language. 
rubygems*Ports of RubyGems packages. 
russianRussian language support. 
scheme*Software related to the Scheme language. 
scienceScientific ports that do not fit into other categories such as astro, biology and math. 
securitySecurity utilities. 
shellsCommand line shells. 
spanish*Spanish language support. 
sysutilsSystem utilities. 
tcl*Ports that use Tcl to run. 
textprocText processing utilities.It does not include desktop publishing tools, which go to print.
tk*Ports that use Tk to run. 
ukrainianUkrainian language support. 
vietnameseVietnamese language support. 
windowmaker*Ports to support the WindowMaker window manager. 
wwwSoftware related to the World Wide Web.HTML language support belongs here too.
x11The X Window System and friends.This category is only for software that directly supports the window system. Do not put regular X applications here. Most of them go into other x11-* categories (see below).
x11-clocksX11 clocks. 
x11-driversX11 drivers. 
x11-fmX11 file managers. 
x11-fontsX11 fonts and font utilities. 
x11-serversX11 servers. 
x11-themesX11 themes. 
x11-toolkitsX11 toolkits. 
x11-wmX11 window managers. 
xfce*Ports related to the Xfce desktop environment. 
zope*Zope support. 

5.3.3. Choosing the Right Category

As many of the categories overlap, choosing which of the categories will be the primary category of the port can be tedious. There are several rules that govern this issue. Here is the list of priorities, in decreasing order of precedence:

  • The first category must be a physical category (see above). This is necessary to make the packaging work. Virtual categories and physical categories may be intermixed after that.

  • Language specific categories always come first. For example, if the port installs Japanese X11 fonts, then the CATEGORIES line would read japanese x11-fonts.

  • Specific categories are listed before less-specific ones. For instance, an HTML editor is listed as www editors, not the other way around. Also, do not list net when the port belongs to any of irc, mail, news, security, or www, as net is included implicitly.

  • x11 is used as a secondary category only when the primary category is a natural language. In particular, do not put x11 in the category line for X applications.

  • Emacs modes are placed in the same ports category as the application supported by the mode, not in editors. For example, an Emacs mode to edit source files of some programming language goes into lang.

  • Ports installing loadable kernel modules also have the virtual category kld in their CATEGORIES line. This is one of the things handled automatically by adding USES=kmod.

  • misc does not appear with any other non-virtual category. If there is misc with something else in CATEGORIES, that means misc can safely be deleted and the port placed only in the other subdirectory.

  • If the port truly does not belong anywhere else, put it in misc.

If the category is not clearly defined, please put a comment to that effect in the port submission in the bug database so we can discuss it before we import it. As a committer, send a note to the FreeBSD ports mailing list so we can discuss it first. Too often, new ports are imported to the wrong category only to be moved right away. This causes unnecessary and undesirable bloat in the master source repository.

5.3.4. Proposing a New Category

As the Ports Collection has grown over time, various new categories have been introduced. New categories can either be virtual categories—those that do not have a corresponding subdirectory in the ports tree— or physical categories—those that do. This section discusses the issues involved in creating a new physical category. Read it thouroughly before proposing a new one.

Our existing practice has been to avoid creating a new physical category unless either a large number of ports would logically belong to it, or the ports that would belong to it are a logically distinct group that is of limited general interest (for instance, categories related to spoken human languages), or preferably both.

The rationale for this is that such a change creates a fair amount of work for both the committers and also for all users who track changes to the Ports Collection. In addition, proposed category changes just naturally seem to attract controversy. (Perhaps this is because there is no clear consensus on when a category is too big, nor whether categories should lend themselves to browsing (and thus what number of categories would be an ideal number), and so forth.)

Here is the procedure:

  1. Propose the new category on FreeBSD ports mailing list. Include a detailed rationale for the new category, including why the existing categories are not sufficient, and the list of existing ports proposed to move. (If there are new ports pending in Bugzilla that would fit this category, list them too.) If you are the maintainer and/or submitter, respectively, mention that as it may help the case.

  2. Participate in the discussion.

  3. If it seems that there is support for the idea, file a PR which includes both the rationale and the list of existing ports that need to be moved. Ideally, this PR would also include these patches:

    • Makefiles for the new ports once they are repocopied

    • Makefile for the new category

    • Makefile for the old ports' categories

    • Makefiles for ports that depend on the old ports

    • (for extra credit, include the other files that have to change, as per the procedure in the Committer's Guide.)

  4. Since it affects the ports infrastructure and involves moving and patching many ports but also possibly running regression tests on the build cluster, assign the PR to the Ports Management Team .

  5. If that PR is approved, a committer will need to follow the rest of the procedure that is outlined in the Committer's Guide.

Proposing a new virtual category is similar to the above but much less involved, since no ports will actually have to move. In this case, the only patches to include in the PR would be those to add the new category to CATEGORIES of the affected ports.

5.3.5. Proposing Reorganizing All the Categories

Occasionally someone proposes reorganizing the categories with either a 2-level structure, or some other kind of keyword structure. To date, nothing has come of any of these proposals because, while they are very easy to make, the effort involved to retrofit the entire existing ports collection with any kind of reorganization is daunting to say the very least. Please read the history of these proposals in the mailing list archives before posting this idea. Furthermore, be prepared to be challenged to offer a working prototype.

All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/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>.