FreeBSD 开发模式的一个优点是其集中化的设计和实现方式,操作系统的代码被维护在一个中央存储库中,并在统一管理的邮件列表中进行讨论。这种模式使得系统各组件的开发者之间能够高度协作,并能在整个系统范围内执行统一的政策,从架构设计到代码风格等方面进行规范。然而,随着 FreeBSD 开发者社区的不断壮大,邮件列表的交流频率和代码库的修改速度也在增加,使得哪怕是最为投入的开发者,也难以全面掌握源代码中的所有工作进展。
FreeBSD 每月开发状态报告旨在解决这一问题,为开发者提供一个渠道,使他们能够向更广泛的社区介绍自己在 FreeBSD 相关的开发工作,无论这些工作是在中央代码库内还是外部进行的。这是第一期报告,因此也是一次实验。每个项目和子项目都会包含一个段落的摘要,说明自上次报告以来的进展(在本期中,仅涉及最近的进展,因为之前没有类似的总结)。
本报告可以部分或全文转载,但须明确注明来源并给予适当的署名。
如果该报告能够获得积极反馈,并且后续有足够的投稿内容支持继续发布,那么目标是每月发布一次开发状态报告。因此,下一期的投稿截止日期为 2001 年 7 月 31 日,计划在 8 月的第一周发布。这样不仅能使状态报告与日历时间保持同步,还能为下一个截止日期预留一个多月的时间,其中将包括一些重要的活动,如在马萨诸塞州波士顿举行的年度 USENIX 技术会议。投稿请发送至:
许多投稿者可能希望等到 7 月的最后一周,以提供最及时的状态报告;但在此之前,任何时间的投稿都将可被接受。
_—— Robert Watson rwatson@FreeBSD.org _
相关链接:http://people.freebsd.org/~murray/updater.html
联系人:Eric Melville <eric@FreeBSD.org>
联系人:Murray Stokely <murray@FreeBSD.org>
FreeBSD 二进制更新程序项目旨在提供一种安全的机制,用于分发 FreeBSD 的二进制更新。该项目是 Open Packages 和 libh 项目的补充,与这些项目的重叠部分很少。该系统采用客户端/服务器机制,能让客户端通过网络安装任何已知的 FreeBSD“配置文件”或版本。其中,一个特定的配置文件可能包含特定的软件集、附加软件包及相关的配置操作,以使其更适用于特定环境(例如 FreeBSD 4.3 安全 Web 服务器配置文件)。
目前,该系统可以用于安装 FreeBSD 系统和执行最基本的升级操作,但仍缺少许多功能。尤其是客户端仍处于早期开发阶段,需要大量工作。如果你有兴趣贡献代码,请联系我们:updater@osd.bsdi.com。
联系人:Josef Karthauser <joe@FreeBSD.org>
我正在重写 CVSROOT/scripts 以使其更加清晰和可配置。许多其他项目也使用这些脚本,因此让它们更易于在不同环境中使用是有意义的。
当前状态:开发中。目前已经增加了一个配置文件,但并非所有脚本都已经使用它。
联系人:Poul-Henning Kamp <phk@FreeBSD.org>
DEVFS 的真正克隆设备实现正在推进中。Brian Somers 和 Poul-Henning Kamp 正在努力使 if_tun
成为系统中的第一个真正的克隆驱动程序。接下来将处理 pty 驱动程序和 bpf 驱动程序。
从 7 月 1 日起,DEVFS 将成为 -current 分支的标准配置。
联系人:Brian Somers <brian@FreeBSD.org>
已添加 digi 驱动程序。初步工作由 John Prince johnp@knight-trosoft.com 完成,但所有模块化相关的工作由我完成,同时也进行了对 Xe 和 Xi 设备(类似 dgb)的初步支持。我目前正在等待 Joerg@(几乎是一笔捐赠)寄来的 Xe 设备,以便能让这部分功能正常运行。
相关链接:http://phantom.cris.net/freebsd/projects/viewproj.php?p_id=15
联系人:Poul-Henning Kamp <phk@FreeBSD.org>
Ben Smithurst 编写了个叫“diskcheckd”的守护进程,该进程可以在设定的时间内读取磁盘上的所有扇区。随着磁盘容量的不断增加,磁盘读取错误在发生致命故障之前未被发现的可能性也在增加。希望该守护进程能促使磁盘固件在坏扇区变得不可读之前重新分配它们。目前,该代码已提交至 5.0-CURRENT 分支。
联系人:Jonathan Lemon <jlemon@FreeBSD.org>
在过去的一个月(5 月至 6 月),新的 fxp 驱动程序已引入 -stable 分支。该新驱动程序采用了通用的 MII 代码,因此可以轻松添加对新 PHY 的支持。此外,还新增了对 Intel 82562 芯片的支持,更新了驱动程序,增加了 VLAN 支持,同时提供了针对 Intel 815 主板相关 Bug 的解决方案。
联系人:Greg Lewis <glewis@eyesbeyond.com>
在过去的一个月里,FreeBSD Java 项目仍在幕后推进工作。在技术方面,在 Bill Huey(来自风河)的帮助下,JDK 1.3.1 的移植取得了进展;在法律方面,Nate Williams 正在继续与 Sun 谈判,以达成一项双方都能接受的协议,从而发布二进制的 Java 2 SDK。与此同时,JDK 1.2.2 的移植工作也有所进展,预计很快会发布新的补丁集,其中包括 JPDA 和 NetBSD 支持(后者由 Scott Bartram 提供)。
相关链接:http://kgi.sourceforge.net/
联系人:Nicolas Souchu <nsouch@fr.alcove.com>
内核图形接口(KGI)项目已进行多年,旨在为 Linux 提供图形驱动程序框架,并从 UDI 项目等其他团队获取输入。目前,KGI 核心实现已相当稳定,驱动程序的编写模型也已基本成型。当前的工作重点是将 KGI 适配 FreeBSD 的 Newbus 体系,并将其模块化(kld),作为 FreeBSD 图形子系统后续重构的一部分。KGI 将成为不愿采用 XFree86 用户空间图形适配器模型的显卡厂商的一个替代方案,同时也能为其他图形解决方案提供加速支持。
相关链接:http://people.freebsd.org/~alex/libh/
联系人:Alexander Langer <alex@FreeBSD.org>
联系人:Nathan Ahlstrom <nra@FreeBSD.org>
libh 项目是下一代 sysinstall。它采用 C++ 编写,使用 QT 作为图形前端,tvision 作为终端支持,通过嵌入式 tcl 解释器实现可脚本化的菜单。近期,libh 的功能大幅增强,包括一个新的 disklabel 编辑器。目前的工作重点是编写光盘、FTP 等安装方式的安装脚本,以及开发一款功能完善的独立磁盘分区和标签编辑器。同时,GUI API 进行了扩展,并修复了许多 Bug。此外,社区对国际化(i18n)工作的兴趣似乎有所增加。
联系人:Poul-Henning Kamp <phk@FreeBSD.org>
Maxime Henrion 正在开发新的、更具扩展性的 mount(2)
系统调用,主要目的是突破 mountoptions
仅支持 32 位的限制,其次是实现内核内部挂载文件系统的能力。
联系人:Warner Losh <imp@FreeBSD.org>
在过去两个月里,OLDCARD PCCard 代码经历了大幅重构,几乎彻底翻新。添加了许多新的 PCI CardBus 桥,电源管理得到了改进。对 PCI CardBus 桥的支持已基本完成,并计划在 6 月初提交到代码库。这可能是 OLDCARD 代码的最后一次重大更新,在 PCI 卡支持完成后,工作将转向完善 NEWCARD。
联系人:Benno Rice <benno@FreeBSD.org>
PowerPC 平台进展顺利。在 pmap.c
代码中,经过一系列修正后,目前一切看起来运行正常。之前遇到的主要问题是 FreeBSD 将 vm_page_t
传递给了一个从 NetBSD 派生的函数,而该函数期望 vm_offset_t
类型的参数。此外,在调试原子操作代码后,目前 VM 似乎已经初始化,但系统在 sys/kern/kern_malloc.c:kmeminit()
处发生了宕机。工作仍在继续 =)。
联系人:Brian Somers <brian@FreeBSD.org>
正在为瑞士 Monzoon 公司的 Andre Opperman 开发完整的 MPPE(Microsoft Point-to-Point Encryption)支持。该功能已完成,并计划最终合并到 -current
,但具体时间尚未确定。
相关链接:http://phk.freebsd.dk/Gnats/
联系人:Poul-Henning Kamp <phk@FreeBSD.org>
Poul-Henning Kamp 发起了一项清理 GNATS PR(问题报告)数据库的行动,以便从中筛选出有价值的报告。目前进展良好,但仍有大量工作需要完成。如果你有时间,请帮忙处理这些问题。请记住:每个未处理的问题报告(PR),都可能意味着一位沮丧的贡献者/用户。
联系人:Dag-Erling Smorgrav <des@FreeBSD.org>
pseudofs
是用于伪文件系统(如 procfs
和 linprocfs
)的框架。其目标有两个:
消除 procfs
和 linprocfs
之间(以及它们内部)的代码重复。
将 procfs
和 linprocfs
从 VFS 系统的复杂性中解耦,以简化维护和后续开发。
目前,pseudofs
已达到足够的功能性和稳定性,linprocfs
已几乎完全基于它重新实现,唯一缺少的部分是文件 proc/<pid>/mem
。
当前 pseudofs
需要完成的主要任务是支持可写文件(procfs
需要此功能,但处理可写文件比只读文件要复杂得多)。此外,pseudofs
还需要通用支持原始(非 sbuf
处理,可能可 mmap
)文件,否则必须编写特殊代码来处理 proc/<pid>/mem
文件。
相关链接:http://people.freebsd.org/~bmah/relnotes/
联系人:Bruce A. Mah <bmah@FreeBSD.org>
RELNOTESng
是我为 FreeBSD 发行版附带的 *.TXT
文件重写工作所取的名称。这些文件包含发布说明、支持的硬件列表等信息。现在,这些文件的信息已被重新组织,并转换为 SGML
格式。这一转换有助于生成多种格式的文档,同时也方便维护不同架构的文档。
此工作最近已提交到 -CURRENT
,并计划在 4.4-RELEASE
之前合并(MFC)到 4-STABLE
分支。
相关链接:http://people.freebsd.org/~bmilekic/code/mb_slab/
联系人:Bosko Milekic <bmilekic@FreeBSD.org>
mb_alloc
是专用于 mbuf
和 mbuf
集群的新分配器。相较于现有的 mbuf
分配器,它特别在 MP
(多处理器)系统上具有诸多优势。此外,它还考虑到了未来的扩展性。
目前,该项目处于初步审核和测试阶段,大部分代码已经编写完成。
相关链接:http://www.freebsd.org/~jasone/smp/
联系人:John Baldwin <jhb@FreeBSD.org>
联系人:Jake Burkholder <jake@FreeBSD.org>
联系人:SMP 邮件列表 <smp@FreeBSD.org>
SMPng 项目的目标是为 FreeBSD 内核提供多线程支持。目前,内核仍主要运行在 Giant
内核锁下。最近的进展包括:
Seigo Tanimura-san 对进程组、会话结构以及文件描述符进行了锁定处理。
Alfred Perlstein 为整个虚拟内存(VM)子系统添加了 Giant
锁,该锁最终将被拆分为多个小锁。
VM 子系统的锁定较为复杂,目前的重点是修复 Alpha 架构上的一些剩余 bug。
联系人:Jake Burkholder <jake@FreeBSD.org>
FreeBSD 已重新启动对 UltraSPARC 架构(主要针对 PCI 工作站)的移植工作。Jake Burkholder 负责内核移植,Ade Lovett 计划参与 userland
相关工作。近期进展包括:
构建了一款针对 sparc64
的 GNU 交叉工具链。
获得了对 Ultra 5
开发机器的远程访问权限(感谢 emmy
)。
开发了一个最小化的头文件和源码集,以便编译和链接内核。
实现了一个 mini-loader
,用于重定位内核、映射 TLB
并启动内核。
采用了 Benno Rice 的 OpenFirmware
控制台驱动,实现 printf
和 panic
。
目前,已能通过网络启动内核,打印 FreeBSD 版权信息,随后调用未实现的代码。我正在设计 pmap
模块,并计划在未来几天内开始实现。
相关链接:http://www.trustedbsd.org/
联系人:Robert Watson <rwatson@FreeBSD.org>
TrustedBSD 项目的目标是通过增加新的安全特性来提高 FreeBSD 操作系统的安全性,其中许多功能源自常见的可信操作系统需求。这些特性包括:
访问控制列表(ACLs)
细粒度事件日志(Audit)
细粒度权限控制(Capabilitie)
强制访问控制(MAC)
其他架构特性,如文件系统扩展属性(EA)和改进的对象标记(Object Labeling)
各个功能的状态将在下文分别介绍。总体而言,基础功能(如 EA、ACL 和内核对 Capabilitie 的支持)将在 5.0-RELEASE
中首次提供,并通过特定的内核选项启用。性能优化后的 EAs 版本预计将在 6.0-RELEASE
中发布,同时集成支持 Capabilitie 的 userland
以及 MAC 支持。
联系人:Thomas Moestl <tmm@FreeBSD.org>
TrustedBSD Capabilities 的内核部分已基本完成,所有 suser()
和 suser_xxx()
调用,以及几乎所有 uid == 0
的比较,均已转换为新的 cap_check()
调用。但仍有一些细节需要进一步澄清,相关文档也需完善。
已编写符合 POSIX.2c 标准的 getfcap
和 setfcap
程序。此外,su(1)
、login(1)
、install(1)
和 bsd.prog.mk
中的实验性 Capabilities 支持正在测试中。
目前正在开发 tar(1)
对 Capabilities、ACLs 和 MAC 标签的支持,目前仅 Capabilities 部分已测试。此外,还计划为扩展属性(EAs)提供通用支持,这将需要扩展现有 EA 接口,相关扩展已编写完成,预计将在几周内提交到 -CURRENT
分支。同时,还计划将这些功能移植到 pax(1)
。
相关链接:http://www.trustedbsd.org/
联系人:Robert Watson <rwatson@FreeBSD.org>
今年早些时候,TrustedBSD 项目完成了一个初始的强制访问控制(MAC)原型,实现了多级安全(MLS)、Biba 完整性保护,以及更通用的基于 jail
的访问控制模型。
在此基础上,我正在改进 FreeBSD 的安全抽象层,以简化 MAC 支持的实现和集成,同时增加受自愿访问控制(DAC)和强制访问控制(MAC)保护的内核对象数量。
通用对象标记(Generic Object Labeling)引入了一种类似于内核 ucred
结构的机制,但它与内核对象关联,而非内核主体(subjects)。这种机制可以用于创建通用的安全保护例程,并允许轻松扩展 procfs
和 devfs
以支持 ACLs 和 MAC。
目前,该原型已进入开发阶段,代码已能够编译运行,并在 sysctl
级别实现了简单的访问控制保护。
联系人:Chris D. Faulhaber <jedgar@FreeBSD.org>
现在可以使用补丁,将 ACL 支持添加到 cp(1) 和 mv(1),并初步支持 install(1)。Ilmar 为 getfacl(1) 和 setfacl(1) 提供的 i18n 补丁需要更新,以适应最新的更改并提交。此外,还有一些其他功能改进正在进行中。