FreeBSD 2016 年第三季度状态报告
引言
尽管我们专注于当前和眼下正在发生的事情,有时回顾我们走过的历程以及未来的方向也是有益的。在这一季度,我们的新任文档提交者致力于梳理许多工具的复杂历史,同时我们也瞥见了 FreeBSD 12 可能带来的新变化。
尽管 11.0-RELEASE 在本报告涵盖的时间段结束后才最终完成,但我们依然可以对 12.0 中即将到来的特性充满期待。前景令人兴奋:一个不包含 GPL 组件的基本系统,arm64 作为一级架构,常用工具的 Capsicum 保护,CloudABI 支持定制软件,这些仅仅是其中的一部分。
当前的工作同样令人兴奋,11.0 在第三季度结束后发布,新核心逐渐稳定,以及更多的内容,你需要阅读并自行了解。
——Benjamin Kaduk
请在 1 月 7 日之前提交 2016 年第四季度的状态报告。
联系方式:FreeBSD 发布工程团队 <re@FreeBSD.org>
FreeBSD 发布工程团队负责制定和发布 FreeBSD 官方版本的发布计划,宣布代码冻结,维护相应的分支等工作。
FreeBSD 发布工程团队继续执行 11.0-RELEASE 的发布周期,原定于 9 月发布,但由于一些最后时刻的问题,最终的发布公告被推迟了。
此项目由 FreeBSD 基金会赞助。
联系方式:René Ladan <portmgr-secretary@FreeBSD.org> 联系方式:FreeBSD Ports 管理团队 <portmgr@FreeBSD.org>
Ports 目前包含超过 26,300 个 Port,PR 数量约为 2,150 个。其中 516 个 PR 尚未分配。上一季度有 117 名活跃提交者进行了 5,295 次提交。与前一个季度相比,PR 数量和未分配 PR 数量有所增加,而提交者数量略有减少。
在上一季度,有四位提交权限被收回:erwin、miwi 和 sem 由于个人原因离开,jase 因为超过 18 个月未活动而被移除。我们迎来了两位新提交者:Tobias Berner (tcberner) 和 Joseph Mingrone (jrm)。
在管理方面,erwin 和 miwi 离开了 portmgr,bapt 也离开了 portmgr,但仍然是核心团队的联络人。
在基础设施方面,引入了三个新的 USES(grantlee、kde、linux)和一个新的 Keyword(javavm)。Linux Port 的默认版本现在是 CentOS 6,计划在年底移除 Fedora 10 Port。许可证框架已扩展,增加了 NONE 许可证,以表示 Port 没有明确的许可证条款。对于这些 Port,不会分发任何软件包或发行文件。此外,已添加对完整 Creative Commons 许可证的支持。
一些主要的用户可见 Port 已更新:Firefox 更新到 49.0,Firefox 扩展服务版本更新到 45.4.0;Chromium 更新到 52.0.2743.116;gcc 默认版本更新到 4.8.5;pkg 本身更新到 1.8.7。
在幕后,antoine 进行了 24 次 exp-run 来验证各种软件包更新、框架更改以及基本系统的变更。bdrewery 添加了两台新的软件包构建机器,监督了 11.0-RELEASE 的软件包构建,并为构建 arm64 软件包添加了支持。
在 EuroBSDcon 上,rene 参观了 Landry Breuil landry@openbsd.org 的演讲,讲解了 OpenBSD 世界中软件包是如何构建的,并解释了各种设计决策。
待办事项
如果你有空闲时间,请处理并提交一个 PR 进行测试和提交。
联系方式:FreeBSD 核心团队 <core@FreeBSD.org>
第三季度开始时,第九届核心团队接手了工作。团队成员包括四位从前一届核心团队回归的成员(Baptiste Daroussin、Ed Maste、George Neville-Neil 和 佐藤広生),一位在缺席后回归的成员(John Baldwin),以及四位新加入的成员(Allan Jude、Kris Moore、Benedict Reuschling 和 Benno Rice)。新的核心团队代表了经验和新鲜血液之间的理想平衡。
除了交接所有正在进行的事务、审查核心议程上的一切事项以及其他例行交接活动外,新核心团队的首要任务是回应 Craig Rodrigues 关于 FreeBSD 基金会通过捐赠提供的硬件如何使用的查询。
基金会确实会记录硬件的供应情况,并大致了解这些硬件的最初用途,但并没有跟踪项目硬件资产的当前使用情况。集群管理部门有自己的配置数据库,但这并不适合公开,并且涵盖的内容远超基金会提供的设备。经过讨论,决定将有关基金会提供设备当前处置情况的更新信息纳入基金会的年度报告中。
确保 FreeBSD 的整个代码库都遵循开放且不受限制的许可证条款,并且我们不会侵犯专利条款或以其他方式违反任何法律要求,是核心团队的主要关切之一。在本季度,出现了三项此类事项。
导入并发工具包。在与基金会的法律顾问咨询后,确定导入并发工具包的选定部分是可以接受的,并已获得批准。
创建影像版 GPLv3 工具链仓库的提案已提交给社区。最终,由于外部工具链 Port 和软件包的进展速度超出了预期,这个想法变得大部分冗余,尤其是对于那些 LLVM 尚未足够成熟的架构。
关于处理 GPL 代码的问题,特别是在 linuxkpi shim 上的工作进展,引发了关注。此问题与 FreeBSD 的 svn 仓库无关,但核心团队希望强调,必须小心避免许可证侵犯,并计划编写一套关于处理 GPL 代码的指导方针。
本季度最引起核心团队关注的事项是项目如何处理 bspatch(1)、libarchive(3)、freebsd-update(8) 和 portsnap(8) 中的安全漏洞。在 FreeBSD-SA-16:25.bspatch 中已应用部分修复,但缺少 libarchive 代码的修复,因为上游尚未提供。
SecTeam 收到许多漏洞的优先报告,因此有严格的政策,直到发布安全公告和补丁后才公开评论。提前获得漏洞信息是建立在避免过早披露的能力上的,如果没有这些信息,他们将无法在漏洞发布时立即准备好安全公告和补丁。
然而,在此案例中,漏洞已公开,且 FreeBSD 项目没有任何官方回应,这导致用户和一些批评性的媒体关注。核心团队介入并发布了一份声明,澄清了情况以及修改交付安全补丁机制时面临的具体困难。核心团队认为,任何 公开 漏洞的及时通知和讨论其影响及可能的解决方法,不应等待正式的操作系统补丁的发布。
OpenSSH 项目已经弃用了 DSA 密钥。出于兼容性原因,FreeBSD 在较晚的 10.x 版本中保持了 DSA 密钥的启用,但随着 11.0 的发布,现在是与上游同步的时刻。由于 FreeBSD 集群中有大量使用 DSA 密钥的情况,因此需要进行更换密钥的操作。核心团队感谢 David Wolfskill 和账户团队,在处理大量密钥变更时表现出了极大的冷静。
在本季度,我们欢迎 Michael Zhilin、Imre Vadasz、Steve Kiernan 和 Toomas Soome 成为新的源代码提交者。同期,我们向 Martin Wilke 和 Erwin Lansing 告别,他们已交还提交权限。我们祝愿他们未来一切顺利,并希望他们尽早归来。
联系方式:Deb Goodkin <deb@FreeBSDFoundation.org>
FreeBSD 基金会是一家 501(c)(3) 非营利组织,致力于支持和推广全球 FreeBSD 项目和社区。基金会的资金来自个人和企业的捐赠,用于赞助和管理软件开发项目、会议和开发者峰会,并为 FreeBSD 贡献者提供差旅补助。基金会还购买硬件以改善和维护 FreeBSD 基础设施,发布 FreeBSD 白皮书和营销材料,以推广、教育和宣传 FreeBSD 项目。此外,基金会代表 FreeBSD 项目执行合同、许可证协议以及其他需要合法实体的法律安排。
以下是我们上季度为帮助 FreeBSD 所做的一些亮点:
筹款工作
我们的工作完全依赖于你的捐赠。我们 2016 年的支出预算为 125 万美元,目前已筹集 27.15 万美元。我们的第一季度到第三季度财务报告将在 11 月初发布。正如你所看到的,我们需要你的捐赠来继续支持 FreeBSD 达到当前的水平。请考虑在 https://www.FreeBSDFoundation.org/donate/ 上进行捐赠。
改进操作系统
基金会通过赞助经过提案提交流程批准的软件开发项目和我们的内部软件开发人员来改进 FreeBSD。上季度有两个基金会赞助的项目继续进行:一个是将 NetBSD 的 blacklistd 守护进程及相关元素移植到 FreeBSD,另一个是 FreeBSD/arm64 移植的第二阶段。
基金会工作人员在整个季度内负责了许多变更。Kostik Belousov 在上季度完成了以下工作:
提供了 EFI 运行时服务调用的内核支持
为 HPET 定时器在用户空间中实现了 gettimeofday(2)
实现了 fdatasync(2)
改进了时间保持代码的锁定
使睡眠队列代码免于快速调用变化的影响
进行了许多稳定性修复,最重要的是解决了 UFS 问题和 i386 错误
改进了进程管理和 ptrace 代码
我们的项目开发总监 Ed Maste 在上季度完成了以下工作:
处理 FreeBSD/arm64 问题和 Cavium ThunderX 部署(包括 RMAs)
与上游开发者合作,测试进行中的工作,并准备 LLD 作为 FreeBSD 基本系统中的替代链接器
转为在基本系统中使用 LLVM 的 libunwind
改进了 FreeBSD 基本系统和 Port 的构建可重现性
审查了正在进行的 blacklistd 工作
参加了 BSDCam 2016,重点讨论工具链问题
参与了 Capsicum 相关的电话会议,并帮助完成几个基本系统实用程序的 Capsicum 化工作
修复了多个 ELF 工具链问题,并将新的上游版本集成到 FreeBSD 基本系统中
主持了每两周一次的图形电话会议,协调赞助和志愿开发者的进行中的工作
实施了对某些 FreeBSD 更新工具的安全问题修复,并协调它们的集成到稳定分支和发布分支中
George Neville-Neil 继续主持每两周一次的传输协议会议电话(会议记录见 https://wiki.FreeBSD.org/TransportProtocols)和每两周一次的 DTrace 会议电话(会议记录见 https://wiki.FreeBSD.org/DTrace)。
发布工程
基金会工作人员 Glen Barber 与发布工程团队合作,继续完成 11.0-RELEASE 周期的最终工作,这一版本的发布因处理一些临时问题而有所延迟。
作为集群管理团队的一员,Glen 与 NYI 的现场工作人员一起合作,安装了两台 Cavium ThunderX 机器,其中一台用于构建 FreeBSD/arm64 架构的本地包,另一台则计划作为 FreeBSD 基础设施中的参考机器。
FreeBSD 入门项目
我们雇佣了一位夏季实习生,他之前没有使用过 FreeBSD、Linux 及命令行操作系统的经验,任务是独立完成 FreeBSD 的安装和使用。他编写了易于遵循的操作指南,帮助新用户顺利、愉快地开始使用 FreeBSD。他提交了错误报告并通过适当渠道报告问题,并与 Glen Barber 和 Brad Davis 合作,改进了 FreeBSD.org 上的新用户信息,使新用户能够更轻松地入门。你可以在 https://www.FreeBSDFoundation.org/FreeBSD/how-to-guides/ 上找到他的操作指南,并查看他在 BSDNow 上的访谈:http://www.bsdnow.tv/episodes/2016_08_24-the_fresh_bsd_experience。
支持 FreeBSD 基础设施
我们为 FreeBSD 基础设施提供硬件和支持。上季度,我们购买并启用了两台 48 核 Cavium ThunderX 机器,用于为 arm64 平台构建 FreeBSD 包集合。我们还购买了更多服务器,以支持持续集成工作。
FreeBSD 宣传和教育
我们的一大部分工作致力于推广项目。这包括宣传其他人使用 FreeBSD 的工作,制作宣传材料,帮助人们了解 FreeBSD 并简化开始使用 FreeBSD 的过程,鼓励人们参与项目,并参加以及动员其他 FreeBSD 贡献者参与组织 FreeBSD 活动、管理 FreeBSD 展位和做 FreeBSD 演讲。
我们制作了新的宣传材料,推广 TeachBSD.org(https://www.FreeBSDFoundation.org/wp-content/uploads/2016/08/TeachBSD_half_final.pdf)和谷歌编程之夏计划(https://www.FreeBSDFoundation.org/wp-content/uploads/2016/08/GSOC-flyerv2.pdf)。
我们发布了 FreeBSD Journal 的 7 月/8 月期:https://www.FreeBSDFoundation.org/past-issues/FreeBSD-and-rtems/。
我们还每月发布通讯,重点介绍支持 FreeBSD 的工作,告知即将举行的活动,并提供其他信息,以便你了解我们为支持 FreeBSD 项目和社区所做的工作:https://www.FreeBSDFoundation.org/news-and-events/newsletter/。
会议和活动
FreeBSD 基金会赞助了全球多个会议、活动和峰会。这些活动可以是与 BSD 相关的、开源的,或者是面向弱势群体的技术活动。
我们支持与 FreeBSD 相关的活动,旨在提供一个分享知识的场所,促进项目合作,并促进开发者和商业用户之间的协作,这一切都有助于建立健康的生态系统。我们支持非 FreeBSD 相关的活动,旨在宣传和提高 FreeBSD 的知名度,增加 FreeBSD 在不同应用中的使用,并招募更多的贡献者加入项目。
本季度,我们赞助并/或参加了以下活动:
Texas Linux Fest,2016 年 7 月 8-9 日,德克萨斯州奥斯汀(http://2016.texaslinuxfest.org/)
第十一届 HOPE,2016 年 7 月 22-24 日,纽约州纽约市(https://hope.net/index.html)
BSDCam 2016,2016 年 8 月 15-17 日,英国剑桥(赞助商、组织者并参与)(https://wiki.FreeBSD.org/DevSummit/201608)
FOSSCON 2016,2016 年 8 月 20 日,宾夕法尼亚州费城(https://fosscon.us/)
womENcourage 2016,2016 年 9 月 12-13 日,奥地利林茨(银赞助商)(http://womencourage.acm.org)
SNIA 存储开发者大会 2016,2016 年 9 月 19-22 日,加利福尼亚州圣克拉拉(行业合作伙伴赞助商)(http://www.snia.org/events/storage-developer)
EuroBSDcon 2016 和 FreeBSD 开发者峰会,2016 年 9 月 22-25 日,塞尔维亚贝尔格莱德(银赞助商)(https://2016.eurobsdcon.org/)
我们在 EuroBSDcon 的参与包括:
与 ACM-W 欧洲合作举办了 Women in Tech 讨论会
Benedict 组织了 EuroBSDcon 开发者峰会
Deb 做了基金会更新演讲,佐藤広生和 Benedict Reuschling 一起参与了问答环节
Kirk McKusick 进行了为期两天的 FreeBSD 教程(https://2016.eurobsdcon.org/speakers/#kirkmckusick)
George Neville-Neil 进行了关于 FreeBSD 跟踪的 DevOps 和开发者教程(https://2016.eurobsdcon.org/speakers/#georgenevilleneil)
George 还做了主题演讲,题为《BSD 未来几十年》
Phillip Paeps 是该会议的主要组织者之一
OpenZFS 开发者峰会 2016,2016 年 9 月 26-27 日,加利福尼亚州旧金山(银赞助商)(http://open-zfs.org/wiki/OpenZFS_Developer_Summit)
Justin Gibbs 做了关于故障管理的演讲(http://open-zfs.org/wiki/Fault_Management)
我们赞助了三位 FreeBSD 贡献者参加 EuroBSDcon。
法律/FreeBSD 知识产权
基金会持有 FreeBSD 商标,保护商标是我们的责任。我们继续审核请求,并授权使用商标。
FreeBSD 社区参与
我们的市场营销总监 Anne Dickison 一直在负责重写项目的行为准则,帮助创建一个安全、包容和欢迎的社区。
我们做的其他事情
我们欢迎 Kylie Liang 和 Philip Paeps 加入董事会。更多信息和采访请参见:https://www.FreeBSDFoundation.org/blog/FreeBSD-foundation-welcomes-new-board-members/。
George 参加了在剑桥举行的 ARM 合作伙伴会议。
联系人:Allan Jude <allanjude@FreeBSD.org> 联系人:Baptiste Daroussin <bapt@FreeBSD.org> 联系人:Conrad Meyer <cem@FreeBSD.org> 联系人:Ed Maste <emaste@FreeBSD.org> 联系人:Mariusz Zaborski <oshogbo@FreeBSD.org>
最近,一些开发者开始对基于 FreeBSD 系统的额外应用程序进行沙盒化处理。该项工作进展顺利,其中一个目标是将 FreeBSD 中用于安全敏感应用的基本工具,如 freebsd-update 和 portsnap,纳入沙盒化。
该项工作突显了 Capsicum 应用中的两个长期挑战。首先,许多简单程序之间共享许多常见构造,例如在标准输入输出文件描述符上限制权限。为了解决这个问题,已为这些常见情况添加了一组 Capsicum 辅助例程。
其次,另一个常见的挑战是应用程序需要打开大量的文件,可能来自不同目录,在这种情况下,预先打开文件描述符可能不适用。对此,几种可能的解决方案正在讨论中。
最近被 Capsicum 沙盒化的工具包括:
bspatch
cmp
ident
primes
tee
tr
write
正在审查的其他 Capsicum 更改包括:
b64decode、b64encode、uudecode、uuencode
brandelf
dma-mbox-create
elf2aout
file
head
hexdump
iconv
ident
jot
ktrdump
lam
last
ministat
praudit
strings
现在,允许在能力模式下使用额外的系统调用(getdtablesize)和 sysctl(kern.proc.nfds、kern.hostname 等)。
能力权限现在可以传播到子描述符(在 accept(2) 中)。
Capsicum 现在已启用在 32 位兼容性系统调用层中。
为帮助调试现有应用程序的 Capsicum 化,已添加每进程(procctl)和全局(sysctl)设置。当启用时,内核将不再返回 ENOTCAPABLE 或 ECAPMODE 错误码,而是发出 SIGTRAP 信号以生成核心转储或进入调试器。
该项目由 Dell EMC Isilon、ScaleEngine Inc. 和 FreeBSD 基金会赞助。
联系人:Oleg Ginzburg <olevole@olevole.ru>
目前,FreeBSD 已被证明是路由器(pfSense、OPNSense、BSDRP)和 NAS(FreeNAS、zfsGuru、NAS4Free)的基础。然而,基于 FreeBSD 的解决方案几乎完全缺乏虚拟化领域,ClonOS 是其中一种尝试改变这一状况的解决方案。
ClonOS 是一个全新的免费开源的基于 FreeBSD 的平台,用于创建和管理虚拟环境。核心平台包括:
待办事项
我们希望看到 ClonOS 在实际环境中的使用。在这方面,我们希望找到更多使用 FreeBSD 进行托管任务的人和公司。此外,与现有 NAS 解决方案(如 zfsGuru、NAS4Free)的开发者合作也将是一个很好的机会。
联系人:Ed Schouten <ed@FreeBSD.org> 联系人:CloudABI 邮件列表 <cloudabi-devel@googlegroups.com>
CloudABI 是一款紧凑的类 UNIX 运行时环境,灵感来自 FreeBSD 的 Capsicum 安全框架。它允许你在 FreeBSD、Linux 和 macOS 上安全地运行潜在的不可信程序,而无需使用虚拟化、jail 等技术。这使其成为集群/云计算的有用构建模块。
在过去几个月里,多个新库和应用程序已被移植到 CloudABI,其中最重要的新增功能是 Python 3.6。这意味着你现在可以用 Python 编写强沙盒化的应用程序!
对不同硬件平台的支持也有所改善。除了 amd64 和 arm64,现在我们还支持 i686 和 armv6。LLVM 3.9 的发布对我们至关重要,因为它集成了支持前三个平台所需的所有更改。完整的 armv6 支持仍然受到 LLVM 链接器 LLD 的一些问题的限制。
该项目由 Nuxi(荷兰)赞助。
待办事项
尝试使用 CloudABI,告诉我们你的使用体验!amd64 和 arm64 的完全支持已成为 FreeBSD 11.0 的一部分。i686 和 armv6 的支持目前仅在 head 分支中,但将在未来合并到 stable/11 分支。
对 Python 编程感兴趣吗?试试我们的 Python 版本,分享你的体验!
你是否维护可能从强沙盒化中受益的软件?尝试使用 CloudABI 跨平台编译器构建它们!
联系人:Alexander Motin <mav@FreeBSD.org>
非透明桥接(NTB)允许通过使用 CPU 的常规 PCIe 链接在不同系统之间创建内存窗口。在过去的一个季度,NTB 子系统获得了一系列显著的改进和修复:
代码已模块化,利用 FreeBSD 的 NewBus 接口支持不同硬件类型和驱动程序、支持系统中多个 NTB 实例、使用 ntb_transport 模块支持除 if_ntb 外的其他消费者等。
添加了支持在不同应用程序之间拆分 NTB 资源的功能,例如直接访问远程内存的某些范围,以及在节点之间的虚拟网络接口中进行访问等。
虚拟网络接口驱动程序增加了对许多现代特性的支持,如多队列、新的锁机制等。
改进了 NTB 性能和 SMP 可扩展性。
增加了多个硬件问题的解决方法。
该代码已提交到 FreeBSD 的 head、stable/11 和 stable/10 分支。
该项目由 iXsystems, Inc. 赞助。
待办事项
支持下一代英特尔硬件。
支持非英特尔硬件(AMD、PLX 等)。
支持 I/OAT 和其他 DMA 卸载。
创建更高效的数据包传输协议。
创建更多样化的 NTB 应用程序。
联系人:FreeBSD 图形团队 <freebsd-x11@FreeBSD.org> 联系人:Matthew Macy <mmacy@nextbsd.org> 联系人:Johannes Lundberg <yohanesu75@me.com>
我们很遗憾地报告,两个谷歌编程之夏项目都未完成。libdevq 项目被放弃,因为学生不见了。内核项目未完成,因为学生因个人原因无法继续工作。尽管 2016 年的谷歌编程之夏已结束,他计划恢复工作并完成任务。
X.org 服务器版本 1.18.4 和针对 xf86-video-ati 和 xf86-video-intel DDX 驱动程序的更新已准备好进行更广泛的测试。将很快发布 CFT。这些更新是使用更新的 DRM 版本所必需的。
amdgpu 驱动程序所需的 libdrm 中缺失的功能已经添加。这些更改将在 xorg-server 更新后提交到 Ports 中。
Linux 4.8 的 DRM 已被移植到 drm-next 分支。此分支应与 radeon 和 amdgpu 卡一起使用。由于 drm-next 分支中的英特尔驱动程序不稳定,应该使用 drm-next-4.7 分支来支持 i915 卡。
Johannes Lundberg 一直在致力于使 Wayland 环境能够在 FreeBSD 上运行。Wayland Port 已处于工作状态,除了 Weston 合成器之外。
当前的 Weston Port (来自 DragonFlyBSD)可能会被放弃,重新从头开始创建一个新的 Port,基于上游源代码。由于使用了 libinput、libudev-devd 和 epoll-shim,差异不会很大,且更易于维护。
wlc(另一个 Wayland 合成器)的补丁正在向上游提交。待办事项列表中包括将 tty 代码重构为可选择的后端(Linux、FreeBSD 等),这是 wlc 作者推荐的。目前,它在 FreeBSD 上运行,并且补丁已在 Ports 中。
联系人:Ed Maste <emaste@FreeBSD.org>
lld 是 LLVM 项目中的链接器。它是一个高性能的链接器,支持 ELF、COFF 和 Mach-O 对象格式。尽可能地,lld 保持与现有的 GNU BFD ld 和 gold 链接器在命令行和功能上的兼容性。然而,lld 的开发者并不受限于严格的兼容性,特别是在这些兼容性会妨碍性能或所需功能时。
与当前在基本系统中使用的 GNU ld 2.17.50 相比,lld 将带来以下改进:
支持 AArch64(arm64)
链接时优化(LTO)
新的 ABI 支持
其他链接器优化
更快的链接时间
维护中的代码库
上游的 lld 项目现已实现了几乎所有链接 amd64 FreeBSD 基本系统所需的功能,包括内核。引导加载程序组件和恢复工具目前还不能通过 lld 编译。
该项目由 FreeBSD 基金会赞助。
待办事项
将 lld 合并到 FreeBSD 的 head 分支,作为 Clang 3.9.0 导入的一部分。
请求使用安装为 /usr/bin/ld 的 lld 进行 Port 实验运行(exp-run)。
修复引导加载程序与 lld 一起构建的问题。
修复与 lld 一起构建恢复工具的问题。
测试并不断改进 lld 对其他架构的修复。
联系人:許立文 <lwhsu@FreeBSD.org> 联系人:Oleksandr Tymoshenko <gonzo@FreeBSD.org>
FreeBSD 提供了一个 API,供来宾操作系统访问主机上的共享文件夹,从而使内核驱动程序能够将这些文件夹暴露给来宾的用户空间。该项目旨在将此功能添加到 VirtualBox 客户端附加组件驱动程序中。
在过去几个月里,项目取得了良好的进展。开发人员已经能够以只读模式挂载文件系统,并且在某些限制下,也能够以读写模式进行挂载。虽然实现仍然缺少一些关键部分,但发展路线图已非常明确。
待办事项
完成缺失的部分。
实现适当的锁定机制。
一般性的清理和修复。
联系人:Alexander Motin <mav@FreeBSD.org> 联系人:Andriy Gapon <avg@FreeBSD.org>
FreeBSD 中的 ZFS 代码库定期进行新代码合并,以保持与最新的 OpenZFS/Illumos 源代码同步。最近的合并包括以下改进:
ARC 现在大多存储压缩数据,和磁盘上的数据一样,并按需解压。
L2ARC 现在存储与 ARC 相同的(压缩)数据,且无需重新压缩,并且其内存使用量进一步减少。
间接块的最大可能大小已从 16KB 增加到 128KB,现在会执行间接块的预测预取。
改进了空间分配的顺序。
现在支持 SHA-512t256 和 Skein 哈希算法。
联系人:Vladimir Kondratiev <wulf@cicgroup.ru> 联系人:Oleksandr Tymoshenko <gonzo@FreeBSD.org>
evdev 是 Linux 接口 /dev/input/eventX
的可移植、API 兼容的实现。它支持多种输入设备,如键盘、鼠标和触摸屏(支持多点触控),并且该支持已经在许多现有的用户空间组件中实现,例如 Qt、libinput 和 tslib。
evdev 支持由 Jakub Klama 作为 2014 年谷歌编程之夏项目开始,后来由 Vladimir Kondratiev 完成。关于 ukbd 和 ums 的通用 API 和 evdev 支持已提交到 head 分支。同时,还为 TI 的 AM33xx 触摸屏控制器(流行的 BeagleBone 基于 AM33xx)和树莓派的官方触摸屏增加了支持。已成功演示了树莓派的多点触控支持,使用的是最新的 Qt 开发分支。
待办事项
文档编写,特别是需要为 KPI 编写手册页面。
支持更多硬件。
在现有 Port 中启用 evdev 支持,并添加新的依赖 evdev 的 Port。
联系人:Jan Medala <jan@semihalf.com> 联系人:Jakub Palider <jpa@semihalf.com>
弹性网络适配器(ENA)是由 Annapurna Labs 基于定制的 ARMv8 芯片开发的 25G SmartNIC。这是一款高性能网络卡,提供给 AWS 虚拟机使用。它引入了网络利用率扩展性的增强功能,尤其是在运行 FreeBSD 的 EC2 机器上。
FreeBSD 的启用目标是提供顶级性能和广泛的监控与管理功能,如:
多队列模式
各种卸载功能
管理队列
异步通知
强大的硬件访问
可扩展的 MSI-X 中断数量
计数器
目前的状态是,在直接在硬件上运行 FreeBSD 的机器上,驱动程序已稳定运行并提供良好的性能。
该项目由 Annapurna Labs(亚马逊公司)赞助。
待办事项
优化虚拟化环境中的性能。
准备将驱动程序提交为 Phabricator 审查。
联系人:Sepherosa Ziehau <sepherosa@gmail.com> 联系人:Hongjiang Zhang <honzhan@microsoft.com> 联系人:Dexuan Cui <decui@microsoft.com> 联系人:Kylie Liang <kyliel@microsoft.com>
本季度,Hyper-V 存储驱动程序得到了大幅改进:通过应用 BUS_DMA 和 UNMAP_IO、扩大请求队列,并在选择出站通道时考虑 LUN,性能提高了 1.2-2 倍;启用了 TRIM/UNMAP;并修复了一些关键 bug(PRs 209443、211000、212998),现在应该可以正常进行磁盘热添加/移除以及 VHDX 在线调整大小。
VMBus 驱动程序也得到了改进,增强了设备热添加/移除的处理。
在 Hyper-V 网络驱动程序中,现在支持可配置的 RSS 密钥和动态 MTU 更改。
FreeBSD 在 Azure 上的镜像持续更新——在 6 月发布了 FreeBSD 10.3 虚拟机镜像到全球 Microsoft Azure 后,Microsoft 还在 9 月发布了 Microsoft Azure 在中国由 21Vianet 运营的虚拟机镜像。
已经开发了补丁以支持 PCIe 直通(也称为离散设备分配);该功能允许将物理 PCIe 设备直通到运行 FreeBSD 的 Hyper-V 虚拟机(Windows Server 2016),提供接近原生的性能并且 CPU 利用率低。启用此功能的补丁将很快发布进行审查。
该项目由 Microsoft 赞助。
联系人:Konstantin Belousov <kib@FreeBSD.org>
对时间管理代码进行了改进,确保其正确锁定。现有代码在读取器(包括内核空间和用户空间)之间正确协作,允许它们无锁访问实际数据(‘timehands’),从而从时间计数硬件中推导出当前时间。更新 timehands 的操作,包括周期性时钟中断、ntpd 驱动的 sys_ntp_adjtime(2) 系统调用、settimeofday(2) 系统调用、PPS 同步以及可能的其他来源,并未进行协调。更糟糕的是,NTP 代码被 Giant 锁定,实际上并没有发挥任何作用。
通过这些改进,已应用锁定机制,确保任何 timehands 调整操作由单一的修改器执行。一个有趣的案例是来自内核顶部的 timehands 并行修改,例如 settimeofday(2) 系统调用和同时发生的时钟滴答事件,其中系统调用已获得资源。在这种情况下,强烈希望不要在滴答处理程序中阻塞(旋转),而是由已经执行的调用来进行所需的调整。为此,我们实现了 mtx_trylock_spin(9) 操作,这在我们的自旋锁实现中出奇地缺失。
用户空间的 gettimeofday(2) 实现得到了增强,允许在使用 HPET 硬件的时间计数器上进行无系统调用的操作。HPET 算法与旧的基于 RDTSC 的代码共存,允许动态切换时间计数器。HPET 寄存器的页面通过 mmap(2) 只读映射到 libc 中的用户空间应用程序地址空间。测量结果显示 gettimeofday(2) 性能略有提高,但并不出乎意料,即使是无系统调用的 HPET 时间计数器也比调用 RDTSC 的系统调用要慢。
一些并非完全相关但相关的代码是时间限制的休眠实现。调用和处理超时的上半部分代码之间的竞争条件,依赖于 callout_stop(9) KPI(内核编程接口)的许多细节。特别是,竞争或不准确的 KPI 更改通常会导致“捕获所有”无法终止的线程状态,出现“-” 等待链错误。休眠队列超时代码被重写,不再依赖 KPI 细节,从而去除了重复 bug 的源头,并且意外简化了代码。
该项目由 The FreeBSD Foundation 赞助。
联系人:Gavin Atkinson <gavin@FreeBSD.org> 联系人:Pedro Giffuni <pfg@FreeBSD.org>
与以往所有的谷歌编程之夏一样,FreeBSD 继续作为受邀组织参与,今年我们有机会指导 15 个项目。衷心感谢所有导师,保持了我们的社区高质量的标准。
今年的一个亮点是,我们首次接受了社区中一些知名成员作为共同导师,这些人并非源码提交者。我们还接受了来自 FreeBSD 之外的上游项目的项目。这两个变化都清楚地表明 FreeBSD 在成长,并且正在适应更广泛的社区。
今年我们也遇到了一些 Perforce 管理上的问题,已正式接受使用外部代码库,特别是 github,这是学生们的要求。
15 个项目中有 12 个成功完成,我们认为这是谷歌编程之夏的一个优秀成绩。
该项目由谷歌公司和 The FreeBSD Foundation 赞助。
待办事项
世界在变化,我们需要新的项目想法。我们需要立即开始寻找这些想法。
项目想法的 wiki 页面已重置,我们需要在申请下一届谷歌编程之夏前填写它。请帮助释放你希望在 FreeBSD 中看到的下一个项目流。
联系人:Mateusz Piotrowski <0mp@FreeBSD.org>
该项目在今年的谷歌编程之夏中启动,目标是创建一个库,能够将 Linux 审计格式或 Windows 使用的格式的审计轨迹文件转换为 FreeBSD 用于审计日志的 BSM 格式。除此之外,我还想创建一个简单的命令行工具,并扩展 auditdistd 使其能够通过安全连接接收非 BSM 格式的日志,并将这些审计日志保存到磁盘上,最好是 BSM 格式。
到目前为止,已经能够合理地将一些常见的 Linux 审计日志事件转换为 BSM,但仍然需要大量工作。其次,我已经能够配置 auditdistd 与 CentOS 通过不安全的连接进行通信。第三,命令行工具可用,但还不完美。
当前的工作重点是配置 CentOS 与 auditdistd 之间的安全 TLS 连接。我已经尝试过使用 rsyslogd,但未能使其正常工作。
该项目由谷歌编程之夏赞助。
待办事项
我需要更多稀有 Linux 审计日志的示例;如果你有任何示例,请发送给我。使用实际的审计事件示例进行代码编写,可以更轻松地改进转换过程。
配置 auditdistd 能够通过 TLS 与 CentOS 上的一些软件进行通信,以接收审计日志。我未能找到一个简单的解决方案。
更多的开放任务可以在 Wiki 页面和项目根目录下的 TODO 文件中找到。
联系人:Vincenzo Maffione <v.maffione@gmail.com>
该项目提供了:
一个新的驱动程序(if_ptnet),用于支持仿真化网络设备,参考 netmap API 进行建模。该驱动程序支持多队列 netmap Port,并且能够同时在 netmap 模式和常规模式下工作。
作为 bhyve 虚拟机监控器模块的 ptnet 设备模型仿真。
ptnet 设备和驱动程序的引入,旨在克服 bhyve 虚拟机之间 TCP/IP 网络通信的性能限制。在此之前,VM-to-VM 内部主机的 TCP 通信中,最具性能的解决方案提供的 TCP 吞吐量不足 2 Gbps。通过 ptnet,在相同的 VM-to-VM TCP 通信场景中,最多可以获得 20 Gbps 的吞吐量。
该项目由谷歌编程之夏赞助。
待办事项
将 virtio-net 头管理代码与 if_vtnet 驱动程序共享。目前的代码中,大约有 100 行代码被复制并粘贴自 if_vtnet.c。
联系人:Jan Medala <jan@semihalf.com> 联系人:Michal Stanek <mst@semihalf.com> 联系人:Wojciech Macek <wma@semihalf.com>
Alpine 是一系列由 Annapurna Labs 开发的片上平台设备,包括多核 32 位(第一代 Alpine)和 64 位(Alpine V2)ARM CPU。
Alpine 平台的主要关注领域是高性能网络、存储和嵌入式应用。网络子系统包括支持虚拟化、负载均衡、硬件卸载和其他高级功能的 10、25 和 50 Gbit 以太网控制器。
一个基础的补丁集已经提交到主干,包括:
PCIe 根复杂设备支持
缓存一致性单元驱动程序
北桥服务驱动程序
更新的 Alpine HAL
扩展的 GICv2 和 GICv3 代码中的 MSI 支持
附加工作,例如 MSI-X 驱动程序和完整的以太网支持,目前正在 Phabricator 上进行社区评审。
多用户 SMP 系统稳定且完全正常运行,同时支持 1G 和 10G 以太网连接。
中断管理代码已经调整为支持新的 INTRNG 框架,适用于 ARM32 和 ARM64。
该项目由 Annapurna Labs(亚马逊公司)和 Semihalf 赞助。
联系人:Marcin Wojtas <mw@semihalf.com> 联系人:Bartosz Szczepanek <bsz@semihalf.com>
FreeBSD 包含对 Marvell Armada38x 平台的支持,该平台已经经过测试和改进,以达到生产质量。大部分工作都投入到了片上千兆以太网(NETA)功能的开发和基准测试中。已经修复了许多错误并引入了一些新特性。
本季度完成的工作包括:
对 NETA 进行重新设计和改进。
在 PCIe 2.0 驱动程序(mv_pci_ctrl)中启用多端口支持。
为 armv7 架构引入一种替代的、一致的 bus_dma。
支持 AHCI 控制器。
支持 SDHCI 控制器。
改进 e6000sw 以太交换机驱动程序。
修复 Marvell 总线配置问题,支持多个接口。
随着对新板卡(SolidRun ClearFog 和 DB-88F6285-AP)的支持,所有更改将被提交到上游。
该项目由 Stormshield 和 Semihalf 赞助。
待办事项
完成 NETA 并准备提交。
提交剩余的修复和驱动程序。
联系人:Andrew Turner <andrew@FreeBSD.org> 联系人:Jared McNeill <jmcneill@FreeBSD.org>
已经添加了透明超级页面支持。这使得 FreeBSD 可以创建 2MiB 的块,并通过一个单独的页表和 TLB 条目来进行管理。这在 ThunderX 机器上的 buildworld 时间上展示了小幅但显著的提升。超级页面已经在主干中启用,并合并到 stable/11,但由于稳定性测试不足,在 stable/11 上默认是禁用的。
移除了对早期 INTRNG 中断框架的支持。这意味着 arm64 架构现在需要 INTRNG 才能进行编译。这也使得在与中断控制器交互的 arm64 驱动程序中可以进行多项清理工作。
引入了 Linaro 的 cortex 字符串库。经过验证,部分内容优于之前的 C 代码,并已附加到 libc 构建中。
正在进行添加 ACPI 支持到内核的工作。在 ThunderX 上,FreeBSD 已经可以到达 mountroot 提示符,然而由于 ACPI 表不完整,所需的外部 PCIe 支持还未能在测试集群中的 netboot 设置中正常工作。
Pine64 的支持已经提交到主干。FreeBSD 现在可以启动到多用户模式并启用 SMP。这包括对时钟、安全 ID 控制器、USB 主控制器、GPIO、不可屏蔽中断、AXP81x 电源管理单元、CPU 频率和电压调节、MMC、UART、千兆以太网、看门狗和温度传感器的支持。
该项目由 FreeBSD 基金会和 ABT Systems Ltd 赞助。
联系人:Konstantin Belousov <kib@FreeBSD.org>
UEFI(统一可扩展固件接口)为操作系统提供了两类服务。启动服务设计用于操作系统加载器加载和初始化内核,而运行时服务则供内核在常规系统操作中使用。启动和运行时阶段是明确分开的。在启动时,当加载器被执行时,机器配置由 UEFI 控制;而在运行时,内核管理配置,但需要通知固件关于所做的任何更改。
启动/运行时配置的模型假设了某些操作系统架构,而这些假设并不完全适用于现有的 FreeBSD 代码库。例如,固件通知未来的运行时配置必须在加载器仍然控制时进行。从技术上讲,SetVirtualAddressMap() 调用必须在 amd64 系统上以 1:1 的物理到虚拟映射进行,这对于 FreeBSD 来说意味着该调用只能由加载器发出。但加载器需要了解内核地址映射的详细信息,以提供所请求的信息。这就导致了加载器与内核之间产生了不幸的耦合。
阅读关于 MS Windows 启动过程的公开信息,解释了 UEFI 控制转移模型。Windows 加载器构建了内核的地址映射,而在这种工作划分下,UEFI 模型是合理的。FreeBSD 内核构建其自己的地址空间,仅依赖加载器构建的最小映射,这足够 pmap 子系统自举,并在公共代码中进行机器初始化。
启用运行时服务的初步实验集中在利用 amd64 系统上的直接地址映射(DMAP)。目前,DMAP 总是存在,并至少将物理地址的下 4G 线性映射到某个 KVA 位置。假设内核会从其 ELF 镜像中导出 DMAP 详细信息,如线性基址和保证大小,并提供所需的溢出映射,如果 DMAP 无法完全服务的话。不幸的是,这种方法发现了两个致命错误。
首先,基于 EDK 的固件显然要求运行时映射和物理映射同时存在,以进行 SetVirtualAddressMap() 调用。其次,一些开源项目提到,有些固件要求在运行时调用期间必须存在物理映射。实际上,这强迫内核和加载器为所有运行时调用提供这两种映射。
在这种限制下,将内核地址空间的细节通知固件只会增加不必要的工作。我们可以在运行时建立 1:1 物理映射,完全摆脱 SetVirtualAddressMap() 调用。这种方法已经编码实现,内核接口基于此来访问运行时服务。
在开发过程中,特别是在尝试进行加载器修改时,很快意识到 loader.efi 中缺乏故障报告功能。机器异常导致了静默挂起。令人奇怪的是,在这种情况下,Intel 固件会通过串口以 115200/8/1 设置输出错误代码,而不管 UEFI 控制台配置如何,这一发现是偶然的。不幸的是,错误代码本身不足以诊断大多数问题。
为 amd64 的 loader.efi 编写了一个原始的故障报告器,拦截来自固件 IDT 的异常,并将机器状态转储到加载器控制台。由于拦截的复杂性以及可能的错误可能造成更多麻烦,该转储程序仅在管理员显式操作时启用。
需要注意的是,所描述的工作仅提供了内核接口,使得调用 EFI 运行时服务变得像调用常规 C 函数一样简单。利用新接口开发的面向用户的功能正在进行中。
该项目由 FreeBSD 基金会赞助。
联系人:KDE 在 FreeBSD 上团队 <kde@FreeBSD.org>
KDE 在 FreeBSD 上团队专注于打包 KDE 软件,并确保在 FreeBSD 上运行 KDE 和 Qt 的体验尽可能好。
本季度,以下重大更新已在 Ports 中提交:
向 multimedia/mlt 添加了 Qt5 选项。
添加了 devel/grantlee5 Port,并随之添加了 Uses/grantlee.mk。
添加了 multimedia/gstreamer1-qt5 Port。
添加了 net-im/telepathy-qt5 Port。
更新了 CMake 至 3.6.1 和 3.6.2 版本。
修复了 qmake 中一个重要的 bug,解决了 clang 版本未正确检测的问题。
将 Qt 5.6.1 提交到 ports。
在准备 Qt 5.6.1 时,更新了 Phonon 及其后端至 4.9.0。
将 net-im/telepathy-qt4 Port 更新至 0.9.7。
进行了多项与 LibreSSL 相关的修复,由 Matthew Rezny 完成。
将 bsd.kde4.mk 替换为 Uses/kde.mk。
修复了 www/webkit-qt5 依赖系统级别的 leveldb。
在我们的开发仓库中,已完成以下工作:
plasma5 分支与 KDE 上游保持同步,并包含 Frameworks 5.26.0、Plasma Desktop 5.8.0 和 Applications 16.08.1(branches/plasma5)。
联系人:Olivier Duchateau <olivierd@FreeBSD.org> 联系人:Jesper Schmitz Mouridsen <jesper@schmitz.computer>
LXQt 是 LXDE(轻量级桌面环境)的 Qt 移植版及其即将发布的版本。它是 LXDE-Qt 和 Razor-qt 项目的合并产物。
移植工作仍然是个进行中的项目:它需要 Plasma 5 的一些组件——这是 KDE 新版的工作区。
0.11 分支的移植工作现已完成,并引入了新的 Port (与之前的版本相比)。请参阅我们的 wiki 页面以查看完整的应用程序列表。
我们还对以下内容进行了更新:
x11-toolkits/qtermwidget(0.7.0)
x11/qterminal(0.7.0)
x11/qterminal-l10n
待处理任务:
改善 sysutils/lxqt-admin 中对 FreeBSD 的支持,特别是在用户管理方面。
添加额外的面板插件。
联系人:FreeBSD Xfce 团队 <xfce@FreeBSD.org>
Xfce 是一个为 Unix 和类 Unix 平台(如 FreeBSD)设计的自由软件桌面环境。它的目标是快速且轻量,同时具有视觉吸引力且易于使用。
在本季度,团队已保持以下应用程序的最新版本:
audio/xfmpc(0.2.3)
deskutils/xfce4-notifyd(0.3.2)
deskutils/xfce4-volumed-pulse(0.2.2)
devel/thunar-vcs-plugin(0.1.5)
misc/xfce4-weather-plugin(0.8.8)
sysutils/xfce4-settings(4.12.1)
x11/xfce4-clipman-plugin(1.4.0)
x11/xfce4-dashboard(0.6.0)
x11/xfce4-goodies,Xfce4 Goodies 项目的元 Port (插件,应用程序)
x11/xfce4-whiskermenu-plugin(1.6.0)
我们还跟踪不稳定版本;当前的不稳定版本为以下组件提供了 Gtk3 支持(可在我们的实验性仓库中找到):
audio/xfce4-mpc-plugin(0.4.99)
sysutils/garcon(0.5.0)
sysutils/xfce4-battery-plugin(1.0.99)
sysutils/xfce4-diskperf-plugin(2.5.99)
sysutils/xfce4-fsguard-plugin(1.0.99)
sysutils/xfce4-netload-plugin(1.2.99)
sysutils/xfce4-systemload-plugin(1.1.99)
www/xfce4-smartbookmark-plugin(0.4.99)
x11/libexo(0.11.1)
x11/libxfce4menu(4.13.1)
x11/xfce4-dashboard(0.7.0)
x11/xfce4-terminal(0.6.92)
x11/xfce4-whiskermenu-plugin(2.0.1)
x11-clocks/xfce4-datetime-plugin(0.6.99)
目前,不稳定版本与我们在 Ports 中提供的 Gtk3 Port 兼容,但未来将移除对 3.18 版本的支持,转而支持 3.20.x。
待处理任务:
继续跟踪不稳定版本。
联系人:Sevan Janiyan <sevan@FreeBSD.org>
为了参加 EuroBSDcon,我开始研究我们操作系统家族内组件的 inconsistencies(不一致性)。我的工作流程包括阅读给定工具的文档并检查版本控制系统中的历史记录,寻找 NetBSD、FreeBSD、OpenBSD 和 DragonFly BSD 中树状结构里缺失的修复或功能。
很快,我发现了一个显而易见的问题:尽管我们有共同的遗产,但操作系统之间对于工具的来源或版本存在不一致。
我开始查看 FreeBSD 中的 man 页面,验证那些已有历史部分的页面的细节,并为那些没有历史部分的页面编写补丁。
然后,我将这些变更传播到 NetBSD、OpenBSD 和 Dragonfly BSD 中(适用时,不是所有工具都来自相同的来源或实现)。
这项工作是一次很好的锻炼:
熟悉 mandoc。
使用 mandoc 中的 lint 功能以及 igor 文档脚本。
熟悉文档记录的位置,以及外部历史信息源,例如 FreeBSD 基本系统中的 BSD 家族树,和像 UNIX 遗产协会 以及 cat-v.org 上的 手册库 这样的项目,这些项目托管了如 Research UNIX 提供的手册副本,这些手册在其他地方不常见。
待处理任务:
覆盖剩余的用户空间工具的手册,可能还要扩展到库和系统调用 API,尽管我这么说并没有评估其可行性。从闭源操作系统起源的组件历史很难记录,因为旧版本并不总是可用的。
最后更新于
这有帮助吗?