GSoC/GCI Archive
Google Summer of Code 2015

FreeBSD

License: New and Simplified BSD licenses

Web Page: https://wiki.freebsd.org/SummerOfCodeIdeas

Mailing List: http://lists.freebsd.org/mailman/listinfo/freebsd-hackers

FreeBSD is an advanced operating system for modern server, desktop, and embedded computer platforms. FreeBSD provides advanced networking, impressive security features, and world class performance and is used by some of the world's busiest web sites and most pervasive embedded networking and storage devices.

The FreeBSD Project began over 20 years ago in 1993, but is based on the work at Berkeley CSRG with open source revision history going back 35 years to 1978.  Over those years the code base has gone through continuous development, improvement, and optimization. The FreeBSD Project is a large, mature, and yet relatively tightly knit organization, developed and maintained by a large team of individuals. 

There are currently over 300 developers with write access to the main revision control system, and hundreds more with access to our Perforce and Subversion servers for experimental and third party development (this is also where our summer of code students have worked in previous years). We have an active mentoring program to bring all new developers into our community, not just those that we introduce to FreeBSD through the GSoC. There are hundreds of mailing lists, forums, blogs, IRC channels, and user groups all detailed on our main website.  FreeBSD offers a complete operating system in which students can work, not just a kernel or specific userland stack. This allows for interesting work that spans the userland/kernel boundary.

In addition to producing an operating system, FreeBSD has incubated the development of key pieces of infrastructure which are used by other open source projects including bsnmp, jemalloc, libarchive, OpenBSM, and OpenPAM

Projects

  • A FreeBSD/bhyve version of the netmap virtual passthrough for VMs. To avoid VMs networking bottlenecks, I recently worked with my advisors on ptnetmap: a netmap virtual passthrough for VMs. ptnetmap allows userspace applications running in a guest VM to safely use any netmap port with near-native performance (physical devices [14.88 Mpps], software switches [20 Mpps], shared memory channels [75 Mpps]). I developed a preliminary version for linux/KVM hosts. For this GSoC project I propose to work on developing host ptnetmap support for bhyve/FreeBSD.
  • Change gptzfsboot to dynamically discover BEs during bootup Objective of this project is to dynamically discover all BEs during bootup and present them all to user for selection. A selected BE could then be passed to next stage of bootloader for booting up the system.
  • FreeBSD libc security extensions Today’s competing operating systems (OS X, Linux, Android, Windows) already implement many security features, both in kernel and userland. This project aims to reduce the gap in the critical parts of the userland by implementing compile-time boundary checking and security extensions in FreeBSD’s libc.
  • FreeBSD support for CubieBoard Many open source boards have been developed out of which only some have the full support of the freeBSD kernel. This project aims to provide support for some pheripherals which are currently not supported by the freeBSD kernel for CubieBoard1 which is based on AllWinner A10 SoC
  • FreeBSD Test Cluster Automation I would like to work on Testing Infrastructure (FreeBSD cluster). My goal is complete infrastructure for automatization installs and tests of FreeBSD or Linux. The base of this project will be iPXE and iPXE scripts as a backend to control nodes. For frontend I propose a small python webapplication. The applications of this project are non-limited (testing kernels, network test, parallel packages building).
  • JIT compilation for firewalls The aim of this project is to finish and complete JIT compilation for netmap-ipfw. It could (ideally, it will) be reused to add JIT compilation for the base-system ipfw. We achieved basic compilation last summer, and in the worst case, we got a 7x speedup. This will be further evaluated during the summer (if I get to work on this).
  • Linux packages for pkg(8) The goal is to be able to directly use packages from Linux repositories instead of having to write our own set of Linux binary packages. It will also make it easier for people working on the Linux emulation to test things based on newer version of Linux binaries.
  • mtree parsing and manipulation library FreeBSD currently includes several tools that work with file system hierarchy descriptions and each contains its own routines to parse and/or manipulate these descriptions. This project attempts to improve this by designing a library to include all the common code, removing duplications from application code and allowing simple future extensions. It is based on the FreeBSD project idea "mtree parsing and manipulation library."
  • Multiqueue Testing Project The aim of this project is to design and implement a infrastructure, including developing simple test applications using multiqueue tap(4)/tun(4), and instrumentation points to validate that a number of multiqueue behaviours are as expected.
  • NE2000 device model in userspace for bhyve The bhyve hypervisor uses a virtio net PCI device emulation. However, a number of guest operating systems do not have virtio device drivers and are not able to use this emulation. One of the best supported devices, especially in older operating systems, is the NE2000 device. An implementation of a device model for this NIC would allow a larger number of unmodified guest operating systems to run under bhyve.
  • ng_aiccu - a SixXS IPv6 tunnel broker AICCU Netgraph node Implement a netgraph node that connects to a netgraph kernel socket node and a netgraph interface node and understands enough of the AYIYA protocol to pass packets back and forth. Use a control connection to user space to handle all other signalling. Adjust the sixxs-aiccu implementation and add the netgraph implementation as an option for the FreeBSD port.
  • Porting bhyve to ARM-based platforms Nowadays virtualization is an important mechanism being approached by both, hardware designers and software developers. The BSD community created a new hypervisor named bhyve, supporting hardware assisted virtualization only for x86-based platforms (Intel and AMD). This projects proposes to implement support for hardware assisted virtualization on ARM-based platforms.
  • Type-aware kernel virtual memory access for utilities By proposing a specific joint interface of libctf and libkvm that would relay on the machine-independent information provided by the CTF and already existing access to the memory image, we aim to overcome the limitation of utilities such as ps or netstat when it comes to examining a crash dump that comes from a different platform. Furthermore, to demonstrate the functionality and usability of such library, a predefined set of basic userland utilities will be enhanced as a proof of concept.
  • Update Ficl in the Bootloader This project will transition the bootloader from using Ficl 3 to Ficl 4 in an attempt to keep synchronized with Ficl as well as see speed and memory improvements. If time is available it will also try and utilize the new API more efficiently.