+<p>The Foundation provided many project grants over the last quarter, and you
+can read about OpenZFS Zstd support, Linuxulator application compatibility
+improvements, LLDB target support, test lab infrastructure, and WiFi projects
+in other entries in this quarterly report.
+</p>
+<p>The Foundation hired six co-op students from the University of Waterloo during
+the 2020 fall term, as well as one intern. Former co-op student Tiger
+returned, and new students Yang and Zac joined us for the first time.
+</p>
+<p>Tiger worked on improvements to the code-coverage guided kernel fuzzing tool
+Syzkaller, adding new system call definitions so that Syzkaller can expand the
+code it tests. A number of FreeBSD kernel bug fixes have already resulted from
+this work. Tiger also contributed a number of improvements to the ELF Tool
+Chain set of binary utilities, and worked on tooling to run tests from other
+tool suites against ELF Tool Chain.
+</p>
+<p>Zac worked on an improvement to the pkg package management tool, investigating
+and upstreaming patches for FreeBSD support in FreePBX, and investigating
+compiler support for addressing the stack clash vulnerability.
+</p>
+<p>Yang investigated and fixed a compilation bug with the kernel's Skein-1024
+assembly implementation (used by ZFS), and then a number of projects related to
+Capsicum: applying Capsicum to sort(1), implementing a Capsicum service to
+execute utilities, and finally working with developers of the Game of Trees
+(got) version control system to adapt it for Capsicum support.
+</p>
+<p>Our intern Ka Ho focused on improving the desktop experience of the FreeBSD.
+He fixed and improved many items of OBS (Open Broadcaster Software) on
+FreeBSD, worked on FreeBSD native audio support on Firefox, adding a facility
+that user-space audio programs could make use of to enumerate a list of audio
+devices. He also ported the fcitx5 input method framework.
+</p>
+<p>The five Foundation staff members continued contributions in 2020 in both
+ongoing operational tasks (including the Git working group and security team)
+and software development for a number of projects.
+</p>
+<p>Staff members responded to reported security vulnerabilities and release
+errata, prepared patches, and participated in the security advisory process.
+We also worked on proactive security vulnerability mitigations. Syzkaller
+also provided many reports of kernel issues that resulted in
+Foundation-sponsored bug fixes. We worked on several issues relating to
+FreeBSD/arm64 to move it along the path of being a Tier-1 architecture.
+</p>
+<p>We participated in code reviews and supported community members in integrating
+changes into FreeBSD, and triaged incoming bug reports.
+</p>
+<p>We contributed enhancements to many kernel and userland subsystems, including
+the x86 pmap layer, ELF run-time linker and kernel loader, the Capsicum
+sandboxing framework and Casper services, the threading library, some RISC-V
+changes, the build system, tool chain and freebsd-update, network stack
+stability improvements, machine-dependent optimizations, new kernel interfaces,
+DTrace bug fixes, documentation improvements, and others.
+</p>
+<p>### Continuous Integration and Quality Assurance
+</p>
+<p>The Foundation provides a full-time staff member and funds projects on
+improving continuous integration, automated testing, and overall quality
+assurance efforts for the FreeBSD Project.
+</p>
+<p>During the fourth quarter of 2020, Foundation staff continued improving and
+monitoring the Project's CI infrastructure, and working with experts to fix
+the failing builds and the regressions found by tests. The work was focused
+on pre-commit tests and development of the CI staging environment. The other
+main working item is working on the VCS migration to change the src and doc
+source from Subversion to Git. There are also many work-in-progress tasks like
+analysis and improve the tests of non-x86 platforms.
+</p>
+<p>See the FreeBSD CI section of this report for completed work items and detailed
+information.
+</p>
+<h3>Supporting FreeBSD Infrastructure</h3>
+
+<p>The Foundation provides hardware and support to improve the FreeBSD
+infrastructure. Last quarter, we continued supporting FreeBSD hardware located
+around the world. We coordinated efforts between the new NYI Chicago facility
+and clusteradm to start working on getting the facility prepared for some of
+the new FreeBSD hardware we are planning on purchasing. NYI generously
+provides this for free to the Project. We also worked on connecting with the
+new owners of the NYI Bridgewater site, where most of the existing FreeBSD
+infrastructure is located.
+</p>
+<p>Some of the purchases we made for the Project last quarter to support
+infrastructure includes:
+</p>
+<ul>
+<li><p>5 application servers to run tasks like bugzilla, wiki, website, cgi,
+ Phabricator, host git, etc.
+</p></li>
+<li><p>1 server to replace the old pkg server, which will provide a lot more IOPS
+ to avoid the slowdowns seen during peak times of the day where the disks
+ simply cannot keep up with the request volume.
+</p></li>
+<li><p>1 server for exp-runs and to make them faster.
+</p></li>
+<li><p>1 server to build packages more frequently.
+</p>
+</li></ul>
+<h3>FreeBSD Advocacy and Education</h3>
+
+<p>A large part of our efforts are dedicated to advocating for the Project. This
+includes promoting work being done by others with FreeBSD; producing advocacy
+literature to teach people about FreeBSD and help make the path to starting
+using FreeBSD or contributing to the Project easier; and attending and getting
+other FreeBSD contributors to volunteer to run FreeBSD events, staff FreeBSD
+tables, and give FreeBSD presentations.
+</p>
+<p>The FreeBSD Foundation sponsors many conferences, events, and summits around
+the globe. These events can be BSD-related, open source, or technology events
+geared towards underrepresented groups. We support the FreeBSD-focused events
+to help provide a venue for sharing knowledge, to work together on projects,
+and to facilitate collaboration between developers and commercial users. This
+all helps provide a healthy ecosystem. We support the non-FreeBSD events to
+promote and raise awareness of FreeBSD, to increase the use of FreeBSD in
+different applications, and to recruit more contributors to the Project.
+</p>
+<p>While we were still unable to attend in-person meetings due to COVID-19, we
+were able to attend virtual events at new venues and facilitate the first
+online FreeBSD Vendor Summit. In addition to attending and planning virtual
+events, we are continually working on new training initiatives and updating our
+selection of <a href='https://freebsdfoundation.org/freebsd-project/resources/'>how-to guides</a> to facilitate getting more folks to try out FreeBSD.
+</p>
+<p>Check out some of the advocacy and education work we did last quarter:
+</p>
+<ul>
+<li><p>Continued our FreeBSD Fridays series of 101 classes. Topics included an
+ Introduction to Capsicum, Introduction to Bhyve, Introduction to DTrace, and
+ more. Videos of the past sessions can be found <a href='https://freebsdfoundation.org/freebsd-fridays/'>here</a>. We'll be back with new
+ sessions in early 2021.
+</p></li>
+<li><p>Gave a FreeBSD talk at the nerdear.la conference on October 20th.
+</p></li>
+<li><p>Participated in the podcast: <a href='https://freebsdfoundation.org/news-and-events/latest-news/what-the-dev-podcast-a-dive-into-the-freebsd-foundation-on-its-20th-anniversary/'>What the Dev: A Dive into the FreeBSD Foundation on its 20th Anniversary</a>
+</p></li>
+<li><p>Promoted the Foundation's 20th Anniversary in the FossBytes article:
+ <a href='https://freebsdfoundation.org/news-and-events/latest-news/fossbytes-20-years-of-the-freebsd-foundation/'>20 Years of The FreeBSD Foundation</a>
+</p></li>
+<li><p>Continued to promote the FreeBSD Office Hours series. Videos from the one hour
+ sessions can be found on the Project's <a href='https://www.youtube.com/channel/UCxLxR_oW-NAmChIcSkAyZGQ'>YouTube Channel</a>. See the Office Hours
+ section of this report for more information.
+</p></li>
+<li><p>Added two new How-To Guides: <a href='https://freebsdfoundation.org/contributing-freebsd-documentation/'>Contributing FreeBSD Documentation</a>
+ and <a href='https://freebsdfoundation.org/freebsd-project/resources/how-to-submit-a-bug-report/'>How to Submit a Bug Report</a>.
+</p></li>
+<li><p>Worked with the organizing committee to host the <a href='https://wiki.freebsd.org/DevSummit/202011'>November 2020 Vendor Summit</a>
+</p></li>
+<li><p>Promoted the <a href='https://freebsdfoundation.org/news-and-events/latest-news/freebsd-essential-to-bringing-cheri-and-arms-morello-processor-to-life/'>use of FreeBSD</a> in regards to CHERI and ARM's Morello Processor
+</p></li>
+<li><p>Authored a <a href='https://www.fosslife.org/beginners-guide-freebsd'>Beginners Guide to FreeBSD</a> for Fosslife.
+</p></li>
+<li><p>Sponsored All Things Open as a Media Sponsor.
+</p></li>
+<li><p>Sponsored OpenZFS Developers Summit at the Bronze level.
+</p></li>
+<li><p>Applied for a virtual stand at FOSDEM 2021.
+</p></li>
+<li><p>Committed to attend the online Apricot 2021.
+</p>
+</li></ul>
+Keep up to date with our latest work in our newsletters:
+<body><p>This work adds a fib lookup framework, allowing to attach custom IP lookup algorithms to any routing table on the fly. It allows to use more performant and efficient lookup algorithms, dynamically selected based on the number of routes in the routing table. Finally, it provides an implementation of modified DIR-24-8 for IPv4/IPv6, speeding IP lookups for the large-fib use case.
+</p>
+<p>This work is a part of a larger effort to modernise the routing subsystem.
+</p>
+<h3>Background</h3>
+
+<p>FreeBSD runs diverse workloads on both low-end and high-end devices, resulting in different networking/memory requirements for each case.
+Small boxes with a couple of routes are different from routers with full-view.
+IPv4 lookups are different from IPv6 ones.
+Conditions can change dynamically: one may easily reconfigure a system to receive full view instead of a default route.
+</p>
+<p>Currently, FreeBSD uses radix (compressed binary tree) to perform all unicast route manipulations, including routing lookups.
+Radix implementation requires storing key length in each item, allowing to use sockaddrs, transparently supporting virtually any address family.
+This flexibility comes at a cost: radix is <i>relatively slow</i>, <i>cache-unfriendly</i> and adds <i>locking</i> to the hot path.
+Finally, radix is closely coupled to the rest of the system, making it hard to switch to something else.
+</p>
+<h3>Implementation overview</h3>
+
+<h4>Overview</h4>
+
+<p>Modular fib IP lookup framework has been designed to address flexibility and performance requirements.
+</p>
+<p>It keeps system radix as the "control plane" source of truth, simplifying actual algorithms implementation.
+It allows dynamic load new algorithms as the kernel modules and abstracts most OS-specific details, reducing algorithm "glue" code.
+It automatically adapts to the current system state by picking the best matching algorithm for the routing table on-the-fly.
+</p>
+<p>The following algorithms are provided by default.
+</p>
+<p>IPv4:
+</p>
+<ul>
+<li><p>bsearch4 (lockless binary search in a specially-crafted IP array), tailored for small-fib (less than 16 routes)
+</p></li>
+<li><p>radix4_lockless (lockless immutable radix, re-created on every routing table change), tailored for small-fib (less than 1000 routes)
+<body><p>This work targets implementing scalable routing multipath support and enabling it by default.
+It closes the long-standing feature gap with other modern networking OSes.
+</p>
+<p>This work is a part of on-going efforts to modernize the routing subsystem.
+</p>
+<h3>Background</h3>
+
+<p>Initial FreeBSD multipath implementation, <code>RADIX_MPATH</code>, was added back in <a href='https://github.com/freebsd/freebsd-legacy/commit/4e8901ea7a04d2d803067647c0641e41494b8868'>2008</a>. It was based on the radix changes and represented multipath routes as a linked-list of chained paths. It was not fully finished and tested, resulting in many crash reports.
+</p>
+<h3>Implementation overview</h3>
+
+<p>Multipath-related change changes are based on the introduction of the concept of next hops. Nexthops are separate data structures, containing the necessary information to perform packet forwarding. They are shared among the routes, providing more pre-computed cache-efficient data while requiring less memory.
+Interested readers can find a more detailed description in <a href='https://reviews.freebsd.org/D24141'>D24141</a>. They can find another overview in Nexthop objects <a href='https://linuxplumbersconf.org/event/4/contributions/434/attachments/251/436/nexthop-objects-talk.pdf'>talk</a> describing Linux kernel implementation.
+</p>
+<p>Multipath implementation extends the nexthop concept further by introducing nexthop groups. Nexthop group is simply an array of nexthops, compiled according to each nexthop relative weight.
+</p>
+<p>Each route has a pointer to either nexthops or a nexthop group, decoupling lookup algorithm from the routing stack internals. Both nexthops and nexthop groups are immutable and use epoch(9)-backed reclamation.
+<body><p>The Doc New Generation project is finished. The switch-over date will be Saturday, January 23rd.
+</p>
+<p>The objective of using Hugo and AsciiDoctor is to reduce the
+learning curve and let people to start quickly contributing to our documentation
+system. Other benefits of using Hugo is that we can use other
+technologies aside from AsciiDoctor, like MarkDown, RST, Pandoc, etc.
+</p>
+<p>You can find a <a href='https://github.com/sergio-carlavilla/documentation-project-primer'>work in progress on updating the FreeBSD Documentation Project Primer to Hugo/AsciiDoctor</a>.
+<body><p>The FreeBSD Office team works on a number of office-related software suites
+and tools such as OpenOffice and LibreOffice.<br />
+</p>
+<p>Work during this quarter focused on providing the latest stable release of
+LibreOffice suite and companion apps to all FreeBSD users.
+</p>
+<p>Latest and quarterly ports branches got a series of updates of the LibreOffice suite
+from 7.0.1 thru 7.0.4 releases, compilation patches for all Tier 1 architectures,
+and updates of all companion libraries. Some of our local and critical to build patches
+were sent to and accepted by upstream.
+</p>
+<p>Meanwhile, our WIP repository was moved to new home under official github.org/freebsd resources.
+</p>
+<p>The WIP repository also has a major update with development versions of the LibreOffice suite,
+version 7.1.0.0.beta1 for now. Release will be planned in March, 2021.
+</p>
+<p>We are looking for people to help the project.
+All unstable work with LibreOffice snapshots is staged in our <a href='https://github.com/freebsd/freebsd-ports-libreoffice'>WIP repository</a>.<br />
+<url href='https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=249337'>[meta] Ports broken by Python 2.7 End-of-Life and removal</url>
+</links>
+
+<contact>
+<person>
+<name>René Ladan</name>
+<email>portmgr-secretary@FreeBSD.org</email>
+</person>
+<person>
+<name>FreeBSD Ports Management Team</name>
+<email>portmgr@FreeBSD.org</email>
+</person>
+</contact>
+
+<body><p>As of January 2020, Python 2.7 reached its end-of-life after several years of extensions.
+Portmgr subsequently started the project of phasing Python 2.7 out of the Ports Tree by tagging lang/python27 for expiration on 2020-12-31.
+Last year, some 740 ports were removed from the Ports Tree as they were incompatible with Python 3, mostly because these ports were either unmaintained or abandoned upstream.
+</p>
+<p>During this process, there were several instances of an upstream still being active but where the upstream have not had the resources yet to upgrade their software to Python 3.
+A noticeable example of this is www/chromium and derived software, such as devel/electron7 and www/qt5-webengine.
+Portmgr is currently looking into ideas on how to minimize the impact of Python 2.7 on the Ports Tree while keeping Chromium and KDE 5 functional.
+As various software packages on the FreeBSD cluster itself also use Python 2.7, portmgr started coordinating with affected parties on upgrade plans.
+Currently there are 40 ports left that directly depend on Python 2.7 to build or run, and an unknown number of indirect ports.
+All those ports should eventually be upgraded to Python 3 or be removed too, ideally some time this year.
+</p>
+<p>Portmgr is currently cleaning up (unused) Python 2.7 code from ports which do not need Python 2.7.
+New ports should not be using Python 2.7 anymore, i.e. they should not have USES=python but instead something like USES=python:3.6+.
+</p>
+<p>So while this all looks rather invasive, it is not feasible to keep Python 2.7 around for much longer.
+Over time security vulnerabilities might show up which will likely no longer be fixed, because the Python Software Foundation no longer supports Python 2.7.
+Other problems are that the software gets outdated over time and thereby loses its usefulness as part of a development kit.
+</p>
+<p>Help needed:
+</p>
+<ul>
+<li><p>Coordinate with postmaster on isolating or migrating away from mail/mailman
+</p></li>
+<li><p>Coordinate with clusteradm (?) for upgrading svnweb and our wiki
+<url href='https://vincerants.com/freebsd-under-vmware-esxi-on-arm-fling/'>FreeBSD Under VMWare ESXi-ARM Fling</url>
+<url href='https://vincerants.com/freebsd-on-esxi-arm-fling-fixing-virtual-hardware/'>FreeBSD on ESXi-ARM Fling: Fixing Virtual Hardware</url>
+<url href='https://vincerants.com/open-vm-tools-on-freebsd-under-vmware-esxi-arm-fling/'>open-vm-tools for FreeBSD VMWare ESXi-ARM Fling</url>
+</links>
+
+<contact>
+<person>
+<name>Vincent Milum Jr</name>
+<email>freebsd@darkain.com</email>
+</person>
+</contact>
+
+<body><p>VMWare is a company that produces a commercial hypervisor known
+as vSphere ESXi for AMD64 and i386. In early October, they
+released a tech demo hypervisor for ARM Aarch64 which runs
+on ARM ServerReady hardware as well as single board computers
+such as the Raspberry Pi 4b (4GB and 8GB models). This new
+hypervisor is known as VMWare ESXi-ARM Fling.
+</p>
+<p>Since the release of ESXi-ARM Fling, work has been done on
+both the hypervisor as well as FreeBSD, to make the two more
+compatible with one another. Even though the work was
+initially done to make these two work better together, the
+work overall has been more general purpose for FreeBSD
+in support of both bare-metal Aarch64 installations as well
+as running FreeBSD under other hypervisors such as QEMU.
+</p>
+<p>An example of others building off of this work is <url href='https://twitter.com/astr0baby/status/1343354762964717568'>Twitter user astr0baby getting FreeBSD working under QEMU on a new Apple M1 system</url>.
+</p>
+<p>When ESXi-ARM Fling first released, to get FreeBSD to work
+under it, the process required taking the Aarch64 premade
+VMDK file, uploading it to the hypervisor storage, and then
+running a series of CLI commands to convert the disk image
+to a supported file format. The initial work done was to
+get the FreeBSD Aarch64 ISO bootable and with the required
+drivers to complete the install process. With this, users
+can do fresh installs of FreeBSD Aarch64 using the same
+methods they would use for AMD64 or i386 under ESXi.
+</p>
+<p>The CD-ROM driver's inclusion into FreeBSD 12 barely missed
+the cut-off date for 12.2-RELEASE. However, the very first
+12.2-STABLE build published for Aarch64 includes the CD-ROM
+driver. FreeBSD 13-CURRENT also includes this driver. Due
+to this, only 12-STABLE and 13-CURRENT support fresh CD ISO
+installations.
+</p>
+<p>The next step was getting the major pieces of virtual
+hardware working. This included adding more USB controllers,
+the vmxnet virtual network card, and pvscsi para-virtual
+SCSI drivers added to Aarch64 GENERIC.
+</p>
+<p>There is a known bug in ESXi-ARM Fling's virtual UEFI that
+prevents booting from pvscsi, so for the time being the boot
+device must be on a virtual disk attached to the SATA
+controller inside the VM.
+</p>
+<p>ESXi-ARM Fling uses a new virtual SVGA device which
+currently does not have working drivers on any platform, as
+the specifications are not finalized yet. Due to this, only
+efi-fb/scfb is available for console and Xorg for the time
+being.
+</p>
+<p>The VMCI driver is currently not compiling at all. This
+driver has sections of x86 assembly code that will need to be
+converted over to ARM. This would be a great area for
+anyone to look into that is experienced with converting assembly
+language!
+</p>
+<p>At ESXi-ARM Fling launch, there was a hypervisor bug
+preventing more than 1 vCPU from working inside FreeBSD.
+This has since been fixed, allowing up to 8 vCPUs. Going
+beyond this requires a <a href='https://github.com/freebsd/freebsd-src/compare/master...claplace:user/claplace/gicv3_mbi'>a patch to FreeBSD</a>,
+capabilities provide the necessary features to enable
+ robust and efficient revocation of freed pointers. With <a href='https://www.cl.cam.ac.uk/research/security/ctsrd/pdfs/2020oakland-cornucopia.pdf'>Cornucopia</a>
+we have implemented a light-weight revocation framework providing
+ protection from use-after-reallocation bugs with an average cost below
+ 2%. We aim to bring these overheads down further over the next year and
+merge this functionality into the mainline CheriBSD.
+</p></li>
+<li><p>Syncing with upstream FreeBSD - We spent considerable time this
+quarter catching up with FreeBSD-CURRENT. As of the beginning of
+December, we had caught up. Merges are currently paused while we
+work to land Morello and pure-capability kernel changes. In the
+interim, we have performed a test merge between our tree based on
+the legacy export of the FreeBSD tree to git and the new FreeBSD
+git repository. The process went smoothly and is expected to have
+few impacts.
+</p></li>
+<li><p>We have been working on updating the arm64 bhyve from Politehnica
+University of Bucharest to have it committed to FreeBSD. We have been
+upstreaming initial changes to help support this.
+<body><p>Contact: <code>#helloSystem</code> on <code>irc.freenode.net</code>, mirrored to <a href='https://matrix.to/#/%23helloSystem:matrix.org?via=matrix.org'><code>#helloSystem:matrix.org</code> on Matrix</a>
+</p>
+<p>helloSystem is FreeBSD preconfigured as a desktop operating system
+with a focus on simplicity, elegance, and usability.
+Its design follows the “Less, but better” philosophy.
+It is intended as a system for “mere mortals”, welcoming to switchers
+from a world in which a global menu bar exists, the Command key is used
+rather than Control, and applications are contained in .app bundles.
+</p>
+<p>helloSystem grew out of frustration with <a href='https://medium.com/@probonopd/make-it-simple-linux-desktop-usability-part-1-5fa0fb369b42'>usability shortcomings</a> of existing open source
+desktop environments. FreeBSD was chosen as the base because it offers
+one consistent base system rather than a <a href='https://media.ccc.de/v/ASG2018-174-2018_desktop_linux_platform_issues'>fragmented landscape of distributions lacking a common platform</a>.
+</p>
+<p>helloSystem aims at providing a "it just works" out-of-the-box user experience
+in which a non-technical user can just use the system without ever opening
+the terminal, without having to configure anything, and without ever seeing
+white text on a black background scroll by during system boot. Technologies embraced
+include DNS-SD/Zeroconf (also known as Bonjour), IPP Everywhere (also known as AirPrint),
+eSCL (also known as AirScan), etc.
+</p>
+<p>Prerelease installable Live ISO images are available.
+</p>
+<p><a href='https://github.com/helloSystem/hello/blob/master/CONTRIBUTING.md'>Help is needed in a number of areas</a>, especially:
+</p>
+<ul>
+<li><p>FreeBSD/kernel: allowing to put the system into a read-only disk image with a writable overlay, e.g., using unionfs
+</p></li>
+<li><p>Qt, Python: writing various easy-to use frontends for FreeBSD/OpenZFS functionality, e.g., Disk Utility.app