# 5.3.归类

## 5.3.1. `CATEGORIES`

当一个软件包被创建时，它被放置在 /usr/ports/packages/All 目录下，并且从 /usr/ports/packages 的一个或多个子目录创建链接。这些子目录的名称由变量 CATEGORIES 指定。这样做旨在使用户在浏览 FTP 站点或 CDROM 上的软件包堆时更加方便。请查看当前的分类列表，并选择适合 port 的分类。

该列表还确定了 ports 树中导入 port 的位置。如果这里有多于一个类别，则 port 文件必须放在以第一个类别名称命名的子目录中。有关如何选择正确类别的更多讨论，请参见下文。

## 5.3.2. 当前类别列表

这是当前 port 类别列表。用星号标记（ \* ）的是虚拟类别 - 在 ports 树中没有相应子目录的类别。它们仅用作辅助类别，仅供搜索目的使用。

| 分类                      | 说明                                                              | 备注                                                                               |
| ----------------------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **accessibility**       | 帮助残障用户的 Port。                                                   |                                                                                  |
| **afterstep**`*`        | 支持 [AfterStep](http://www.afterstep.org/) 窗口管理器的 Port。          |                                                                                  |
| **arabic**              | 阿拉伯语语言支持。                                                       |                                                                                  |
| **archivers**           | 压缩与归档工具。                                                        |                                                                                  |
| **astro**               | 天文学相关的 Port。                                                    |                                                                                  |
| **audio**               | 音频支持。                                                           |                                                                                  |
| **benchmarks**          | 基准测试工具。                                                         |                                                                                  |
| **biology**             | 生物学相关的软件。                                                       |                                                                                  |
| **cad**                 | 计算机辅助设计工具。                                                      |                                                                                  |
| **chinese**             | 中文语言支持。                                                         |                                                                                  |
| **comms**               | 通信软件。                                                           | 主要是用于与串口通信的软件。                                                                   |
| **converters**          | 字符编码转换工具。                                                       |                                                                                  |
| **databases**           | 数据库相关的软件。                                                       |                                                                                  |
| **deskutils**           | 曾经在计算机发明之前属于桌面上的工具。                                             |                                                                                  |
| **devel**               | 开发工具。                                                           | 不要仅仅因为是库文件就把它们放在这个分类下。除非它们真正不属于其他分类，否则不应放在此分类。                                   |
| **dns**                 | 与 DNS 相关的软件。                                                    |                                                                                  |
| **docs**`*`             | FreeBSD 文档的元 Port。                                              |                                                                                  |
| **editors**             | 一般文本编辑器。                                                        | 专用编辑器应放在特定工具的分类中。例如，数学公式编辑器应放在 **math** 分类中，并将 **editors** 作为第二分类。               |
| **education**`*`        | 与教育相关的软件。                                                       | 包括主要或大部分设计用于帮助用户学习特定主题或进行一般学习的应用程序、工具或游戏。还包括课程编写应用程序、课程交付应用程序以及课堂或学校管理应用程序。      |
| **elisp**`*`            | Emacs-lisp 的 Port。                                              |                                                                                  |
| **emulators**           | 其他操作系统的模拟器。                                                     | 终端模拟器不应放在此分类中。基于 X 的模拟器应放入 **x11** 分类，基于文本的模拟器应放入 **comms** 或 **misc**，具体取决于功能。  |
| **enlightenment**`*`    | 与 Enlightenment 窗口管理器相关的 Port。                                  |                                                                                  |
| **finance**             | 与货币、金融相关的应用程序。                                                  |                                                                                  |
| **french**              | 法语语言支持。                                                         |                                                                                  |
| **ftp**                 | FTP 客户端和服务器工具。                                                  | 如果 Port 同时支持 FTP 和 HTTP，应将其放入 **ftp** 分类，并加上 **www** 作为第二分类。                     |
| **games**               | 游戏。                                                             |                                                                                  |
| **geography**`*`        | 与地理相关的软件。                                                       |                                                                                  |
| **german**              | 德语语言支持。                                                         |                                                                                  |
| **gnome**`*`            | 来自 [GNOME](https://www.gnome.org/) 项目的 Port。                    |                                                                                  |
| **gnustep**`*`          | 与 GNUstep 桌面环境相关的软件。                                            |                                                                                  |
| **graphics**            | 图形工具。                                                           |                                                                                  |
| **hamradio**`*`         | 业余无线电相关软件。                                                      |                                                                                  |
| **haskell**`*`          | 与 Haskell 语言相关的软件。                                              |                                                                                  |
| **hebrew**              | 希伯来语语言支持。                                                       |                                                                                  |
| **hungarian**           | 匈牙利语语言支持。                                                       |                                                                                  |
| **irc**                 | 互联网中继聊天工具。                                                      |                                                                                  |
| **japanese**            | 日语语言支持。                                                         |                                                                                  |
| **java**                | 与 Java™ 语言相关的软件。                                                | **java** 分类不应是 Port 唯一的分类。除非是直接与 Java 语言相关的 Port，否则不建议使用 **java** 作为 Port 的主要分类。 |
| **kde**`*`              | 来自 [KDE](https://www.kde.org/) 项目的 Port（通用）。                    |                                                                                  |
| **kde-applications**`*` | 来自 [KDE](https://www.kde.org/) 项目的应用程序。                         |                                                                                  |
| **kde-frameworks**`*`   | [KDE](https://www.kde.org/) 项目的 Qt 编程附加库。                       |                                                                                  |
| **kde-plasma**`*`       | 来自 [KDE](https://www.kde.org/) 项目的桌面环境。                         |                                                                                  |
| **kld**`*`              | 可加载的内核模块。                                                       |                                                                                  |
| **korean**              | 韩语语言支持。                                                         |                                                                                  |
| **lang**                | 编程语言。                                                           |                                                                                  |
| **linux**`*`            | Linux 应用程序和支持工具。                                                |                                                                                  |
| **lisp**`*`             | 与 Lisp 语言相关的软件。                                                 |                                                                                  |
| **mail**                | 邮件软件。                                                           |                                                                                  |
| **mate**`*`             | 与 MATE 桌面环境相关的 Port，GNOME 2 的一个分支。                              |                                                                                  |
| **math**                | 数值计算软件及其他数学相关工具。                                                |                                                                                  |
| **mbone**`*`            | MBone 应用程序。                                                     |                                                                                  |
| **misc**                | 杂项工具。                                                           | 不属于其他分类的工具。如果可能，尽量为 Port 找到更合适的分类，而不是放在 `misc` 中，因为该分类中的 Port 往往容易被忽视。           |
| **multimedia**          | 多媒体软件。                                                          |                                                                                  |
| **net**                 | 各种网络软件。                                                         |                                                                                  |
| **net-im**              | 即时通讯软件。                                                         |                                                                                  |
| **net-mgmt**            | 网络管理软件。                                                         |                                                                                  |
| **net-p2p**             | 点对点网络应用。                                                        |                                                                                  |
| **net-vpn**`*`          | 虚拟私人网络应用。                                                       |                                                                                  |
| **news**                | USENET 新闻软件。                                                    |                                                                                  |
| **parallel**`*`         | 处理计算中的并行性的应用程序。                                                 |                                                                                  |
| **pear**`*`             | 与 Pear PHP 框架相关的 Port。                                          |                                                                                  |
| **perl5**`*`            | 需要 Perl 5 版本运行的 Port。                                           |                                                                                  |
| **plan9**`*`            | 来自 [Plan9](https://9p.io/wiki/plan9/Download/index.html) 的各种程序。 |                                                                                  |
| **polish**              | 波兰语语言支持。                                                        |                                                                                  |
| **ports-mgmt**          | 用于管理、安装和开发 FreeBSD Ports 和包的工具。                                 |                                                                                  |
| **portuguese**          | 葡萄牙语语言支持。                                                       |                                                                                  |
| **print**               | 打印软件。                                                           | 包括桌面出版工具（如预览器等）。                                                                 |
| **python**`*`           | 与 [Python](https://www.python.org/) 语言相关的软件。                    |                                                                                  |
| **ruby**`*`             | 与 [Ruby](https://www.ruby-lang.org/) 语言相关的软件。                   |                                                                                  |
| **rubygems**`*`         | [RubyGems](https://www.rubygems.org/) 包的 Port。                  |                                                                                  |
| **russian**             | 俄语语言支持。                                                         |                                                                                  |
| **scheme**`*`           | 与 Scheme 语言相关的软件。                                               |                                                                                  |
| **science**             | 不适合其他分类的科学相关 Ports，如 **astro**、**biology** 和 **math**。          |                                                                                  |
| **security**            | 安全工具。                                                           |                                                                                  |
| **shells**              | 命令行 Shell。                                                      |                                                                                  |
| **spanish**`*`          | 西班牙语语言支持。                                                       |                                                                                  |
| **sysutils**            | 系统工具。                                                           |                                                                                  |
| **tcl**`*`              | 使用 Tcl 运行的 Port。                                                |                                                                                  |
| **textproc**            | 文本处理工具。                                                         | 不包括桌面出版工具，这些应放入 **print** 分类。                                                    |
| **tk**`*`               | 使用 Tk 运行的 Port。                                                 |                                                                                  |
| **ukrainian**           | 乌克兰语语言支持。                                                       |                                                                                  |
| **vietnamese**          | 越南语语言支持。                                                        |                                                                                  |
| **wayland**`*`          | 支持 Wayland 显示服务器的 Port。                                         |                                                                                  |
| **windowmaker**`*`      | 支持 Window Maker 窗口管理器的 Port。                                    |                                                                                  |
| **www**                 | 与万维网相关的软件。                                                      | HTML 语言支持也应归入此分类。                                                                |
| **x11**                 | X 窗口系统及其相关工具。                                                   | 该分类仅适用于直接支持窗口系统的软件。不要将常规 X 应用程序放入此分类。大多数应放入其他 **x11-\*** 子分类（见下文）。               |
| **x11-clocks**          | X11 时钟工具。                                                       |                                                                                  |
| **x11-drivers**         | X11 驱动程序。                                                       |                                                                                  |
| **x11-fm**              | X11 文件管理器。                                                      |                                                                                  |
| **x11-fonts**           | X11 字体和字体工具。                                                    |                                                                                  |
| **x11-servers**         | X11 服务器。                                                        |                                                                                  |
| **x11-themes**          | X11 主题。                                                         |                                                                                  |
| **x11-toolkits**        | X11 工具包。                                                        |                                                                                  |
| **x11-wm**              | X11 窗口管理器。                                                      |                                                                                  |
| **xfce**`*`             | 与 [Xfce](https://www.xfce.org/) 桌面环境相关的 Port。                   |                                                                                  |
| **zope**`*`             | [Zope](https://www.zope.org/) 支持。                               |                                                                                  |

## 5.3.3. 选择正确的类别

由于许多类别重叠，选择 port 的主要类别可能会很繁琐。有几条规则管辖着这个问题。以下是按优先顺序递减的优先级列表：

* 第一个类别必须是一个物理类别（见上文）。这是使包装工作的必要条件。之后可以混合使用虚拟类别和物理类别。
* 语言特定的类别总是首先出现。例如，如果 port 安装日语 X11 字体，那么 CATEGORIES 行将会是 japanese x11-fonts。
* 具体类别在不太具体的类别之前列出。例如，HTML 编辑器被列为 www 编辑器，而不是反过来。而且，当 port 属于 irc、mail、news、security 或 www 中的任何一个时，不要列出 net，因为 net 会隐式包含在内。
* x11 仅用作辅助类别，当主类别为自然语言时。特别是，不要在 X 应用程序的类别行中放置 x11。
* Emacs 模式与模式支持的应用程序放在同一个 ports 类别中，而不是在 editors 中。例如，用于编辑某些编程语言的源文件的 Emacs 模式放入 lang。
* Ports 安装可加载内核模块也在它们的 CATEGORIES 行中有虚拟类别 kld。这是通过添加 USES=kmod 自动处理的事项之一。
* 如果与其他非虚拟类别中没有出现 misc，则表示如果在 CATEGORIES 中有 misc 与其他内容，则可以安全删除 misc 并将 port 仅放置在另一个子目录中。
* 如果 port 真的没有其他适合的地方，请放入 misc。

如果类别没有明确定义，请在 bug 数据库中 port 提交时添加一条评论，以便在导入之前讨论。作为提交者，请发送一封邮件到 FreeBSD ports 邮件列表，以便我们可以首先讨论。太多情况下，新的 ports 被导入到错误的类别，然后立即移动。

## 5.3.4. 提出新分类

随着 Ports 的增长，引入了各种新分类。新分类可以是虚拟分类 - 即不在 ports 树中具有相应子目录的分类 - 或物理分类 - 即在 ports 树中具有相应子目录的分类。本节讨论了创建新物理分类涉及的问题。在提出新分类之前，请仔细阅读。

我们现有的做法是避免创建新的物理分类，除非逻辑上大量的 ports 应属于该分类，或者应属于该分类的 ports 是一个逻辑上独特且受到有限普遍兴趣的群体（例如，与口头人类语言有关的分类），或者最好两者兼而有之。

这样做的理由是，这样的变化会给所有跟踪 Ports Collection 变化的提交者和用户带来相当多的工作量。此外，拟议的类别变动似乎自然而然地会引起争议。（也许这是因为对于何时一个类别“太大”没有明确的共识，或者类别是否应该适合浏览（以及理想的类别数量是多少），等等。）

这是程序：

1. 在 FreeBSD ports 邮件列表上提出新类别。包括新类别的详细理由，包括为什么现有类别不够用，以及要移动的现有 ports 列表。（如果在 Bugzilla 中有适合该类别的新 ports，也将它们列出。）如果你是维护者和/或提交者，请提及，因为这可能有助于案例。
2. 参与讨论
3. 如果看起来支持这个想法，请提交包括理由和需要移动的现有 ports 列表的 PR。理想情况下，这个 PR 还会包括以下补丁：
   * 一旦它们被复制，为新的 ports 创建 Makefiles
   * 新类别的 Makefile
   * 旧类别的 ports 的 Makefile
   * 依赖旧 ports 的 ports 的 Makefiles
   * 对于额外的学分，请包括根据提交者指南中的程序需要更改的其他文件。
4. 由于它影响 ports 基础架构并涉及移动和修补许多 ports，还可能在构建集群上运行回归测试，因此请将 PR 分配给 Ports 管理团队<portmgr@FreeBSD.org>。
5. 如果该 PR 获得批准，一个 committer 需要按照提交者指南中概述的其余程序继续操作。

提议新建虚拟类别类似于上述过程，但涉及较少操作，因为不必移动任何 ports。在这种情况下，将包括在 PR 中的唯一补丁是那些将新类别添加到受影响 ports 的 CATEGORIES 中。

## 5.3.5. 提议重新组织所有类别

有时候有人提议用 2 级结构或其他一些关键字结构重新组织类别。到目前为止，这些提议都没有任何进展，因为虽然很容易提出，但要将现有的 ports 整体重新组织的工作量令人望而却步。在发布这个想法之前，请阅读邮件列表存档中关于这些提议的历史。此外，请准备好接受挑战，以提供一个工作原型。
