GSoC/GCI Archive
Google Summer of Code 2012

FreeBSD

Web Page: http://wiki.freebsd.org/IdeasPage

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

FreeBSD is an advanced operating system for modern server, desktop, and embedded computer platforms.  The FreeBSD Project began 15 years ago in 1993, but is based on the work at Berkeley CSRG with open source revision history going back 30 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

Projects

  • Automated Kernel Crash Reporting System This project aims to develop an information system for automated kernel crash reports for the FreeBSD operating system. When a FreeBSD system has a crash and responsible is a kernel panic, a crash reporter program will collect some necessary data from the crashed system and deliver them automatically in the form of a report to a central machine. The central machine will receive these reports, check them for validity, store them in a database, recognize which crash reports refer to previously reported bugs, and provide a dynamic website for the presentation of the collected data with different features for the community and the developers of FreeBSD.
  • CPU percentage limits The goal of the project is to add the CPU percentage usage accounting to the existing racct/rctl infrastructure. I want to make it possible for the system administrator to limit either a particular process, a particular user or a particular jail to for example 30% CPU.
  • FreeBSD/arm and FDT cleanup This project aims to clean up and refactor FreeBSD/arm and Flattened Device Tree implementation code.
  • Improve BSD-licensed text processing tools. My proposal is to improve, complete, and optimize the BSD-licensed text processing tools grep, sort, diff, diff3, sdiff, and mdocml. This will include adding features to diff/diff3/sdiff and mdocml and improving the efficiency of grep and sort.
  • IPV6 Improvement [Userland] Improve the IPv6 support in userland according to the TODO list provided by the FreeBSD network team.
  • Kernel level file integrity checker This project will focus on providing file integrity checking capabilities to pefs. The file integrity checker will compare cryptographic checksums of files against a static signed checksum list at access time. The files are thought to be immutable and use of securelevel will guarantee that lower filesystems will protect those files. Securelevel will be extended to only permit execution of files with immutable flag set.
  • Parallelization in The FreeBSD Ports Collection and pkgng utility The FreeBSD Ports Collection has been a primary system for building and installing software on FreeBSD since FreeBSD 1.0. Nevertheless, it does not provide a safe way for building several ports simultaneously. Port’s dependencies are built sequentially. To maintain the system in consistent state while building several ports it is necessary to prevent concurrent access to shared files and directories from multiple processes. My approach is based on lock files, that serve both as barriers and critical section triggers for several concurrent processes. An important aspect of my project is dealing with various failures and unexpected terminations of port’s build process to avoid any deadlock situations and inconsistent state of the ports system. Firstly, my changes to the ports framework allow safe way to build and install several ports at the same time. Secondly, I designed a convenient approach for parallel port’s dependencies builds. The main aim of this project is to make system updates faster and easier. My modifications to the ports collection allow multicore servers to use all its potential both by installing several ports and several port’s dependencies simultaneously. Same goes for the Tinderbox and pointyhat systems used by port committers. Another benefit of my project is package building with pkgng, since the build systems can build packages in parallel.
  • Port FreeBSD/arm to BeagleBoard-xM The purpose of this project is to run FreeBSD on BeagleBoard-xM device - OMAP3 based multifunctional board. The main work will be to implement OMAP3 support and peripherals like ethernet, usb host, audio and DVI video devices included in BeagleBoard-xM
  • Port NetBSD's UDF implementation FreeBSD has an implementation of the UDF filesystem but it is not the latest version and doesn't support many features from newer UDF revisions (>=2.01), such as Metadata Partition or Pseudo OverWrite method. Support UDF is also readonly. NetBSD implementation by Reinoud Zandijk supports most of new UDF features and has write support too. First of all I will support new revisions only for reading and subsequently write support.
  • Re-enginer the wheel: a rejuvenation of BSD callout(9) and timer facilities In all the BSD kernels, timers are provided using the callout(9) facility, which allows a function to be registered in order to be called at a future time. Right now, FreeBSD can't handle timeouts less then 2/HZ and precision less then 1/HZ. According to some recent tests, other OSes can do it much better. Some consumers may need better resolution, and this is important in lots of applications, e.g. allow faster TCP recovery in case of error or package loss, or real-time applications.
  • Userland Lock Profiling and Verification This project will provide userland lock profiling and lock order verification functionality, based on the LOCK_PROFILING and WITNESS kernel options. Application developers will be able to build an instrumented application and query statistics via additional library API calls or a gperf-style external data file.