diff options
Diffstat (limited to 'documentation/content/zh-cn/books/porters-handbook/porting-dads/chapter.adoc')
-rw-r--r-- | documentation/content/zh-cn/books/porters-handbook/porting-dads/chapter.adoc | 2772 |
1 files changed, 2772 insertions, 0 deletions
diff --git a/documentation/content/zh-cn/books/porters-handbook/porting-dads/chapter.adoc b/documentation/content/zh-cn/books/porters-handbook/porting-dads/chapter.adoc new file mode 100644 index 0000000000..a31a409b40 --- /dev/null +++ b/documentation/content/zh-cn/books/porters-handbook/porting-dads/chapter.adoc @@ -0,0 +1,2772 @@ +--- +title: 第 12 章 该做什么和不该做什么 +prev: books/porters-handbook/security +next: books/porters-handbook/porting-samplem +--- + +[[porting-dads]] += 该做什么和不该做什么 +:doctype: book +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:source-highlighter: rouge +:experimental: +:skip-front-matter: +:xrefstyle: basic +:relfileprefix: ../ +:outfilesuffix: +:sectnumoffset: 12 +:toc-title: 目录 +:table-caption: 表 +:figure-caption: 图 +:example-caption: 例 + +include::shared/mirrors.adoc[] +include::shared/authors.adoc[] +include::shared/releases.adoc[] +include::shared/zh-cn/mailing-lists.adoc[] +include::shared/zh-cn/teams.adoc[] +include::shared/zh-cn/urls.adoc[] + +toc::[] + +[[dads-intro]] +== 介绍 + +这里是一些在移植软件时可能会遇到的常见问题。 您应按照这个列表检查自己的 port, 同样地, 您也可以帮助检查 http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query[PR 数据库] 中由其它人提交的 port。 请按照在 link:{contributing}#CONTRIB-GENERAL[问题报告和一般性注释] 中介绍的方法提交您的看法。 帮助检查 PR 数据库中的 ports 即能够帮助我们更快地 commit 它们, 也能证明您清楚地了解如何完成这些工作。 + +[[porting-wrkdir]] +== `WRKDIR` (联编时使用的临时目录) + +任何时候都不要在 `WRKDIR` 以外的位置写文件。 `WRKDIR` 是在 port 联编过程中唯一的一处一定可写的地方 (参见 link:{handbook}#PORTS-CD[如何从 CDROM 安装 port] 以了解从只读的目录中联编和安装 port 的例子)。 如果您需要改变 [.filename]##pkg-*## 文件, 请按照 <<porting-pkgfiles,重新定义某个变量>> 介绍的方法, 而不是覆盖它们来实现。 + +[[porting-wrkdirprefix]] +== `WRKDIRPREFIX` (用于联编的临时目录的父目录名) + +一定要确保您的 port 尊重 `WRKDIRPREFIX` 的设置。 绝大多数 port 并不需要担心这个。 具体说来, 当引用其它 port 的 `WRKDIR` 时, 需要注意正确的位置应该是 [.filename]#WRKDIRPREFIXPORTSDIR/subdir/name/work# 而不是 [.filename]#PORTSDIR/subdir/name/work# 或 [.filename]#.CURDIR/../../subdir/name/work#, 或别的什么。 + +另外, 如果您自行定义了 `WRKDIR`, 也要把 `${WRKDIRPREFIX}${.CURDIR}` 放到前面。 + +[[porting-versions]] +== 区分不同的操作系统, 以及 OS 的版本 + +在不同版本的 Unix 下可能需要对代码进行一些修改或增加少许编译选项, 才能够正确地编译和运行。 如果您需要根据一些条件来对代码进行修改, 请尽可能让这些修改通用, 这样, 我们就能够将这些代码移植回更早的 FreeBSD 系统, 并交叉移植到其它 BSD 系统, 例如来自 CSRG 的 4.4BSD, BSD/386, 386BSD, NetBSD 和 OpenBSD。 + +推荐的获得 4.3BSD/Reno (1990) 以及更新版本 BSD 代码版本号的方式, 是使用 http://cvsweb.freebsd.org/src/sys/sys/param.h[sys/param.h] 中所定义的 `BSD` 宏的值。 一般来说这个文件已经被引用了; 如果没有的话, 增加下述代码: + +[.programlisting] +.... +#if (defined(__unix__) || defined(unix)) && !defined(USG) +#include <sys/param.h> +#endif +.... + +到 [.filename]#.c# 文件中合适的地方。 我们相信所有定义了这两个符号的系统中, 都提供了 [.filename]#sys/param.h#。 如果您发现有不这样做的系统, 请通过致信 {freebsd-ports} 让我们了解这一情况。 + +另一种方法是使用 GNU Autoconf 风格的方式: + +[.programlisting] +.... +#ifdef HAVE_SYS_PARAM_H +#include <sys/param.h> +#endif +.... + +采用这种方法时, 不要忘了把 `-DHAVE_SYS_PARAM_H` 加到 [.filename]#Makefile# 中的 `CFLAGS` 里。 + +一旦引用了 [.filename]#sys/param.h#, 您就可以使用: + +[.programlisting] +.... +#if (defined(BSD) && (BSD >= 199103)) +.... + +来检测代码是否正在 4.3 Net2 代码基础, 或更新的系统上编译 (例如 FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 以及更高版本)。 + +使用: + +[.programlisting] +.... +#if (defined(BSD) && (BSD >= 199306)) +.... + +来检测代码是否正在 4.4 或更新的系统 (例如 FreeBSD 2.x, 4.4, NetBSD 1.0、 BSD/386 2.0 或更高版本)。 + +对于 4.4BSD-Lite2 代码系来说, `BSD` 宏的值应该是 `199506`。 这里只是作为信息提供, 您不应使用它来区分基于 4.4-Lite 的 FreeBSD 和基于 4.4-Lite2 的版本。 这些情况下, 您应使用 {freebsd} 宏。 + +保守地使用: + +* {freebsd} 在所有版本的 FreeBSD 中皆有定义。 如果您正进行的修改 _只_ 影响 FreeBSD, 则应使用这个宏。 类似 `sys_errlist[]` 之于 `strerror()` 这样的移植问题是伯克利代码系公用的, 而并非 FreeBSD 所专有。 +* 在 FreeBSD 2.x 中, {freebsd} 定义为 `2`。 更早版本中, 它曾经是 `1`。 新的版本都会在主要的版本号变化时变更它。 +* 如果您需要区分 FreeBSD 1.x 系统和 FreeBSD 2.x 及更高版本的区别, 通常应使用前述的 `BSD` 宏来进行。 如果事实上需要一个 FreeBSD 专有的修改 (例如, 在使用 `ld` 时需要特殊的共享库选项), 则可以用 {freebsd} 和 #if {freebsd} > 1 来检测 FreeBSD 2.x 和新系统上的变化。 如果需要更细粒度地检测 FreeBSD 2.0-RELEASE 之后版本的变化, 则可以使用: ++ +[.programlisting] +.... +#if __FreeBSD__ >= 2 +#include <osreldate.h> +# if __FreeBSD_version >= 199504 + /* 适用于 2.0.5+ 版本的代码 */ +# endif +#endif +.... + +在已有的数百个 port 中, 只有一两个应该使用 {freebsd}。 早期的 port 在不适当的地方使用了它并引发问题, 并不意味着您也必定如此。 + +[[freebsd-versions]] +== __FreeBSD_version 值 + +下面是在 http://cvsweb.freebsd.org/src/sys/sys/param.h[sys/param.h]`__FreeBSD_version` 中定义的值及其意义的列表, 这里给出以方便您查阅: + +.__FreeBSD_version 值 +[cols="1,1,1", frame="none", options="header"] +|=== +| 值 +| 日期 +| 版本 + +|119411 +| +|2.0-RELEASE + +|199501, 199503 +|March 19, 1995 +|2.1-CURRENT + +|199504 +|April 9, 1995 +|2.0.5-RELEASE + +|199508 +|August 26, 1995 +|2.1 之前的 2.2-CURRENT + +|199511 +|November 10, 1995 +|2.1.0-RELEASE + +|199512 +|November 10, 1995 +|2.1.5 之前的 2.2-CURRENT + +|199607 +|July 10, 1996 +|2.1.5-RELEASE + +|199608 +|July 12, 1996 +|2.1.6 之前的 2.2-CURRENT + +|199612 +|November 15, 1996 +|2.1.6-RELEASE + +|199612 +| +|2.1.7-RELEASE + +|220000 +|February 19, 1997 +|2.2-RELEASE + +|(not changed) +| +|2.2.1-RELEASE + +|(无变化) +| +|在 2.2.1-RELEASE 之后的 2.2-STABLE + +|221001 +|April 15, 1997 +|texinfo-3.9 之后的 2.2-STABLE + +|221002 +|April 30, 1997 +|top 之后的 2.2-STABLE + +|222000 +|May 16, 1997 +|2.2.2-RELEASE + +|222001 +|May 19, 1997 +|2.2.2-RELEASE 之后的 2.2-STABLE + +|225000 +|October 2, 1997 +|2.2.5-RELEASE + +|225001 +|November 20, 1997 +|2.2.5-RELEASE 之后的 2.2-STABLE + +|225002 +|December 27, 1997 +|合并 ldconfig -R 之后的 2.2-STABLE + +|226000 +|March 24, 1998 +|2.2.6-RELEASE + +|227000 +|July 21, 1998 +|2.2.7-RELEASE + +|227001 +|July 21, 1998 +|2.2.7-RELEASE 之后的 2.2-STABLE + +|227002 +|September 19, 1998 +|man:semctl[2] 修改之后的 2.2-STABLE + +|228000 +|November 29, 1998 +|2.2.8-RELEASE + +|228001 +|November 29, 1998 +|2.2.8-RELEASE 之后的 2.2-STABLE + +|300000 +|February 19, 1996 +|man:mount[2] 修改之前的 3.0-CURRENT + +|300001 +|September 24, 1997 +|man:mount[2] 修改之后的 3.0-CURRENT + +|300002 +|June 2, 1998 +|man:semctl[2] 修改之后的 3.0-CURRENT + +|300003 +|June 7, 1998 +|ioctl 参数变化之后的 3.0-CURRENT + +|300004 +|September 3, 1998 +|ELF 变换之后的 3.0-CURRENT + +|300005 +|October 16, 1998 +|3.0-RELEASE + +|300006 +|October 16, 1998 +|3.0-RELEASE 之后的 3.0-CURRENT + +|300007 +|January 22, 1999 +|3/4切分之后的 3.0-STABLE + +|310000 +|February 9, 1999 +|3.1-RELEASE + +|310001 +|March 27, 1999 +|3.1-RELEASE 之后的 3.1-STABLE + +|310002 +|April 14, 1999 +|C++ 构建/析构函数顺序变化之后的 3.1-STABLE + +|320000 +| +|3.2-RELEASE + +|320001 +|May 8, 1999 +|3.2-STABLE + +|320002 +|August 29, 1999 +|二进制不兼容的 IPFW 和 socket 变化之后的 3.2-STABLE + +|330000 +|September 2, 1999 +|3.3-RELEASE + +|330001 +|September 16, 1999 +|3.3-STABLE + +|330002 +|November 24, 1999 +|libc 中加入 man:mkstemp[3] 之后的 3.3-STABLE + +|340000 +|December 5, 1999 +|3.4-RELEASE + +|340001 +|December 17, 1999 +|3.4-STABLE + +|350000 +|June 20, 2000 +|3.5-RELEASE + +|350001 +|July 12, 2000 +|3.5-STABLE + +|400000 +|January 22, 1999 +|3/4切分之后的 4.0-CURRENT + +|400001 +|February 20, 1999 +|修改动态连接器处理方式之后的 4.0-CURRENT + +|400002 +|March 13, 1999 +|C++ 构建/析构函数顺序变化之后的 + +|400003 +|March 27, 1999 +|提供 man:dladdr[3] 之后的 4.0-CURRENT + +|400004 +|April 5, 1999 +|修正了 __deregister_frame_info 的 4.0-CURRENT (也表示在 EGCS 1.1.2 集成之后的 4.0-CURRENT) + +|400005 +|April 27, 1999 +|man:suser[9] API 变化之后的 4.0-CURRENT (也表示 newbus 之后的 4.0-CURRENT) + +|400006 +|May 31, 1999 +|cdevsw 注册机制改变之后的 4.0-CURRENT + +|400007 +|June 17, 1999 +|加入了 socket 级凭据的 so_cred 之后的 4.0-CURRENT + +|400008 +|June 20, 1999 +|在 libc_r 中加入 poll 系统调用接口之后的 4.0-CURRENT + +|400009 +|July 20, 1999 +|将内核中 `dev_t` 类型改为 `struct specinfo` 指针之后的 4.0-CURRENT + +|400010 +|September 25, 1999 +|修正了一处 man:jail[2] 漏洞之后的 4.0-CURRENT + +|400011 +|September 29, 1999 +|`sigset_t` 数据类型改变之后的 4.0-CURRENT + +|400012 +|November 15, 1999 +|切换到 GCC 2.95.2 编译器之后的 4.0-CURRENT + +|400013 +|December 4, 1999 +|加入了可插的 linux模式 ioctl 处理程序后的 4.0-CURRENT + +|400014 +|January 18, 2000 +|引入 OpenSSL 之后的 4.0-CURRENT + +|400015 +|January 27, 2000 +|GCC 2.95.2 中 ABI 默认值从 -fvtable-thunks 改为 -fno-vtable-thunks 之后的 4.0-CURRENT + +|400016 +|February 27, 2000 +|引入 OpenSSH 之后的 4.0-CURRENT + +|400017 +|March 13, 2000 +|4.0-RELEASE + +|400018 +|March 17, 2000 +|4.0-RELEASE 之后的 4.0-STABLE + +|400019 +|May 5, 2000 +|引入延迟校验和之后的 4.0-STABLE + +|400020 +|June 4, 2000 +|将 libxpg4 的代码并入 libc 之后的 4.0-STABLE + +|400021 +|July 8, 2000 +|Binutils 升级到 2.10.0 之后的 4.0-STABLE, ELF 标志变化, 以及将 tcsh 引入基本系统 + +|410000 +|July 14, 2000 +|4.1-RELEASE + +|410001 +|July 29, 2000 +|4.1-RELEASE 之后的 4.1-STABLE + +|410002 +|September 16, 2000 +|man:setproctitle[3] 从 libutil 移入 libc 之后的 4.1-STABLE + +|411000 +|September 25, 2000 +|4.1.1-RELEASE + +|411001 +| +|4.1.1-RELEASE 之后的 4.1.1-STABLE + +|420000 +|October 31, 2000 +|4.2-RELEASE + +|420001 +|January 10, 2001 +|合并 libgcc.a 和 libgcc_r.a, 并修改了相关的 GCC 连接方式之后的 4.2-STABLE + +|430000 +|March 6, 2001 +|4.3-RELEASE + +|430001 +|May 18, 2001 +|引入 wint_t 之后的 4.3-STABLE + +|430002 +|July 22, 2001 +|PCI 电源状态 API 合并之后的 4.3-STABLE + +|440000 +|August 1, 2001 +|4.4-RELEASE + +|440001 +|October 23, 2001 +|引入 d_thread_t 之后的 4.4-STABLE + +|440002 +|November 4, 2001 +|mount 结构改变之后的 4.4-STABLE (影响文件系统 kld) + +|440003 +|December 18, 2001 +|用户态部分的 smbfs 被引入之后的 4.4-STABLE + +|450000 +|December 20, 2001 +|4.5-RELEASE + +|450001 +|February 24, 2002 +|usb 结构元素改名之后的 4.5-STABLE + +|450004 +|April 16, 2002 +|在 man:rc.conf[5] 变量 `sendmail_enable` 默认值改为 `NONE` 之后的 4.5-STABLE + +|450005 +|April 27, 2002 +|默认将 XFree86 4 用于预编译包联编之后的 4.5-STABLE + +|450006 +|May 1, 2002 +|accept 过滤器修正了安全问题并且不再会轻易被 DoS 之后的 4.5-STABLE + +|460000 +|June 21, 2002 +|4.6-RELEASE + +|460001 +|June 21, 2002 +|修正了 man:sendfile[2] 以吻合文档, 而不再根据发出的头计算发出数据量之后的 4.6-STABLE + +|460002 +|July 19, 2002 +|4.6.2-RELEASE + +|460100 +|June 26, 2002 +|4.6-STABLE + +|460101 +|June 26, 2002 +|MFC `sed -i` 之后的 4.6-STABLE + +|460102 +|September 1, 2002 +|MFC 许多 pkg_install 新特性之后的 4.6-STABLE + +|470000 +|October 8, 2002 +|4.7-RELEASE + +|470100 +|October 9, 2002 +|4.7-STABLE + +|470101 +|November 10, 2002 +|开始生成 __std{in,out,err}p 引用, 而不是 __sF。 这将 std{in,out,err} 从编译时表达式变成了运行时值。 + +|470102 +|January 23, 2003 +|MFC mbuf 相关的将 m_aux mbuf 改为 m_tag 的修改之后的 4.7-STABLE + +|470103 +|February 14, 2003 +|OpenSSL 升级到 0.9.7 之后的 4.7-STABLE + +|480000 +|March 30, 2003 +|4.8-RELEASE + +|480100 +|April 5, 2003 +|4.8-STABLE + +|480101 +|May 22, 2003 +|man:realpath[3] 变为线程安全的之后的 4.8-STABLE + +|480102 +|August 10, 2003 +|对 twe 的 3ware API 修改之后的 4.8-STABLE + +|490000 +|October 27, 2003 +|4.9-RELEASE + +|490100 +|October 27, 2003 +|4.9-STABLE + +|490101 +|January 8, 2004 +|kinfo_eproc 中加入 e_sid 之后的 4.9-STABLE + +|490102 +|February 4, 2004 +|MFC rtld 的 libmap 功能之后的 4.9-STABLE + +|491000 +|May 25, 2004 +|4.10-RELEASE + +|491100 +|June 1, 2004 +|4.10-STABLE + +|491101 +|August 11, 2004 +|MFC 20040629 版本的包维护工具之后的 4.10-STABLE + +|491102 +|November 16, 2004 +|修正了 VM 当解除 wire 不存在页面时的问题之后的 4.10-STABLE + +|492000 +|December 17, 2004 +|4.11-RELEASE + +|492100 +|December 17, 2004 +|4.11-STABLE + +|492101 +|April 18, 2006 +|将 libdata/ldconfig 目录加入 mtree 文件之后的 4.11-STABLE。 + +|500000 +|March 13, 2000 +|5.0-CURRENT + +|500001 +|April 18, 2000 +|加入 ELF 头字段, 并改变我们的 ELF 执行文件标记方式之后的 5.0-CURRENT + +|500002 +|May 2, 2000 +|kld 元数据修改之后的 5.0-CURRENT + +|500003 +|May 18, 2000 +|buf/bio 修改之后的 5.0-CURRENT + +|500004 +|May 26, 2000 +|binutils 升级后的 5.0-CURRENT + +|500005 +|June 3, 2000 +|将 libxpg4 并入 libc, 以及引入 TASKQ 之后的 5.0-CURRENT + +|500006 +|June 10, 2000 +|加入 AGP 接口之后的 5.0-CURRENT + +|500007 +|June 29, 2000 +|Perl 升级到 5.6.0 之后的 5.0-CURRENT + +|500008 +|July 7, 2000 +|KAME 代码升级到 2000/07 之后的 5.0-CURRENT + +|500009 +|July 14, 2000 +|ether_ifattach() 和 ether_detach() 修改之后的 5.0-CURRENT + +|500010 +|July 16, 2000 +|将 mtree 改为原先的默认值, 并使用 -L 来跟随符号连接之后的 5.0-CURRENT + +|500011 +|July 18, 2000 +|kqueue API 修改之后的 5.0-CURRENT + +|500012 +|September 2, 2000 +|man:setproctitle[3] 从 libutil 挪到 libc 之后的 5.0-CURRENT + +|500013 +|September 10, 2000 +|首个 SMPng commit 之后的 5.0-CURRENT + +|500014 +|January 4, 2001 +|<sys/select.h> 改为 <sys/selinfo.h> 之后的 5.0-CURRENT + +|500015 +|January 10, 2001 +|libgcc.a 和 libgcc_r.a 以及 GCC 连接方式变动之后的 5.0-CURRENT + +|500016 +|January 24, 2001 +|修改以允许 libc 和 libc_r 连接到一起, 不再鼓励使用 -pthread 之后的 5.0-CURRENT + +|500017 +|February 18, 2001 +|从 struct ucred 切换到 struct xucred 以便使内核为 mountd 等程序导出的 API 稳定下来之后的 5.0-CURRENT + +|500018 +|February 24, 2001 +|加入 CPUTYPE 用于 CPU 专用的优化的 make 变量之后的 5.0-CURRENT + +|500019 +|June 9, 2001 +|machine/ioctl_fd.h 改为 sys/fdcio.h 之后的 5.0-CURRENT + +|500020 +|June 15, 2001 +|locale 名称改变之后的 5.0-CURRENT + +|500021 +|June 22, 2001 +|引入 bzip2 之后的 5.0-CURRENT, 同时也代表删去了 S/Key + +|500022 +|July 12, 2001 +|加入 SSE 支持之后的 5.0-CURRENT + +|500023 +|September 14, 2001 +|KSE 第2个里程碑之后的 5.0-CURRENT + +|500024 +|October 1, 2001 +|d_thread_t 之后的 5.0-CURRENT, 同时 UUCP 被移入 ports + +|500025 +|October 4, 2001 +|64-位平台上的描述符和 creds API 变化之后的 5.0-CURRENT + +|500026 +|October 9, 2001 +|采用 XFree86 4 作为默认的预编译包, 以及加入 strnstr() libc 函数之后的 5.0-CURRENT + +|500027 +|October 10, 2001 +|加入 strcasestr() libc 函数之后的 5.0-CURRENT + +|500028 +|December 14, 2001 +|引入了用户态的 smbfs 组件之后的 5.0-CURRENT + +|(未予增加) +| +|加入了新的 C99 指定位宽整形变量之后的 5.0-CURRENT + +|500029 +|January 29, 2002 +|修改了 man:sendfile[2] 的返回值之后的 5.0-CURRENT + +|500030 +|February 15, 2002 +|引入适合表达文件标志的 `fflags_t` 类型之后的 5.0- + +|500031 +|February 24, 2002 +|usb 结构元素改名之后的 5.0-CURRENT + +|500032 +|March 16, 2002 +|引入 Perl 5.6.1 之后的 5.0-CURRENT + +|500033 +|April 3, 2002 +|man:rc.conf[5] 变量 `sendmail_enable` 默认值改为 `NONE` 之后的 5.0-CURRENT + +|500034 +|April 30, 2002 +|mtx_init() 增加了第三个参数之后的 5.0-CURRENT + +|500035 +|May 13, 2002 +|包含 Gcc 3.1 的 5.0-CURRENT + +|500036 +|May 17, 2002 +|在 /usr/src 中删去了 Perl 的 5.0-CURRENT + +|500037 +|May 29, 2002 +|加入 man:dlfunc[3] 之后的 5.0-CURRENT + +|500038 +|July 24, 2002 +|一些 struct sockbuf 的成员变为结构, 并重新排列顺序之后的 5.0-CURRENT + +|500039 +|September 1, 2002 +|引入 GCC 3.2.1 之后的 5.0-CURRENT。 头文件也不再使用 _BSD_FOO_T_ 而开始使用 _FOO_T_DECLARED。 这个值还可以用于作为一个包含使用 man:bzip2[1] 的预编译包支持的预期点。 + +|500040 +|September 20, 2002 +|以去掉对 disklabel 结构内容的依赖的名义, 对磁盘相关的函数进行了许多修改之后的 5.0-CURRENT + +|500041 +|October 1, 2002 +|libc 中加入 man:getopt_long[3] 之后的 5.0-CURRENT + +|500042 +|October 15, 2002 +|Binutils 2.13 升级, 包含了新的 FreeBSD 模拟, vec 以及输出格式之后的 5.0-CURRENT + +|500043 +|November 1, 2002 +|libc 中加入了弱 pthread_XXX 符号之后的 5.0-CURRENT, 从而淘汰了 libXThrStub.so。 5.0-RELEASE。 + +|500100 +|January 17, 2003 +|创建 RELENG_5_0 分支之后的 5.0-CURRENT + +|500101 +|February 19, 2003 +|<sys/dkstat.h> 变成了一个空文件, 不应再被引用 + +|500102 +|February 25, 2003 +|修改 d_mmap_t 接口之后的 5.0-CURRENT + +|500103 +|February 26, 2003 +|taskqueue_swi 以无全局锁的方式运行之后的 5.0-CURRENT, 同时还加入了使用全局锁的 taskqueue_swi_giant + +|500104 +|February 27, 2003 +|去掉了 cdevsw_add() 和 cdevsw_remove() 出现 MAJOR_AUTO 分配机制 + +|500105 +|March 4, 2003 +|采用新的 cdevsw 初始化方法之后的 5.0-CURRENT + +|500106 +|March 8, 2003 +|devstat_add_entry() 被 devstat_new_entry() 取代 + +|500107 +|March 15, 2003 +|修改 devstat 接口; 请参见 sys/sys/param.h 1.149 + +|500108 +|March 15, 2003 +|改变了 Token-Ring 接口 + +|500109 +|March 25, 2003 +|加入 vm_paddr_t + +|500110 +|March 28, 2003 +|将 man:realpath[3] 改为线程安全之后的 5.0-CURRENT + +|500111 +|April 9, 2003 +|man:usbhid[3] 与 NetBSD 同步之后的 5.0-CURRENT + +|500112 +|April 17, 2003 +|加入新的 NSS 实现, 以及 POSIX.1 getpw*_r, getgr*_r 函数之后的 5.0-CURRENT + +|500113 +|May 2, 2003 +|删去旧式 rc 系统之后的 5.0-CURRENT + +|501000 +|June 4, 2003 +|5.1-RELEASE. + +|501100 +|June 2, 2003 +|创建 RELENG_5_1 分支之后的 5.1-CURRENT + +|501101 +|June 29, 2003 +|改正 sigtimedwait(2) 和 sigwaitinfo(2) 语义之后的 5.1-CURRENT + +|501102 +|July 3, 2003 +|在 man:bus_dma_tag_create[9] 中加入了 lockfunc 和 lockfuncarg 字段之后的 5.1-CURRENT + +|501103 +|July 31, 2003 +|集成了 GCC 3.3.1-pre 20030711 之后的 5.1-CURRENT + +|501104 +|August 5, 2003 +|twe 中 3ware API 变化之后的 5.1-CURRENT + +|501105 +|August 17, 2003 +|允许动态连接 /bin 和 /sbin, 以及将某些库移动到 /lib 之后的 5.1-CURRENT + +|501106 +|September 8, 2003 +|增加内核级 Coda 6.x 支持之后的 5.1-CURRENT + +|501107 +|September 17, 2003 +|将 16550 UART 常量从 [.filename]#<dev/sio/sioreg.h># 挪到 [.filename]#<dev/ic/ns16550.h># 之后的 5.1-CURRENT。 此外, rtld 也从此无条件支持 libmap 功能 + +|501108 +|September 23, 2003 +|更新 PFIL_HOOKS API 之后的 5.1-CURRENT + +|501109 +|September 27, 2003 +|增加 kiconv(3) 之后的 5.1-CURRENT + +|501110 +|September 28, 2003 +|默认的 cdevsw open 和 close 操作变化之后的 5.1-CURRENT + +|501111 +|October 16, 2003 +|cdevsw 的布局变化之后的 5.1-CURRENT + +|501112 +|October 16, 2003 +|增加 kobj 多继承之后的 5.1-CURRENT + +|501113 +|October 31, 2003 +|修改 struct ifnet 中的 if_xname 之后的 5.1-CURRENT + +|501114 +|November 16, 2003 +|将 /bin 和 /sbin 改为动态连接之后的 5.1-CURRENT + +|502000 +|December 7, 2003 +|5.2-RELEASE + +|502010 +|February 23, 2004 +|5.2.1-RELEASE + +|502100 +|December 7, 2003 +|创建 RELENG_5_2 分支之后的 5.2-CURRENT + +|502101 +|December 19, 2003 +|libc 中加入了 __cxa_atexit/__cxa_finalize 两个函数之后的 5.2-CURRENT + +|502102 +|January 30, 2004 +|默认线程库从 libc_r 改为 libpthread 之后的 5.2-CURRENT + +|502103 +|February 21, 2004 +|设备驱动 API 大规模翻修之后的 5.2-CURRENT + +|502104 +|February 25, 2004 +|增加 getopt_long_only() 之后的 5.2-CURRENT + +|502105 +|March 5, 2004 +|C 的 NULL 定义改为 ((void *)0) 之后的 5.2-CURRENT, 这会产生更多的编译警告 + +|502106 +|March 8, 2004 +|pf 连入联编和安装过程之后的 5.2-CURRENT + +|502107 +|March 10, 2004 +|在 sparc64 上将 time_t 改为 64-位 值之后的 5.2-CURRENT + +|502108 +|March 12, 2004 +|在一些头文件修改以支持 Intel C/C++ 编译器, 以及让 execve(2) 更严格地符合 POSIX 之后的 5.2-CURRENT + +|502109 +|March 22, 2004 +|引入 bus_alloc_resource_any API 之后的 5.2-CURRENT + +|502110 +|March 27, 2004 +|加入 UTF-8 locale 之后的 5.2-CURRENT + +|502111 +|April 11, 2004 +|删去 getvfsent(3) API 之后的 5.2-CURRENT + +|502112 +|April 13, 2004 +|为 make(1) 增加 .warning 语句之后的 5.2-CURRENT + +|502113 +|June 4, 2004 +|所有串口设备都强制使用 ttyioctl() 之后的 5.2-CURRENT + +|502114 +|June 13, 2004 +|引入 ALTQ 框架之后的 5.2-CURRENT + +|502115 +|June 14, 2004 +|修改 sema_timedwait(9) 使其成功时返回 0, 失败时返回非 0 的错误代码之后的 5.2-CURRENT + +|502116 +|June 16, 2004 +|将内核 dev_t 改为指向 struct cdev * 的指针之后的 5.2-CURRENT + +|502117 +|June 17, 2004 +|将内核 udev_t 改为 dev_t 之后的 5.2-CURRENT + +|502118 +|June 17, 2004 +|为 clock_gettime(2) 和 clock_getres(2) 增加 CLOCK_VIRTUAL 和 CLOCK_PROF 支持之后的 5.2-CURRENT + +|502119 +|June 22, 2004 +|对网络接口复制进行全面修改之后的 5.2-CURRENT + +|502120 +|July 2, 2004 +|package 工具升级为 20040629 之后的 5.2-CURRENT + +|502121 +|July 9, 2004 +|不再将蓝牙代码标记为 i386 专用之后的 5.2-CURRENT + +|502122 +|July 11, 2004 +|引入 KDB 调试器框架之后的 5.2-CURRENT。 同时还引入了 DDB 作为后台, 以及 GDB 后台。 + +|502123 +|July 12, 2004 +|修改 VFS_ROOT 和 vflush 使其使用一个 struct thread 参数之后的 5.2-CURRENT。 struct kinfo_proc 增加了一个用户数据指针。 同时, 默认的 X 实现切换为 `xorg` + +|502124 +|July 24, 2004 +|将使用 rc.d 和传统脚本的 port 分别启动之后的 5.2-CURRENT + +|502125 +|July 28, 2004 +|取消前一修改之后的 5.2-CURRENT + +|502126 +|July 31, 2004 +|删除 kmem_alloc_pageable() 并引入 gcc 3.4.2 的 5.2-CURRENT + +|502127 +|August 2, 2004 +|修改 UMA 内核 API 允许构建函数和初始化失败之后的 5.2-CURRENT + +|502128 +|August 8, 2004 +|vfs_mount 签名和全局替换 suser(9) API 的 PRISON_ROOT 为 SUSER_ALLOWJAIL 之后的 5.2-CURRENT + +|503000 +|August 23, 2004 +|pfil API 修改之前的 5.3-BETA/RC + +|503001 +|September 22, 2004 +|5.3-RELEASE + +|503100 +|October 16, 2004 +|创建 RELENG_5_3 分支之后的 5.3-STABLE + +|503101 +|December 3, 2004 +|加入了 glibc 风格的 man:strftime[3] 填充选项的 5.3-STABLE + +|503102 +|February 13, 2005 +|MFC OpenBSD 的 nc(1) 之后的 5.3-STABLE + +|503103 +|February 27, 2005 +|在 MFC 了 [.filename]#<src/include/stdbool.h># 和 [.filename]#<src/sys/i386/include/_types.h># 用于兼容 GCC 和 Intel C/C++ 编译器的修正之后的 5.4-PRERELEASE + +|503104 +|February 28, 2005 +|MFC 了将 ifi_epoch 由 wall 时钟时间改为 uptime 之后的 5.4-PRERELEASE + +|503105 +|March 2, 2005 +|MFC 了 vswprintf(3) 中的 EOVERFLOW 检查的 5.4-PRERELEASE + +|504000 +|April 3, 2005 +|5.4-RELEASE. + +|504100 +|April 3, 2005 +|创建 RELENG_5_4 分支之后的 5.4-STABLE + +|504101 +|May 11, 2005 +|加大默认线程堆栈尺寸之后的 5.4-STABLE + +|504102 +|June 24, 2005 +|加入 sha256 之后的 5.4-STABLE + +|504103 +|October 3, 2005 +|MFC if_bridge 之后的 5.4-STABLE + +|504104 +|November 13, 2005 +|bsdiff 和 portsnap MFC 之后的 5.4-STABLE + +|504105 +|January 17, 2006 +|在 MFC 了 ldconfig_local_dirs 修改之后的 5.4-STABLE。 + +|505000 +|May 12, 2006 +|5.5-RELEASE. + +|505100 +|May 12, 2006 +|在创建 RELENG_5_5 分支之后的 5.5-STABLE + +|600000 +|August 18, 2004 +|6.0-CURRENT + +|600001 +|August 27, 2004 +|内核中永久性启用 PFIL_HOOKS 之后的 6.0-CURRENT + +|600002 +|August 30, 2004 +|最初将 ifi_epoch 加入 if_data 结构之后的 6.0-CURRENT。 此后不久即被撤销。 请不要使用这个值。 + +|600003 +|September 8, 2004 +|if_data 中再次加入 ifi_epoch 成员之后的 6.0-CURRENT + +|600004 +|September 29, 2004 +|将 struct inpcb 参数加入 pfil API 之后的 6.0-CURRENT + +|600005 +|October 5, 2004 +|newsyslog 加入了 "-d DESTDIR" 参数之后的 6.0-CURRENT + +|600006 +|November 4, 2004 +|加入了 glibc 风格的 man:strftime[3] 填充选项之后的 6.0-CURRENT + +|600007 +|December 12, 2004 +|加入了 802.11 框架更新之后的 6.0-CURRENT + +|600008 +|January 25, 2005 +|修改 VOP_*VOBJECT() 并为无全局锁的文件系统引入 MNTK_MPSAFE 标志之后的 6.0-CURRENT + +|600009 +|February 4, 2005 +|加入 cpufreq 框架和驱动之后的 6.0-CURRENT + +|600010 +|February 6, 2005 +|引入 OpenBSD 的 nc(1) 之后的 6.0-CURRENT + +|600011 +|February 12, 2005 +|删去并不存在的 SVID2 `matherr()` 支持之后的 6.0-CURRENT + +|600012 +|February 15, 2005 +|增大默认线程堆栈尺寸之后的 6.0-CURRENT + +|600013 +|February 19, 2005 +|增加了针对 [.filename]#<src/include/stdbool.h># 和 [.filename]#<src/sys/i386/include/_types.h># 的用于 Intel C/C++ 编译器的 GCC-兼容性修正。 + +|600014 +|February 21, 2005 +|修正了 vswprintf(3) 的 EOVERFLOW 检查之后的 6.0-CURRENT + +|600015 +|February 25, 2005 +|将 struct if_data 成员 ifi_epoch 从 wall 时钟时间改为 uptime 之后的 6.0-CURRENT + +|600016 +|February 26, 2005 +|修改 LC_CTYPE 磁盘格式之后的 6.0-CURRENT + +|600017 +|February 27, 2005 +|修改 NLS 编录磁盘格式之后的 6.0-CURRENT + +|600018 +|February 27, 2005 +|修改 LC_COLLATE 磁盘格式之后的 6.0-CURRENT + +|600019 +|February 28, 2005 +|将 acpica 头文件安装到 /usr/include + +|600020 +|March 9, 2005 +|为 send(2) API 加入了 MSG_NOSIGNAL + +|600021 +|March 17, 2005 +|在 cdevsw 上增加了一些字段 + +|600022 +|March 21, 2005 +|基本系统中删去了 gtar + +|600023 +|April 13, 2005 +|unix(4) 中加入了 LOCAL_CREDS, LOCAL_CONNWAIT 两个 socket 选项 + +|600024 +|April 19, 2005 +|加入了 man:hwpmc[4] 及其相关工具之后的 6.0-CURRENT + +|600025 +|April 26, 2005 +|加入 struct icmphdr 之后的 6.0-CURRENT + +|600026 +|May 3, 2005 +|pf 更新到了 3.7 + +|600027 +|May 6, 2005 +|引入了内核 libalias 和 ng_nat + +|600028 +|May 13, 2005 +|将 ttyname_r(3) 接口改为符合 POSIX 标准, 并通过 unistd.h 和 libc + +|600029 +|May 29, 2005 +|将 libpcap 升级为 v0.9.1 alpha 096 之后的 6.0-CURRENT + +|600030 +|June 5, 2005 +|引入 NetBSD 的 if_bridge(4) 之后的 6.0-CURRENT + +|600031 +|June 10, 2005 +|将 struct ifnet 从驱动的 softc 中拆出之后的 6.0-CURRENT。 + +|600032 +|July 11, 2005 +|引入了 libpcap v0.9.1 之后的 6.0-CURRENT。 + +|600033 +|July 25, 2005 +|所有自 RELENG_5 以来没有修改过的共享库的版本递增之后的 6.0-STABLE。 + +|600034 +|August 13, 2005 +|为 dev_clone 事件处理函数增加身份信息参数之后的 6.0-STABLE。 6.0-RELEASE。 + +|600100 +|November 1, 2005 +|6.0-RELEASE 之后的 6.0-STABLE + +|600101 +|December 21, 2005 +|将 local_startup 目录中的脚本集成到基本系统的 man:rcorder[8] 之后的 6.0-STABLE。 + +|600102 +|December 30, 2005 +|更新 ELF 类型和常量之后的 6.0-STABLE。 + +|600103 +|January 15, 2006 +|MFC 了 pidfile(3) API 之后的 6.0-STABLE。 + +|600104 +|January 17, 2006 +|在 MFC 了 ldconfig_local_dirs 修改之后的 6.0-STABLE。 + +|600105 +|February 26, 2006 +|在 csh(1) 中加入了 NLS 目录支持之后的 6.0-STABLE。 + +|601000 +|May 6, 2006 +|6.1-RELEASE + +|601100 +|May 6, 2006 +|6.1-RELEASE 之后的 6.1-STABLE。 + +|601101 +|June 22, 2006 +|引入 csup 之后的 6.1-STABLE。 + +|601102 +|July 11, 2006 +|更新了 iwi(4) 之后的 6.1-STABLE。 + +|601103 +|July 17, 2006 +|将域名解析函数更新至 BIND9, 并导出了可重入版本的 netdb 函数之后的 6.1-STABLE。 + +|601104 +|August 8, 2006 +|在 OpenSSL 中启用了 DSO (动态共享库) 支持之后的 6.1-STABLE。 + +|601105 +|September 2, 2006 +|由于 802.11 修正变动了 IEEE80211_IOC_STA_INFO ioctl API 之后的 6.1-STABLE。 + +|602000 +|November 15, 2006 +|6.2-RELEASE + +|602100 +|September 15, 2006 +|6.2-RELEASE 之后的 6.2-STABLE。 + +|602101 +|December 12, 2006 +|加入 Wi-Spy quirk 之后的 6.2-STABLE。 + +|602102 +|December 28, 2006 +|增加 pci_find_extcap() 之后的 6.2-STABLE。 + +|602103 +|January 16, 2007 +|MFC 了对 dlsym 进行修改, 使其在指定 dso 及其暗指的依赖中查找符号之后的 6.2-STABLE。 + +|602104 +|January 28, 2007 +|MFC 了 netgraph 节点 ng_deflate(4) 和 ng_pred1(4) 以及用于 ng_ppp(4) 节点的新压缩及加密模式之后的 6.2-STABLE。 + +|602105 +|February 20, 2007 +|MFC 了从 NetBSD 移植的 BSD 授权的 man:gzip[1] 之后的 6.2-STABLE。 + +|602106 +|March 31, 2007 +|MFC 了 PCI MSI 和 MSI-X 支持之后的 6.2-STABLE。 + +|602107 +|April 6, 2007 +|MFC 了包含宽字符支持的 ncurses 5.6 之后的 6.2-STABLE。 + +|602108 +|April 11, 2007 +|MFC 了实现 Linux SCSI SG 直通设备 API 子集的 CAM 'SG' 设备之后的 6.2-STABLE。 + +|602109 +|April 17, 2007 +|MFC 了 readline 5.2 patchset 002 之后的 6.2-STABLE。 + +|602110 +|May 2, 2007 +|MFC 了用于 amd64 和 i386 的 pmap_invalidate_cache()、 pmap_change_attr()、 pmap_mapbios()、 pmap_mapdev_attr()、 and pmap_unmapbios() 之后的 6.2-STABLE。 + +|602111 +|June 11, 2007 +|由于 MFC 了 BOP_BDFLUSH 导致文件系统模块 KBI 变化之后的 6.2-STABLE。 + +|602112 +|September 21, 2007 +|一系列 libutil(3) MFC 之后的 6.2-STABLE。 + +|602113 +|October 25, 2007 +|MFC 了宽字符和单字节 ctype 函数分拆之后的 6.2-STABLE。 新编译的引用了 ctype.h 的可执行文件, 可能会需要一个在旧系统上不存在的新增符号 __mb_sb_limit。 + +|602114 +|October 30, 2007 +|恢复了 ctype ABI 向前兼容性之后的 6.2-STABLE。 + +|602115 +|November 21, 2007 +|回退了宽字符和单字节 ctype 分拆之后的 6.2-STABLE。 + +|603000 +|November 25, 2007 +|6.3-RELEASE + +|603100 +|November 25, 2007 +|在 6.3-RELEASE 之后的 6.3-STABLE。 + +|603101 +|December 7, 2007 +|修正了 bit macro 的多字节支持之后的 6.3-STABLE。 + +|603102 +|April 24, 2008 +|为 flock 结构加入 l_sysid 之后的 6.3-STABLE。 + +|603103 +|May 27, 2008 +|MFC 了 `memrchr` 函数之后的 6.3-STABLE。 + +|603104 +|June 15, 2008 +|为 make(1) MFC `:u` 变量修饰符之后的 6.3-STABLE。 + +|604000 +|October 4, 2008 +|6.4-RELEASE + +|604100 +|October 4, 2008 +|6.4-RELEASE 之后的 6.4-STABLE。 + +|700000 +|July 11, 2005 +|7.0-CURRENT。 + +|700001 +|July 23, 2005 +|所有自 RELENG_5 以来没有修改过的共享库的版本递增之后的 7.0-CURRENT。 + +|700002 +|August 13, 2005 +|为 dev_clone 事件处理函数中增加身份信息参数之后的 7.0-CURRENT。 + +|700003 +|August 25, 2005 +|将 memmem(3) 加入 libc 之后的 7.0-CURRENT。 + +|700004 +|October 30, 2005 +|将 solisten(9) 改为接受一 backlog 参数之后的 7.0-CURRENT。 + +|700005 +|November 11, 2005 +|将 IFP2ENADDR() 改为返回一 IF_LLADDR() 指针之后的 7.0-CURRENT。 + +|700006 +|November 11, 2005 +|在 `struct ifnet` 中增加 `if_addr` 成员, 并删除 IFP2ENADDR() 之后的 7.0-CURRENT。 + +|700007 +|December 2, 2005 +|将 local_startup 目录中的脚本集成到基本系统的 man:rcorder[8] 之后的 7.0-CURRENT。 + +|700008 +|December 5, 2005 +|去掉 MNT_NODEV 挂接选项之后的 7.0-CURRENT。 + +|700009 +|December 19, 2005 +|对 ELF-64 类型和符号版本进行变更之后的 7.0-CURRENT。 + +|700010 +|December 20, 2005 +|增加 hostb 和 vgapci 驱动、 pci_find_extcap(), 并将 AGP 驱动改为不再影射 aperature 之后的 7.0-CURRENT。 + +|700011 +|December 31, 2005 +|除 Alpha 之外的所有平台上 tv_sec 改为 time_t 之后的 7.0-CURRENT。 + +|700012 +|January 8, 2006 +|修改 ldconfig_local_dirs 之后的 7.0-CURRENT。 + +|700013 +|January 12, 2006 +|在修改了 [.filename]#/etc/rc.d/abi# 以支持 [.filename]#/compat/linux/etc/ld.so.cache# 以某只读文件系统上的符号连接形式存在之后的 7.0-CURRENT。 + +|700014 +|January 26, 2006 +|引入 pts 之后的 7.0-CURRENT。 + +|700015 +|March 26, 2006 +|在引入 man:hwpmc[4] 的第 2 版 ABI 之后的 7.0-CURRENT。 + +|700016 +|April 22, 2006 +|在 libc 中加入了 man:fcloseall[3] 之后的 7.0-CURRENT。 + +|700017 +|May 13, 2006 +|删去 ip6fw 之后的 7.0-CURRENT。 + +|700018 +|July 15, 2006 +|引入了 snd_emu10kx 之后的 7.0-CURRENT。 + +|700019 +|July 29, 2006 +|引入了 OpenSSL 0.9.8b 之后的 7.0-CURRENT。 + +|700020 +|September 3, 2006 +|增加了 bus_dma_get_tag 函数之后的 7.0-CURRENT。 + +|700021 +|September 4, 2006 +|在引入了 libpcap 0.9.4 和 tcpdump 3.9.4 之后的 7.0-CURRENT。 + +|700022 +|September 9, 2006 +|在对 dlsym 进行修改, 使其在指定 dso 及其暗指的依赖中查找符号之后的 7.0-CURRENT。 + +|700023 +|September 23, 2006 +|为 OSSv4 混音器 API 加入新的声音 IOCTL 之后的 7.0-CURRENT。 + +|700024 +|September 28, 2006 +|汇入 OpenSSL 0.9.8d 之后的 7.0-CURRENT。 + +|700025 +|November 11, 2006 +|加入了 libelf 之后的 7.0-CURRENT。 + +|700026 +|November 26, 2006 +|对音效相关的 sysctl 进行大幅调整之后的 7.0-CURRENT。 + +|700027 +|November 30, 2006 +|加入 Wi-Spy quirk 之后的 7.0-CURRENT。 + +|700028 +|December 15, 2006 +|在 libc 中加入 sctp 调用之后的 7.0-CURRENT。 + +|700029 +|January 26, 2007 +|将 GNU man:gzip[1] 实现替换为从 NetBSD 移植的采用 BSD 授权版本之后的 7.0-CURRENT。 + +|700030 +|February 7, 2007 +|在 IPv4 多播转发代码中删去了 IPIP 隧道封装 (VIFF_TUNNEL) 之后的 7.0-CURRENT。 + +|700031 +|February 23, 2007 +|修改了 bus_setup_intr() (newbus) 之后的 7.0-CURRENT。 + +|700032 +|March 2, 2007 +|引入了 ipw(4) 和 iwi(4) 固件之后的 7.0-CURRENT。 + +|700033 +|March 9, 2007 +|在 ncurses 中引入了宽字符支持之后的 7.0-CURRENT。 + +|700034 +|March 19, 2007 +|修改了 insmntque()、 getnewvnode() 以及 vfs_hash_insert() 工作方式之后的 7.0-CURRENT。 + +|700035 +|March 26, 2007 +|增加 CPU 频率变动通知机制之后的 7.0-CURRENT。 + +|700036 +|April 6, 2007 +|引入了 ZFS 文件系统之后的 7.0-CURRENT。 + +|700037 +|April 8, 2007 +|新增了实现 Linux SCSI SG 直通设备 API 子集的 CAM 'SG' 设备之后的 7.0-CURRENT。 + +|700038 +|April 30, 2007 +|将 man:getenv[3]、 man:putenv[3]、 man:setenv[3] 和 man:unsetenv[3] 改为符合 POSIX 之后的 7.0-CURRENT。 + +|700039 +|May 1, 2007 +|回退了 700038 中的变动之后的 7.0-CURRENT。 + +|700040 +|May 10, 2007 +|在 libutil 中增加了 man:flopen[3] 之后的 7.0-CURRENT。 + +|700041 +|May 13, 2007 +|启用了符号版本, 并将 libthr 改为默认线程库之后的 7.0-CURRENT。 + +|700042 +|May 19, 2007 +|引入了 gcc 4.2.0 之后的 7.0-CURRENT。 + +|700043 +|May 21, 2007 +|将 RELENG_6 之后未修改过版本的共享库版本增加之后的 7.0-CURRENT。 + +|700044 +|June 7, 2007 +|将 vn_open()/VOP_OPEN() 的参数由文件描述符数组下标改为 struct file * 之后的 7.0-CURRENT。 + +|700045 +|June 10, 2007 +|修改 man:pam_nologin[8] 使其向 PAM 框架提供帐号管理功能而非身份验证功能之后的 7.0-CURRENT。 + +|700046 +|June 11, 2007 +|更新 802.11 无线支持之后的 7.0-CURRENT。 + +|700047 +|June 11, 2007 +|增加 TCP LRO 网络接口能力之后的 7.0-CURRENT。 + +|700048 +|June 12, 2007 +|在 IPv4 协议栈中加入了 RFC 3678 API 支持之后的 7.0-CURRENT。 先前 IP_MULTICAST_IF ioctl 的 RFC 1724 行为被删去; 0.0.0.0/8 不再能够用于指定接口索引下标, 而应使用 struct ipmreqn 代替。 + +|700049 +|July 3, 2007 +|引入 OpenBSD 4.1 的 pf 之后的 7.0-CURRENT。 + +|(not changed) +| +|为 FAST_IPSEC 增加 IPv6 支持, 删去 KAME IPSEC, 并将 FAST_IPSEC 更名为 IPSEC 之后的 7.0-CURRENT。 (未变动) + +|700050 +|July 4, 2007 +|将 setenv/putenv/等等调用, 从传统 BSD 改为 POSIX 标准之后的 7.0-CURRENT。 + +|700051 +|July 4, 2007 +|增加新的 mmap/lseek/等等这些系统调用之后的 7.0-CURRENT。 + +|700052 +|July 6, 2007 +|将 I4B 头文件移动到 include/i4b 之后的 7.0-CURRENT。 + +|700053 +|September 30, 2007 +|增加了 PCI domain 支持之后的 7.0-CURRENT。 + +|700054 +|October 25, 2007 +|MFC 了宽字符和单字节字符 ctype 分拆之后的 7.0-CURRENT。 + +|700055 +|October 28, 2007 +|7.0-RELEASE, 以及 MFC 了恢复对 FreeBSD 4/5/6 版本的 PCIOCGETCONF、 PCIOCREAD 和 PCIOCWRITE IOCTL ABI 向下兼容之后的 7.0-CURRENT, 这一变动导致 PCIOCGETCONF IOCTL 的 ABI 再次发生变化。 + +|700100 +|December 22, 2007 +|7.0-RELEASE 之后的 7.0-STABLE + +|700101 +|February 8, 2008 +|MFC m_collapse() 之后的 7.0-STABLE。 + +|700102 +|March 30, 2008 +|MFC kdb_enter_why() 之后的 7.0-STABLE。 + +|700103 +|April 10, 2008 +|为 flock 结构加入 l_sysid 之后的 7.0-STABLE。 + +|700104 +|April 11, 2008 +|在 procstat(1) MFC 之后的 7.0-STABLE。 + +|700105 +|April 11, 2008 +|在 MFC umtx 特性之后的 7.0-STABLE。 + +|700106 +|April 15, 2008 +|为 man:psm[4] MFC man:write[2] 支持之后的 7.0-STABLE。 + +|700107 +|April 20, 2008 +|为 man:fcntl[2] MFC F_DUP2FD 之后的 7.0-STABLE。 + +|700108 +|May 5, 2008 +|对 man:lockmgr[9] 做了一些修改之后的 7.0-STABLE, 在使用 man:lockmgr[9] 时必需包含 [.filename]#sys/lock.h#。 + +|700109 +|May 27, 2008 +|MFC 了 `memrchr` 函数之后的 7.0-STABLE。 + +|700110 +|August 5, 2008 +|MFC 了内核 NFS locked 客户端之后的 7.0-STABLE。 + +|700111 +|August 20, 2008 +|加入了对物理连续巨帧支持之后的 7.0-STABLE。 + +|700112 +|August 27, 2008 +|在 MFC 内核 DTrace 支持之后的 7.0-STABLE。 + +|701000 +|November 25, 2008 +|7.1-RELEASE + +|701100 +|November 25, 2008 +|7.1-RELEASE 之后的 7.1-STABLE。 + +|701101 +|January 10, 2009 +|合并了 `strndup` 之后的 7.1-STABLE。 + +|701102 +|January 17, 2009 +|加入了 cpuctl(4) 支持之后的 7.1-STABLE。 + +|701103 +|February 7, 2009 +|合并了 多/无-IPv4/v6 jail 之后的 7.1-STABLE。 + +|701104 +|February 14, 2009 +|在 struct mount 中保存了挂起属主, 以及在 struct vfsops 中引入了 vfs_susp_clean 方法之后的 7.1-STABLE。 + +|701105 +|March 12, 2009 +|对 kern.ipc.shmsegs sysctl 变量不兼容的修改, 以允许在 64bit 构架上分配更多的 SysV 共享内存段之后的 7.1-STABLE。 + +|701106 +|March 14, 2009 +|合并了一个对 POSIX semaphore 等待操作修正之后的 7.1-STABLE。 + +|702000 +|April 15, 2009 +|7.2-RELEASE + +|702100 +|April 15, 2009 +|7.2-RELEASE 之后的 7.2-STABLE。 + +|702101 +|May 15, 2009 +|ichsmb(4) 改为使用左邻接辅编址来保持与其它 SMBus 控制器驱动一致性之后的 7.2-STABLE。 + +|702102 +|May 28, 2009 +|MFC 了 `fdopendir` 函数之后的 7.2-STABLE。 + +|702103 +|June 06, 2009 +|MFC 了 PmcTools 之后的 7.2-STABLE。 + +|702104 +|July 14, 2009 +|MFC 了 `closefrom` 系统调用之后的 7.2-STABLE。 + +|702105 +|July 31, 2009 +|MFC 了 SYSVIPC ABI 改动之后的 7.2-STABLE。 + +|702106 +|September 14, 2009 +|MFC 了 x86 PAT 增强, 并新增了 d_mmap_single() 以及 scatter/gather 型 VM 对象类型之后的 7.2-STABLE。 + +|703000 +|February 9, 2010 +|7.3-RELEASE + +|703100 +|February 9, 2010 +|7.3-RELEASE 之后的 7.3-STABLE。 + +|704000 +|December 22, 2010 +|7.4-RELEASE + +|704100 +|December 22, 2010 +|7.4-RELEASE 之后的 7.4-STABLE。 + +|800000 +|October 11, 2007 +|8.0-CURRENT。 分拆了宽字符和单字节字符 ctype。 + +|800001 +|October 16, 2007 +|引入了 libpcap 0.9.8 和 tcpdump 3.9.8 之后的 8.0-CURRENT。 + +|800002 +|October 21, 2007 +|将 kthread_create() 系列函数改名为 kproc_create() 之后的 8.0-CURRENT。 + +|800003 +|October 24, 2007 +|恢复了对 FreeBSD 4/5/6 版本的 PCIOCGETCONF、 PCIOCREAD 和 PCIOCWRITE IOCTL ABI 向下兼容之后的 8.0-CURRENT, 这一变动导致 PCIOCGETCONF IOCTL 的 ABI 再次发生变化。 + +|800004 +|November 12, 2007 +|将 agp(4) 驱动从 src/sys/pci 挪到 src/sys/dev/agp 之后的 8.0-CURRENT。 + +|800005 +|December 4, 2007 +|http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/kern_mbuf.c#rev1.35[修改了 jumbo frame 分配器之后的] 8.0-CURRENT。 + +|800006 +|December 7, 2007 +|在给 man:hwpmc[4] 加入了 callgraph 捕捉功能后的 8.0-CURRENT + +|800007 +|December 25, 2007 +|kdb_enter() 增加 "why" 参数之后的 8.0-CURRENT。 + +|800008 +|December 28, 2007 +|在去除 LK_EXCLUPGRADE 选项后的 8.0-CURRENT。 + +|800009 +|January 9, 2008 +|引入 man:lockmgr_disown[9] 之后的 8.0-CURRENT。 + +|800010 +|January 10, 2008 +|修改 man:vn_lock[9] 原型之后的 8.0-CURRENT。 + +|800011 +|January 13, 2008 +|修改 man:VOP_LOCK[9] 和 man:VOP_UNLOCK[9] 原型之后的 8.0-CURRENT。 + +|800012 +|January 19, 2008 +|引入 man:lockmgr_recursed[9]、 man:BUF_RECURSED[9] 和 man:BUF_ISLOCKED[9] 并删除了 `BUF_REFCNT()` 之后的 8.0-CURRENT。 + +|800013 +|January 23, 2008 +|引入 "ASCII" 编码之后的 8.0-CURRENT。 + +|800014 +|January 24, 2008 +|修改 man:lockmgr[9] 并删除了 `lockcount()` 和 `LOCKMGR_ASSERT()` 之后的 8.0-CURRENT。 + +|800015 +|January 26, 2008 +|扩展了 man:fts[3] 数据结构之后的 8.0-CURRENT。 + +|800016 +|February 1, 2008 +|为 MEXTADD(9) 增加了一个参数之后的 8.0-CURRENT。 + +|800017 +|February 6, 2008 +|为 man:lockmgr[9] 引入 LK_NODUP 和 LK_NOWITNESS 选项后的 8.0-CURRENT。 + +|800018 +|February 8, 2008 +|引入 m_collapse 之后的 8.0-CURRENT。 + +|800019 +|February 9, 2008 +|为 sysctl 变量 kern.proc.filedesc 加入 当前工作目录,root 目录和 jail 目录支持之后的 8.0-CURRENT。 + +|800020 +|February 13, 2008 +|引入 man:lockmgr_assert[9] 之后的 8.0-CURRENT。 + +|800021 +|February 15, 2008 +|引入 man:lockmgr_args[9] 和移除 LK_INTERNAL 标志之后的 8.0-CURRENT。 + +|800022 +|(backed out) +|把 BSD man:ar[1] 作为系统默认的 ar 之后的 8.0-CURRENT。 + +|800023 +|February 25, 2008 +|修改了 man:lockstatus[9] 和 man:VOP_ISLOCKED[9]; 原型,特别时去掉 `struct thread` 参数之后的 8.0-CURRENT。 + +|800024 +|March 1, 2008 +|砍掉了 `lockwaiters` 和 `BUF_LOCKWAITERS` 函数, `brelvp` 的返回值从 void 修改成 int,并引入 man:lockinit[9] 新标志之后的 8.0-CURRENT。 + +|800025 +|March 8, 2008 +|为 man:fcntl[2] 引入 F_DUP2FD 之后的 8.0-CURRENT。 + +|800026 +|March 12, 2008 +|修改了 cv_broadcastpri 优先权参数之后的 8.0-CURRENT,比如 0 表示无优先权。 + +|800027 +|March 24, 2008 +|修改了 bpf 监测 ABI, 加入了 zerocopy bpf buffer 之后的 8.0-CURRENT。 + +|800028 +|March 26, 2008 +|为 flock 结构增加了 l_sysid 之后的 8.0-CURRENT。 + +|800029 +|March 28, 2008 +|重新整合了 `BUF_LOCKWAITERS` 函数并加入 man:lockmgr_waiters[9] 之后的 8.0-CURRENT。 + +|800030 +|April 1, 2008 +|引入 man:rw_try_rlock[9] 和 man:rw_try_wlock[9] 之后的 8.0-CURRENT。 + +|800031 +|April 6, 2008 +|引入 `lockmgr_rw` 和 `lockmgr_args_rw` 函数之后的 8.0-CURRENT。 + +|800032 +|April 8, 2008 +|实现了 openat 和相关的系统调用,为 man:open[2] 引入了 O_EXEC 标志,和提供了相应的 linux 兼容的系统调用之后的 8.0-CURRENT。 + +|800033 +|April 8, 2008 +|为 man:psm[4] 增加了原生的 man:write[2] 支持之后的 8.0-CURRENT。 现在任意命令可写入 [.filename]#/dev/psm%d# 并读出状态。 + +|800034 +|April 10, 2008 +|引入 `memrchr` 函数之后的 8.0-CURRENT。 + +|800035 +|April 16, 2008 +|引入 `fdopendir` 函数之后的 8.0-CURRENT + +|800036 +|April 20, 2008 +|无线部分转向 multi-bss (也叫做 vaps) 支持之后的 8.0-CURRENT。 + +|800037 +|May 9, 2008 +|加入多路由表支持 (也就是 setfib(1)、 stfib(2)) 后的 8.0-CURRENT。 + +|800038 +|May 26, 2008 +|删去了 netatm 和 ISDN4BSD 后的 8.0-CURRENT。 这个版本也表示增加了 Compact C Type (CTF) 工具。 + +|800039 +|June 14, 2008 +|移除 sgtty 之后的 8.0-CURRENT。 + +|800040 +|June 26, 2008 +|增加了内核级 NFS lockd 客户端的 8.0-CURRENT。 + +|800041 +|July 22, 2008 +|增加了 arc4random_buf(3) 和 arc4random_uniform(3) 之后的 8.0-CURRENT。 + +|800042 +|August 8, 2008 +|增加了 cpuctl(4) 之后的 8.0-CURRENT。 + +|800043 +|August 13, 2008 +|修改 bpf(4) 使用单一的设备节点而不是克隆之后的 8.0-CURRENT。 + +|800044 +|August 17, 2008 +|在提交了 vimage 项目第一步之后的 8.0-CURRENT。把全局变量重命名为虚拟化带 V_ 前缀并用宏映射到原来的全局名称。 + +|800045 +|August 20, 2008 +|引入 MPSAFE TTY 层之后的 8.0-CURRENT, 包括对相关驱动和工具的修改。 + +|800046 +|September 8, 2008 +|将 amd64 架构上 GDT 拆分到不同 CPU 之后的 8.0-CURRENT。 + +|800047 +|September 10, 2008 +|删去了 VSVTX、 VSGID 和 VSUID 之后的 8.0-CURRENT。 + +|800048 +|September 16, 2008 +|将内核中 NFS 挂接部分的代码改为能够通过 nmount() iovec, 而不再是大的 nfs_args 结构体作为参数之后的 8.0-CURRENT。 + +|800049 +|September 17, 2008 +|删去了 man:suser[9] 和 man:suser_cred[9] 之后的 8.0-CURRENT。 + +|800050 +|October 20, 2008 +|修改了缓冲存储器 API 之后的 8.0-CURRENT。 + +|800051 +|October 23, 2008 +|删去了 man:MALLOC[9] 和 man:FREE[9] 宏之后的 8.0-CURRENT。 + +|800052 +|October 28, 2008 +|引入了 accmode_t 和重新命名 VOP_ACCES 'a_mode' 为 a_accmode 之后的 8.0-CURRENT。 + +|800053 +|November 2, 2008 +|修改了 man:vfs_busy[9] 原型并引入了 MBF_NOWAIT 和 MBF_MNTLSTLOCK 标志之后的 8.0-CURRENT。 + +|800054 +|November 22, 2008 +|增加了 buf_ring、 内存栅以及 ifnet 函数, 以方便撰写支持多硬件传输队列的驱动, 以及无锁环形缓冲实现的驱动程序, 并更高效地管理包队列功能之后的 8.0-CURRENT。 + +|800055 +|November 27, 2008 +|引入了 man:hwpmc[4] 对于 Intel(TM) Core,Core2 和 Atom 的支持之后的 8.0-CURRENT。 + +|800056 +|November 29, 2008 +|引入了 multi-/no-IPv4/v6 jail 之后的 8.0-CURRENT。 + +|800057 +|December 1, 2008 +|将 ath hal 改为使用源代码之后的 8.0-CURRENT。 + +|800058 +|December 12, 2008 +|引入了 VOP_VPTOCNP 操作之后的 8.0-CURRENT。 + +|800059 +|December 15, 2008 +|引入了新的 arp-v2 重写之后的 8.0-CURRENT。 + +|800060 +|December 19, 2008 +|引入了 makefs 之后的 8.0-CURRENT。 + +|800061 +|January 15, 2009 +|引入了 TCP Appropriate Byte Counting 之后的 8.0-CURRENT。 + +|800062 +|January 28, 2009 +|删去了 minor()、 minor2unit()、 unit2minor() 等之后的 8.0-CURRENT。 + +|800063 +|February 18, 2009 +|在 GENERIC 配置中改为使用 USB2 栈之后的 8.0-CURRENT; 这个数值同时也标志新增了 fdevname(3)。 + +|800064 +|February 23, 2009 +|将 USB2 栈移动并替换 dev/usb 之后的 8.0-CURRENT。 + +|800065 +|February 26, 2009 +|在对 libmp(3) 中所有函数更名之后的 8.0-CURRENT。 + +|800066 +|February 27, 2009 +|更改了 USB devfs 管理和布局之后的 8.0-CURRENT。 + +|800067 +|February 28, 2009 +|加入了 getdelim(), getline(), stpncpy(), strnlen(), wcsnlen(), wcscasecmp(), 和 wcsncasecmp() 之后的 8.0-CURRENT。 + +|800068 +|March 2, 2009 +|在 usbhub devclass 更名为 uhub 之后的 8.0-CURRENT。 + +|800069 +|March 9, 2009 +|重命名 libusb20.so.1 为 libusb.so.1 之后的 8.0-CURRENT。 + +|800070 +|March 9, 2009 +|合并 IGMPv3 和 Source-Specific Multicast (SSM) 入 IPv4 栈之后的 8.0-CURRENT。 + +|800071 +|March 14, 2009 +|为 gcc 打上了在 c99 和 gnu99 模式中使用 C99 inline 语义补丁之后的 8.0-CURRENT。 + +|800072 +|March 15, 2009 +|移除了 IFF_NEEDSGIANT 标志; 不再支持非线程安全的网络设备驱动之后的 8.0-CURRENT。 + +|800073 +|March 18, 2009 +|实现了 rpath 动态字符替换之后的 8.0-CURRENT. + +|800074 +|March 24, 2009 +|引入了 tcpdump 4.0.0 和 libpcap 1.0.0 之后的 8.0-CURRENT。 + +|800075 +|April 6, 2009 +|修改了 structs vnet_net、 vnet_inet 和 vnet_ipfw 结构布局之后的 8.0-CURRENT。 + +|800076 +|April 9, 2009 +|为 dummynet 新增了延迟评估工具之后的 8.0-CURRENT。 + +|800077 +|April 14, 2009 +|删去了 VOP_LEASE() 和 vop_vector.vop_lease 之后的 8.0-CURRENT + +|800078 +|April 15, 2009 +|在 struct rt_metrics 和 struct rt_metrics_lite 中添加了 rt_weight 字段, 导致其结构发生变化之后的 8.0-CURRENT。 此后 RTM_VERSION 增加, 但又回退了。 + +|800079 +|April 15, 2009 +|在 struct route 和 struct_in6 中添加了 struct llentry 指针之后的 8.0-CURRENT。 + +|800080 +|April 15, 2009 +|改变了 struct inpcb 布局之后的 8.0-CURRENT。 + +|800081 +|April 19, 2009 +|改变了 malloc_type 布局之后的 8.0-CURRENT。 + +|800082 +|April 21, 2009 +|改变了 struct ifnet 布局, 并增加了 if_ref() 和 if_rele() 引用计数维护功能之后的 8.0-CURRENT。 + +|800083 +|April 22, 2009 +|实现了底层蓝牙 HCI API 之后的 8.0-CURRENT。 + +|800084 +|April 29, 2009 +|修改了 IPv6 SSM 和 MLDv2 之后的 8.0-CURRENT。 + +|800085 +|April 30, 2009 +|启用了包括一个活跃映像的 VIMAGE 内核支持之后的 8.0-CURRENT。 + +|800086 +|May 8, 2009 +|为 patch(1) 增加任意长输入行支持之后的 8.0-CURRENT。 + +|800087 +|May 11, 2009 +|修改了一些 VFS KPI 之后的 8.0-CURRENT。 VFS 的 FSD 部分中删去了线程参数。 `VFS_*` 函数并不需要这些上下文信息, 因为它总是与 `curthread` 相关。 在某些特殊情况中, 则保留了原先的行为。 + +|800088 +|May 20, 2009 +|对 net80211 监视模式进行调整之后的 8.0-CURRENT。 + +|800089 +|May 23, 2009 +|增加了 UDP 控制块支持之后的 8.0-CURRENT。 + +|800090 +|May 23, 2009 +|将网络接口克隆虚拟化之后的 8.0-CURRENT。 + +|800091 +|May 27, 2009 +|增加了层次式 jail 并取消全局 securelevel 之后的 8.0-CURRENT。 + +|800092 +|May 29, 2009 +|修改了 `sx_init_flags()` KPI 之后的 8.0-CURRENT。 [constant]#SX_ADAPTIVESPIN# 退役, 而新增的 [constant]#SX_NOADAPTIVE# 标志则表达相反语义。 + +|800093 +|May 29, 2009 +|为 struct mount 增加 mnt_xflag 之后的 8.0-CURRENT。 + +|800094 +|May 30, 2009 +|新增了 man:VOP_ACCESSX[9] 之后的 8.0-CURRENT。 + +|800095 +|May 30, 2009 +|调整轮询 KPI (polling KPI) 之后的 8.0-CURRENT。 轮询处理程序会返回处理过的包的数量。 新增的 [constant]#IFCAP_POLLING_NOCOUNT# 则表示返回值不重要, 并跳过计数。 + +|800096 +|June 1, 2009 +|对新的 netisr 进行了改进, 并调整了保存和存取 FIB 方式之后的 8.0-CURRENT。 + +|800097 +|June 8, 2009 +|引入了 vnet 析构挂钩和相关基础设施之后的 8.0-CURRENT。 + +|800097 +|June 11, 2009 +|引入了 netgraph 输出到输入路径调用检测和排队机制, 并调整了 struct thread 布局之后的 8.0-CURRENT。 + +|800098 +|June 14, 2009 +|引入了 OpenSSL 0.9.8k 之后的 8.0-CURRENT。 + +|800099 +|June 22, 2009 +|更新了 NGROUPS 并将路由虚拟化挪到它自己的 VImage 模块之后的 8.0-CURRENT。 + +|800100 +|June 24, 2009 +|修改了 SYSVIPC ABI 之后的 8.0-CURRENT。 + +|800101 +|June 29, 2009 +|删去了与网络接口一一对应的 /dev/net/* 字符设备之后的 8.0-CURRENT。 + +|800102 +|July 12, 2009 +|在 struct sackhint、 struct tcpcb 以及 struct tcpstat 上增加占位元素之后的 8.0-CURRENT。 + +|800103 +|July 13, 2009 +|将 TOE 驱动接口中的 struct tcpopt 替换为 TCP syncache 中的 struct toeopt 之后的 8.0-CURRENT。 + +|800104 +|July 14, 2009 +|新增了基于 linker-set 的 per-vnet 分配器之后的 8.0-CURRENT。 + +|800105 +|July 19, 2009 +|递增了所有未使用符号版本的动态连接库版本之后的 8.0-CURRENT。 + +|800106 +|July 24, 2009 +|引入 VM 对象类型 OBJT_SG 之后的 8.0-CURRENT。 + +|800107 +|August 2, 2009 +|通过加入 newbus sxlock 使 newbus 子系统不再使用 Giant, 以及 8.0-RELEASE。 + +|800108 +|November 21, 2009 +|实现了 EVFILT_USER kevent 过滤器之后的 8.0-STABLE。 + +|800500 +|January 7, 2010 +|令 `pkg_add -r` 使用 packages-8-stable 的 `__FreeBSD_version` 版本变化的 8.0-STABLE。 + +|800501 +|January 24, 2010 +|调整了 `scandir(3)` 和 `alphasort(3)` 函数原型, 使其符合 SUSv4 之后的 8.0-STABLE。 + +|800502 +|January 31, 2010 +|新增了 `sigpause(3)` 之后的 8.0-STABLE。 + +|800503 +|February 25, 2010 +|新增了用于管理网络接口说明的 SIOCGIFDESCR 和 SIOCSIFDESCR ioctl 之后的 8.0-STABLE。 这组接口受到了 OpenBSD 的启发。 + +|800504 +|March 1, 2010 +|MFC 了 x86emu, 来自 OpenBSD 的 x86 CPU 实模式模拟器之后的 8.0-STABLE。 + +|800505 +|May 18, 2010 +|MFC 了添加 liblzma, xz, xzdec 以及 lzmainfo 之后的 8.0-STABLE。 + +|801000 +|June 14, 2010 +|8.1-RELEASE + +|801500 +|June 14, 2010 +|8.1-RELEASE 之后的 8.1-STABLE。 + +|801501 +|November 3, 2010 +|用于 PL_FLAG_SCE/SCX/EXEC/SI 的 struct sysentvec 的 KBI 以及 用于 ptrace(PT_LWPINFO) 的 pl_siginfo 的 KBI 改变之后的 8.1-STABLE。 + +|802000 +|December 22, 2010 +|8.2-RELEASE + +|802500 +|December 22, 2010 +|8.2-RELEASE 之后的 8.2-STABLE。 + +|802501 +|February 28, 2011 +|合并了 DTrace 变动, 包含用户态跟踪支持之后的 8.2-STABLE。 + +|802502 +|March 6, 2011 +|在 libm 中合并了 log2 和 log2f 之后的 8.2-STABLE。 + +|802503 +|May 1, 2011 +|将 gcc 升级至 FSF gcc-4_2-branch 最后一个 GPLv2 版本之后的 8.2-STABLE。 + +|802504 +|May 28, 2011 +|引入模块化拥塞控制支持基础设施和 KPI 之后的 8.2-STABLE。 + +|802505 +|May 28, 2011 +|引入了 Hhook 和 Khelp KPI 之后的 8.2-STABLE。 + +|802506 +|May 28, 2011 +|在 tcpcb 结构中增加 OSD 之后的 8.2-STABLE。 + +|802507 +|June 6, 2011 +|引入 ZFS v28 之后的 8.2-STABLE。 + +|802508 +|June 8, 2011 +|删去了 sv_schedtail struct sysvec 方法之后的 8.2-STABLE。 + +|802509 +|July 14, 2011 +|在 binutils 中合并了 SSE3 支持之后的 8.2-STABLE。 + +|802510 +|July 19, 2011 +|为 `rfork(2)` 添加了 RFTSIGZMB 标志之后的 8.2-STABLE。 + +|900000 +|August 22, 2009 +|9.0-CURRENT。 + +|900001 +|September 8, 2009 +|引入了 x86emu, 来自 OpenBSD 的 x86 CPU 实模式模拟器之后的 9.0-CURRENT。 + +|900002 +|September 23, 2009 +|实现了 EVFILT_USER kevent 过滤器之后的 9.0-CURRENT。 + +|900003 +|December 2, 2009 +|新增了 `sigpause(3)` 以及 csu 的 PIE 支持之后的 9.0-CURRENT。 + +|900004 +|December 6, 2009 +|新增了 libulog 及其 libutempter 兼容接口之后的 9.0-CURRENT。 + +|900005 +|December 12, 2009 +|新增了用于查询指定休眠队列上等待者数量的 `sleepq_sleepcnt()` 函数之后的 9.0-CURRENT。 + +|900006 +|January 4, 2010 +|调整了 `scandir(3)` 和 `alphasort(3)` 函数原型, 使其符合 SUSv4 之后的 9.0-CURRENT。 + +|900007 +|January 13, 2010 +|删去了 utmp(5) 并增加了 utmpx (参阅 `getutxent(3)`) 以改善用户登录日志和系统事件支持之后的 9.0-CURRENT。 + +|900008 +|January 20, 2010 +|9.0-CURRENT 引入了 BSD 授权的 bc/dc 并将 GNU bc/dc 标注为过时之后的 9.0-CURRENT。 + +|900009 +|January 26, 2010 +|新增了用于管理网络接口说明的 SIOCGIFDESCR 和 SIOCSIFDESCR ioctl 之后的 9.0-CURRENT。 这组接口受到了 OpenBSD 的启发。 + +|900010 +|March 22, 2010 +|引入了 zlib 1.2.4 之后的 9.0-CURRENT。 + +|900011 +|April 24, 2010 +|添加了 soft-updates 日志功能之后的 9.0-CURRENT。 + +|900012 +|May 10, 2010 +|添加了 liblzma, xz, xzdec 以及 lzmainfo 之后的 9.0-CURRENT。 + +|900013 +|May 24, 2010 +|添加了针对 linux(4) 的 USB 修正之后的 9.0-CURRENT。 + +|900014 +|Jun 10, 2010 +|添加了 Clang 之后的 9.0-CURRENT。 + +|900015 +|July 22, 2010 +|引入了 BSD grep 之后的 9.0-CURRENT。 + +|900016 +|July 28, 2010 +|在 struct malloc_type_internal 中加入了 mti_zone 之后的 9.0-CURRENT。 + +|900017 +|August 23, 2010 +|默认 grep 改回使用 GNU grep 并增加 WITH_BSD_GREP 开关之后的 9.0-CURRENT。 + +|900018 +|August 24, 2010 +|将 `pthread_kill(3)` 产生的信号在 si_code 中改为使用 SI_LWP 标记之后的 9.0-CURRENT。 之前, si_code 对应的标志为 SI_USER。 + +|900019 +|August 28, 2010 +|为 `mmap(2)` 新增了 MAP_PREFAULT_READ 标志之后的 9.0-CURRENT。 + +|900020 +|September 9, 2010 +|为 sbuf 增加了 drain 功能并改变了 struct sbuf 布局之后的 9.0-CURRENT。 + +|900021 +|September 13, 2010 +|DTrace 增加用户态跟踪支持之后的 9.0-CURRENT。 + +|900022 +|October 2, 2010 +|新增了 BSDL man 工具, 并淘汰 GNU/GPL man 工具之后的 9.0-CURRENT。 + +|900023 +|October 11, 2010 +|引入 20101010 git 快照版本 xz 之后的 9.0-CURRENT。 + +|900024 +|November 11, 2010 +|将 libgcc.a 替换为 libcompiler_rt.a 之后的 9.0-CURRENT。 + +|900025 +|November 12, 2010 +|引入了模块化拥塞控制之后的 9.0-CURRENT。 + +|900026 +|November 30, 2010 +|引入串行管理协议 (SMP) 直通, 以及与之对应的 CAM CCB XPT_SMP_IO 和 XPT_GDEV_ADVINFO 之后的 9.0-CURRENT。 + +|900027 +|December 5, 2010 +|在 libm 中增加 log2 之后的 9.0-CURRENT。 + +|900028 +|December 21, 2010 +|添加了 Hhook (Helper Hook)、 Khelp (Kernel Helpers) 和 Object Specific Data (OSD) KPI 之后的 9.0-CURRENT。 + +|900029 +|December 28, 2010 +|修改 TCP 协议栈使其允许 Khelp 模块通过 helper hook 指针, 与 TCP 控制块交互并保存连接数据之后的 9.0-CURRENT。 + +|900030 +|January 12, 2011 +|将 libdialog 更新至版本 20100428 之后的 9.0-CURRENT。 + +|900031 +|February 7, 2011 +|添加了 `pthread_getthreadid_np(3)` 之后的 9.0-CURRENT。 + +|900032 +|February 8, 2011 +|删除了 uio_yield 函数原型和符号之后的 9.0-CURRENT。 + +|900033 +|February 18, 2011 +|将 binutils 更新至 2.17.50 之后的 9.0-CURRENT。 + +|900034 +|March 8, 2011 +|修改了 struct sysvec (sv_schedtail) 之后的 9.0-CURRENT。 + +|900035 +|March 29, 2011 +|将基本系统中 gcc 和 libstdc++ 升级至最后的 GPLv2 授权版本之后的 9.0-CURRENT。 + +|900036 +|April 18, 2011 +|在基本系统中删去了 libobjc 和 Objective-C 支持之后的 9.0-CURRENT。 + +|900037 +|May 13, 2011 +|在基本系统中引入了 libprocstat(3) 函数库以及 fuser(1) 工具之后的 9.0-CURRENT。 + +|900038 +|May 22, 2011 +|为 VFS_FHTOVP(9) 添加锁标志参数之后的 9.0-CURRENT。 + +|900039 +|June 28, 2011 +|引入了来自 OpenBSD 4.5 的 pf 之后的 9.0-CURRENT。 + +|900040 +|July 19, 2011 +|将 amd64 和 ia64 平台上的 MAXCPU 提高到 64, 并把 XLP (mips) 上的值提高到 128 之后的 9.0-CURRENT。 + +|900041 +|August 13, 2011 +|实现了 Capsicum capabilities 之后的 9.0-CURRENT。 fget(9) 新增了权限参数。 + +|900042 +|August 28, 2011 +|提高修改过 ABI 的动态连接库版本号之后的 9.0-CURRENT。 + +|900043 +|September 2, 2011 +|增加了对不支持 SCSI 快取缓存同步功能的 USB 大容量存储设备自动检测功能之后的 9.0-CURRENT。 + +|900044 +|September 10, 2011 +|重构了 auto-quirk 之后的 9.0-CURRENT。 + +|900045 +|Oct 13, 2011 +|将非兼容性系统调用入口点全部增加 sys_ 前缀之后的 9.0-CURRENT。 +|=== + +[NOTE] +==== +请注意, 2.2.5-RELEASE 之后有一段时间的 2.2-STABLE 会声称自己是 "2.2.5-STABLE"。 这种模式的版本号表示的是年月。 但随后, 我们决定, 从 2.2 开始, 将它改为更为简洁的 主/次 版本号的形式来命名版本。 这是因为并行地在多个分支上进行开发, 使得通过实际的发布日期来区分不同的版本变得不再现实。 如果您正在做新的 port, 应该不需要担心较早的 -CURRENT; 在此列出仅供参考。 +==== + +[[dads-after-port-mk]] +== 在 [.filename]#bsd.port.mk# 之后写一些内容 + +不要在 `.include <bsd.port.mk>` 这行之后增加任何内容。 这通常可以通过在您的 [.filename]#Makefile# 中间的某处引用 [.filename]#bsd.port.pre.mk#, 并在结尾的地方引用 [.filename]#bsd.port.post.mk# 来避免。 + +[NOTE] +==== +只能够采用 [.filename]#bsd.port.pre.mk#/[.filename]#bsd.port.post.mk# 或 [.filename]#bsd.port.mk# 两种写法之一; 任何时候都不要同时使用两种写法。 +==== + +[.filename]#bsd.port.pre.mk# 只定义了很少的变量, 它们可以在 [.filename]#Makefile# 中用于进行一些测试, 而 [.filename]#bsd.port.post.mk# 则定义了所有其它的变量。 + +下面是一些由 [.filename]#bsd.port.pre.mk# 定义的比较重要的变量 (这并不是一份完整的列表, 您可以阅读 [.filename]#bsd.port.mk# 以获得全部变量的名字)。 + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| 变量 +| 描述 + +|`ARCH` +|由 `uname -m` 输出得到的硬件架构的名字 (例如, `i386`) + +|`OPSYS` +|由 `uname -s` 返回的操作系统类型 (例如, `FreeBSD`) + +|`OSREL` +|操作系统的版本号 (例如 `2.1.5` 或 `2.2.7`) + +|`OSVERSION` +|操作系统的版本号的数值形式; 它等于 <<freebsd-versions,`__FreeBSD_version`>>。 + +|`PORTOBJFORMAT` +|系统默认的执行文件格式 (`elf` 或 `aout`; 请注意, "现代的" FreeBSD 版本中, `aout` 已在淘汰之列。) + +|`LOCALBASE` +|"local" 目录的根 (例如, `/usr/local/`) + +|`PREFIX` +|port 应被安装到哪里 (参见 <<porting-prefix,关于 `PREFIX` 的更多说明>>)。 +|=== + +[NOTE] +==== +如果您需要定义 `USE_IMAKE`, `USE_X_PREFIX`, 或 `MASTERDIR` 这些变量, 则应在引用 [.filename]#bsd.port.pre.mk# 之前完成。 +==== + +下面是一些在引用 [.filename]#bsd.port.pre.mk# 之后可以进行的判断: + +[.programlisting] +.... +# 如果 perl5 已经在系统中提供, 则不必编译 lang/perl5 +.if ${OSVERSION} > 300003 +BROKEN= perl is in system +.endif + +# ELF 只使用一个 shlib 版本 +.if ${PORTOBJFORMAT} == "elf" +TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR} +.else +TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR} +.endif + +# 软件会自动为 ELF 创建符号链接, 但 a.out 则需要另行创建 +post-install: +.if ${PORTOBJFORMAT} == "aout" + ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so +.endif +.... + +您还记得应该在 `BROKEN=` 和 `TCL_LIB_FILE=` 后面使用制表符, 而不是空格, 对吧? :-) + +[[dads-sh-exec]] +== 在 wrapper 脚本中使用 `exec` 语句 + +如果 port 安装了用以启动其他程序的脚本, 并且运行其他程序是这些脚本的最后一项操作, 请务必使用 `exec` 语句来运行这些程序, 例如: + +[.programlisting] +.... +#!/bin/sh +exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@" +.... + +使用 `exec` 语句表示执行指定的程序来取代 shell 进程。 如果省略了 `exec`, 则 shell 进程会一直在内存中, 从而不必要地消耗了额外的系统资源。 + +[[dads-rational]] +== 理性行事 + +任何 [.filename]#Makefile# 都应该简单并理性地行事。 如果您能让其中的条目更为简单和易读, 一定要这样做。 例如, 使用 make 提供的 `.if` 结构, 而不要使用 shell 的 `if`, 只要能重定义 `EXTRACT*` 就不要重载 `do-extract`, 尽量使用 `GNU_CONFIGURE` 而不是 `CONFIGURE_ARGS += --prefix=${PREFIX}`。 + +如果您在尝试做什么事情的时候发现不得不写大量的代码, 请回过头来复审一下 [.filename]#bsd.port.mk#, 看看是否有您正打算做的事情的现成实现。 尽管读起来可能很费劲, 但有很多貌似很难的问题, 在 [.filename]#bsd.port.mk# 中都给出了十分简便的解决方案。 + +[[dads-cc]] +== 遵循 `CC` 和 `CXX` 设置 + +port 应遵循 `CC` 和 `CXX` 变量的设置。 这也就是说, port 不应使用绝对的方式来设置这个变量的值, 而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值。 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。 + +如果实在无法这样做, 请在 [.filename]#Makefile# 中加入 `NO_PACKAGE=ignores cflags`。 + +下面的 [.filename]#Makefile# 实例给出了如何遵循 `CC` 和 `CXX` 变量的设置。 注意这里用到的 `?=`: + +[.programlisting] +.... +CC?= gcc +.... + +[.programlisting] +.... +CXX?= g++ +.... + +下面则是没有遵循 `CC` 和 `CXX` 的例子: + +[.programlisting] +.... +CC= gcc +.... + +[.programlisting] +.... +CXX= g++ +.... + +在 FreeBSD 系统中, `CC` 和 `CXX` 这两个变量都可以在 [.filename]#/etc/make.conf# 中自行定义。 第一个例子只有在 [.filename]#/etc/make.conf# 中没有定义时才对这两个变量进行定义, 从而保持了系统范围的配置。 而第二个例子则会覆盖任何现有的配置。 + +[[dads-cflags]] +== 遵循 `CFLAGS` + +您的 port 应遵循 `CFLAGS` 变量的设置。 这也就是说, port 不应使用绝对的方式来设置这个变量的值, 而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值, 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。 + +如果实在无法这样做, 请在 [.filename]#Makefile# 中加入 `NO_PACKAGE=ignores cflags`。 + +下面的 [.filename]#Makefile# 例子, 可以帮助我们理解如何遵循 `CFLAGS` 的设置。 注意所用的 `+=`: + +[.programlisting] +.... +CFLAGS+= -Wall -Werror +.... + +下面是一个未能遵循 `CFLAGS` 设置的例子: + +[.programlisting] +.... +CFLAGS= -Wall -Werror +.... + +一般来说, `CFLAGS` 在 FreeBSD 系统中是在 [.filename]#/etc/make.conf# 里配置的。 第一个例子在 `CFLAGS` 变量中增加了一些参数, 并保持了所有系统预定义的标志。 而第二个例子, 则会覆盖掉任何先前定义的参数。 + +您应从第三方软件的 [.filename]#Makefile# 中去掉特殊的优化设置。 系统的 `CFLAGS` 给出了全系统范围内的优化设置参数。 下面是一个未经修改的 [.filename]#Makefile# 实例: + +[.programlisting] +.... +CFLAGS= -O3 -funroll-loops -DHAVE_SOUND +.... + +如果使用系统的优化参数, 则 [.filename]#Makefile# 中的设置应该类似下面这样: + +[.programlisting] +.... +CFLAGS+= -DHAVE_SOUND +.... + +[[dads-pthread]] +== 线程库 + +在 FreeBSD 上, 线程库必须通过特殊的连接器参数 `-pthread` 连接到可执行文件。 如果 port 一定要直接连接 `-lpthread` 或 `-lc_r`, 则应将其改为使用由 ports 框架提供的 `PTHREAD_LIBS`。 这个变量的值通常是 `-pthread`, 但在某些特定平台上的 FreeBSD 版本中, 它可能是其它值, 因此, 不要将 `-pthread` 硬编码到您的补丁中, 而应使用 `PTHREAD_LIBS` 变量。 + +[NOTE] +==== +如果设置了 `PTHREAD_LIBS`, 而在联编时出现 `unrecognized option '-pthread'` 这样的错误, 可能需要通过将 `CONFIGURE_ENV` 设为 `LD=${CC}` 来使用 `gcc` 作为连接器。 `-pthread` 这一选项并不为 `ld` 所直接支持。 +==== + +[[dads-freedback]] +== 反馈 + +如果进行了一些很好的修改和补丁, 一定要把它们发回给原作者, 或维护者, 以便在下一版本的代码中包含它们。 这会让您在软件发布新版本的时候变得轻松一些。 + +[[dads-readme]] +== [.filename]#README.html# + +不要包含 [.filename]#README.html# 文件。 这个文件并非 CVS 代码库中的一部分, 它是由 `make readme` 命令生成的。 + +[[dads-noinstall]] +== 使用 `BROKEN`、 `FORBIDDEN` 或 `IGNORE` 阻止用户安装 port + +某些时候会需要阻止用户安装某个 port。 想要告诉用户某个 port 不应被安装, 有许多可以在 port 的 [.filename]#Makefile# 中使用的 `make` 变量。 下列 `make` 的值, 将是在用户试图安装时得到的提示信息。 务请使用正确的 `make` 变量, 因为每一个都表达了截然不同的意义, 而且许多自动化系统, 例如 <<build-cluster,port 联编集群>>、 <<freshports,FreshPorts>>, 以及 <<portsmon,portsmon>>, 都依赖于 [.filename]#Makefile# 的正确性。 + +[[dads-noinstall-variables]] +=== 变量 + +* `BROKEN` 专门用于表达目前无法正确编译、 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。 ++ +如果进行了相关的配置, 则联编集群仍将尝试联编它, 以确认导致问题的深层问题是否已被解决。 (不过, 一般情况下, 联编集群并不会这样做。) ++ +举例来说, 当 port 发生下述情况时, 应使用 `BROKEN`: + +** 无法编译 (does not compile) +** 无法正确进行配置或安装操作 +** 在 [.filename]#${LOCALBASE}# 以外的地方安装文件 +** 卸载时无法删除所安装的全部文件 (不过, 留下用户改过的文件可接受的, 因为可能希望这样作) + +* `FORBIDDEN` 用于表示 ports 中包含安全漏洞, 或者可能会给安装了这个 port 的 FreeBSD 系统带来严重的安全隐患 (例如: 一个很不安全的程序, 或包含了能够被轻易攻陷的服务的软件)。 如果发现了安全漏洞, 而其作者没有发布升级版本, 则应立即把那个 port 标记为 `FORBIDDEN`。 理想情况下, 包含安全漏洞的 port 应被尽快升级, 以便减少包含漏洞的 FreeBSD 主机的数量 (我们希望保持良好的安全记录), 然而, 有时在安全漏洞的披露和软件更新之间可能会有一个间隔, 此时应予以说明。 除了安全之外, 请不要以任何其它理由将 port 标记为 `FORBIDDEN`。 +* `IGNORE` 用来表示 port 由于某些其它原因不应予以联编。 如果认为发生了结构性的问题, 则应使用它。 任何情况下, 联编集群都不会联编标记为 `IGNORE` 的 port。 以下是使用 `IGNORE` 的一些例子: + +** 能够编译但无法正常运行 +** 无法与运行的 FreeBSD 版本一同工作 +** 联编时需要 FreeBSD 内核的源代码, 但用户没有安装它们 +** 由于授权原因, 必须手工下载 distfile +** 无法与的某个已安装的 port 一同工作 (例如, port 依赖于 package:www/apache21[] 而安装的则是 package:www/apache13[]) + ++ +[NOTE] +==== +如果 port 与某个已经安装的 port 冲突 (例如, 它们在同一位置安装同名但功能不同的文件), 则应 <<conflicts,使用 `CONFLICTS` 来标记它>>。 `CONFLICTS` 将自动地设置 `IGNORE`。 +==== + +* 如果 port 只应在某些平台上标记为 `IGNORE`, 还有另外两个方便使用的 `IGNORE` 变量可供选择: `ONLY_FOR_ARCHS` 和 `NOT_FOR_ARCHS`。 例如: ++ +[.programlisting] +.... +ONLY_FOR_ARCHS= i386 amd64 +.... + ++ +[.programlisting] +.... +NOT_FOR_ARCHS= alpha ia64 sparc64 +.... + ++ +可以使用 `ONLY_FOR_ARCHS_REASON` 和 `NOT_FOR_ARCHS_REASON` 来配置定制的 `IGNORE` 消息。 此外, 还可以使用 `ONLY_FOR_ARCHS_REASON__ARCH_` 和 `NOT_FOR_ARCHS_REASON__ARCH_` 来分别指定与具体平台有关的信息。 +* 如果 port 会下载并安装用于 i386 的预编译二进制文件, 则应设置 `IA32_BINARY_PORT`。 如果设置了这个变量, 则系统会检查是否已经在 [.filename]#/usr/lib32# 目录中安装了 IA32 版本的函数库, 以及内核是否提供了 IA32 兼容支持。 如果这些依赖条件不满足, 则会自动设置 `IGNORE`。 + +[[dads-noinstall-notes]] +=== 实现说明 + +这些字串不应使用引号括起来。 此外, 由于显示给用户的方式不同, 这些字串的措辞也应有所不同。 例如: + +[.programlisting] +.... +BROKEN= this port is unsupported on FreeBSD 5.x +.... + +[.programlisting] +.... +IGNORE= is unsupported on FreeBSD 5.x +.... + +它们分别会在 `make describe` 时产生下面的输出: + +[.programlisting] +.... +===> foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x. +.... + +[.programlisting] +.... +===> foobar-0.1 is unsupported on FreeBSD 5.x. +.... + +[[dads-deprecated]] +== 使用 `DEPRECATED` 或 `EXPIRATION_DATE` 表示某个 port 将被删除 + +一定要记得 `BROKEN` 和 `FORBIDDEN` 只应作为当某个 port 无法正常工作时的临时解决方案。 永久性地坏掉了的 port 应被从 ports tree 中完全删除。 + +需要时还可以使用 `DEPRECATED` 和 `EXPIRATION_DATE` 来通知用户某个 port 不应被使用, 并即将被删除。 前一个变量用来表达为什么计划删除 port; 而后一个是则是一个 ISO 8601 格式的日期 (YYYY-MM-DD)。 两者都会向用户呈现。 + +也可以设置 `DEPRECATED` 而不给出 `EXPIRATION_DATE` (例如, 建议使用某个新版本的 port), 但反之则没有意义。 + +目前还没有确切的关于需要给出多少通知的政策。 当前的实践是, 对于与安全有关的问题为一个月, 而与联编有关的问题则为两个月。 这也让有兴趣的 committer 能够有一点时间来修正问题。 + +[[dads-dot-error]] +== 避免使用 `.error` 结构 + +在 [.filename]#Makefile# 中给出信号, 表示由于某种外界因素 (例如, 用户指定了无效的联编选项) 而无法安装的方法是将变量 `IGNORE` 设为一非空值。 这个值将被格式化, 并在用户执行 `make install` 是给出提示。 + +用 `.error` 实现这一目的是一种常见的误用。 这样做的问题是, 许多在 ports 树上运行的自动化工具会因此而失败。 最常见的情况见于联编 [.filename]#/usr/ports/INDEX# 的过程 (参见 <<make-describe>>)。 然而, 即使十分普通的命令, 例如 `make maintainer`, 在这种情况下也会失败。 这是不可接受的。 + +[[dot-error-breaks-index]] +.怎样避免使用 `.error` +[example] +==== +考虑有人在 [.filename]#make.conf# 中设置了 +[.programlisting] +.... +USE_POINTYHAT=yes +.... + +的情形。 接下来的例子中, 第一个 [.filename]#Makefile# 中的问题将导致 `make index` 失败, 而第二个则不会: + +[.programlisting] +.... +.if USE_POINTYHAT +.error "POINTYHAT is not supported" +.endif +.... + +[.programlisting] +.... +.if USE_POINTYHAT +IGNORE=POINTYHAT is not supported +.endif +.... + +==== + +[[dads-sysctl]] +== 对于 [.filename]#sysctl# 的使用 + +除了在 target 中之外, 是不鼓励使用 [.filename]#sysctl# 的。 这是因为计算 `makevar`, 例如在 `make index` 中所进行的那种, 都不得不运行一条命令, 这会使这一操作变得更慢。 + +在使用 man:sysctl[8] 时, 务必通过 `SYSCTL` 变量来进行, 因为此变量将展开成命令的完整路径, 并且用户可以根据需要另行指定。 + +[[dads-rerolling-distfiles]] +== 重新发布的 distfiles + +有时, 一些软件的作者会修改业已发布的 distfile 的内容, 而并不修改文件名。 这种情况下, 您需要验证这些变动是来自软件作者的官方改动。 在过去, 曾经发生过下载服务器上的 distfile 被悄悄换成注入过恶意代码的版本, 并给用户安全造成威胁或损害的事情。 + +您应保留一份旧的 distfile, 并下载一份新的, 分别展开, 用 man:diff[1] 来对比其内容。 如果没有发现可疑的变动, 就可以更新 [.filename]#distinfo# 了。 请务必在您的 PR 或 commit log 中对这些差异进行描述, 以便让别人了解您已经仔细对比过差异, 并确认没有问题了。 + +除此之外, 也可以联系软件的作者, 以确认这些修改是否是他们做的。 + +[[dads-misc]] +== 杂记 + +需要仔细地反复检查 [.filename]#pkg-descr# 和 [.filename]#pkg-plist# 这两个文件。 如果您正在复审一个 port, 并认为这两个文件应该改进, 请一定要这样做。 + +请不要在系统中复制多份 GNU General Public License。 + +一定要非常小心地处理法律问题! 不要让我们发布没有得到合法授权的软件! |