Google Summer of Code 2013 - FreeBSD part II.

Hello guys, welcome to next part of my series about  Google Summer of Code 2013. You might wanna read previous ones: 

Google Summer of Code 2013 - Introduction
Google Summer of Code 2013 - NetBSD
Google Summer of Code 2013 - DragonFlyBSD

This time I will continue writing about FreeBSD. First part is here.

What is FreeBSD?

FreeBSD is an advanced operating system for modern server, desktop, and embedded computer platforms. The FreeBSD Project began 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 thirty 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. 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. 
There are currently over 300 developers with write access to the main revision control system, and hundreds more with access to our Perforce 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.

So, this year, FreeBSD got 14 accepted projects. If you wondering what were other ideas they wanted to make via GSoC, head to Ideas webpage.  

Reports can be found at mailing list. More details about projects at

7. PackageKit backend for pkgng

Project intend to develop, test and document a packagekit backend for pkgng, ideally with the view of being able to use an existing packagekit frontend such as Apper to install, remove and upgrade packages on a FreeBSD system. This will be written in C against the packagekit and libpkg APIs and glib, and the deliverable will be a .so file that can be used by PackageKit as a backend as well as the source code to compile it.
This would make system administration using binary packages easier in these use cases:
  • Situations where multiple systems running different operating systems need to be updated by the same people; for example, University Radio York runs both Debian and FreeBSD systems which could theoretically both be served by packagekit if a pkgng backend is created.
  • Users who wish to install binary packages on FreeBSD, but would prefer to use a graphical user interface;
  • Users who wish to install binary packages on FreeBSD and already know packagekit from an existing supported package manager.
There is an existing packagekit backend for FreeBSD Ports; ideally Project would like to implement as much of the functionality already present in that backend as is applicable to pkgng. However, the core functionality (getdepends, getdetails, getupdates, installpackages, refreshcache, removepackages, searchgroup, searchname and updatepackages) would be the main focus of at least the first leg of the project.
The code (may not be in a compileable state at any given time) is at

8. Port GlusterFS to FreeBSD 

GlusterFS is an open source distributed file system that uses FUSE. It has been used in many different scenarios such as cloud computing. The code of Glusterfs relies a lot on Linux semantics, and now it's becoming usable on NetBSD since NetBSD 6.0. Right now, GlusterFS won't compile on FreeBSD. This project will port GlusterFS and make it fully work on FreeBSD. 

You can see recent changes here

9.VirtualBox shared folder support for FreeBSD guests 

VirtualBox is very popular virtualization product which supports a large number of operating systems. And also has many other features, one of main is "share folders". It is used to transfer files using only internal resources of the system, without network connection. FreeBSD does't have support this features with guests OS,and it is uncomfortable when using VirtualBox, that's why this project is very useful for users and interesting to develop.

Project will implement VFS virtual system for VirtualBox shared folder. This project consist of two parts, understand how VirtualBox work with guest systems and getting it submitted upstream from guest system. Second part is implement VFS virtual system in FreeBSD side, that would be kernel interface to file system, special file system for "shared folder" wich contain files from host system that would be mounted.

10. New capsicum features

New features in Capsicum will be:
- two new capability rights (CAP_SEND_RIGHTS and CAP_RECV_RIGHTS) for control sending and receive descriptors by Unix domain sockets.
-Implement new services for Casper daemon:
      - system.unix - service provides connect and listen on Unix domain socket
      - system.udp  - service enabling connect, listen, sending and receive UDP packages.
- close fetch(1) in capability mode.

11. USB device passthrough support on BHyVe 

Current BHyVe implementation supports only few virtual devices: virtio-blk, virtio-net and UART.
It also able to using physical PCI device by PCI passthrough, but there're many PC which doesn't support IOMMU(It also called Intel VT-d or AMD-Vi, required for PCI passthrough).
This project adds support USB device passthrough on BHyVe.
USB device passthrough doesn't require IOMMU or any other special hardware features, it can support much more PCs than PCI passthrough.
USB is not faster than PCIe, but it has different varieties of devices, and much easier to install on host machine.
The project goal is to support USB 1.1/2.0 device passthrough on BHyVe.

12. PkgNG pluggable solver framework 

PkgNG is the novel package management system designed for using in *BSD systems in conjunction with FreeBSD ports. Currently pkgng uses its own solver, however, it misses important features, such as alternatives logic, advanced conflict resolving and provide/require logic. Furthermore, there are numerous researches related to solver algorithms and pkgng should provide pluggable interface for such solvers and eventually select an optimal one. So the main goal of this project is to design and implement pluggable API for pkgng solver that allows to use experimental solvers with fallback to default solver if there are no external solvers.

13. AHCI device model in userspace for bhyve

Currently bhyve only supports virtio disk for the guest's block device. This project will add AHCI device emulation to bhyve so that we can emulate normal cdroms and disks. This project will benefit bhyve a lot. First of all, since AHCI is widely supported in various Operating Systems, bhyve can support other nonproprietary and proprietary guest OSs without the virtio disk driver in those OSs. Secondly, this project will make it possible to install a GENERIC system from a emulated cdrom device. 

The Code

14. BHyVe suspend/resume feature 

 Suspend/resume, a feature to save a running virtual machine state and to restore the state to a virtual machine help many hypervisor users. Through this project, this feature will be added to BHyVe.

Good luck to all students!



Jan Hovancik

software developer - guitar player - poetry lover