GSoC/GCI Archive
Google Summer of Code 2010

The FreeBSD Project

Web Page: http://www.freebsd.org/projects/summerofcode.html

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

The FreeBSD Project is a large, mature, and yet relatively tightly knit organization. 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. 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.

Our final project submissions can be found at http://code.google.com/p/google-summer-of-code-2010-freebsd/ Actual student work was performed in our project Perforce repository or regularly committed there.

Projects

  • Audit Kernel Events Kernel subsytems such as NFS & PF can be enhanced to log security related information using TrustedBSD's Audit subsystem. The kernel audit framework will need serious reworking itself because it is currently based on the notion that information is gathered only through system calls and a single kernel thread will be involved in at most one security event at a time. This project will focus in providing audit support for NFS RPCs and the necessary foundations for modifying other kernel subsystems.
  • BSD-licensed Text-Processing Tools I will write or complete BSD-licensed replacements for the tools man, diff, sdiff, and sort. The rewrite of man will be necessarily be accompanied by integrating the FreeBSD mdocml port into the system base and configuring it as a replacement for the entire groff suite of tools.
  • BSNMP enhancement: A new module The aim of this project is creating a module for the BSNMP framework. The module should be able to monitor jails and log information.
  • Collective limits on set of processes (a.k.a. jobs) The SGI Irix operating system introduces the concept of jobs, which are set of processes handled as a unit. The Irix API provides system calls to set collective resource limits on jobs, which are then enforced by jobs-aware schedulers. This application proposes the implementation of kernel-level and userland support with an Irix-compatible interface for better portability. The efficiency of the implementation is considered a crucial point of this project.
  • Complete libpkg and create new pkg tools The goal of this project is to complete libpkg (created during GSoC 2009) and build a stable set of pkg tools with it. This includes adding any features to libpkg that are needed by the FreeBSD pkg tools and are not present in the library, adding testing to libpkg, and creating any pkg tools that could benefit from libpkg. Additionally, this project will try and keep track of the revisions to pkg_install being made by others, and changes made to the standards of packages on FreeBSD.
  • Complete Package support in the pkg_install tools and cleanup The purpose of this project is to add complete package support in the pkg_tools and in the ports tree. A complete package is a package which includes all the required dependencies in its tarball. Unlike the PBI package format of PC-BSD, once a complete package is installed, it appears as every package contained in the complete package was installed separately. To achieve this goal, use of libarchive in the pkg_tools is planned. Refactoring will also be done to improve code reusability.
  • Distributed audit / log shipping daemon The shipping daemon will deliver the audit trails generated through the network to a master system, that will admin the trails to have the auditing centralized, ease to admin and practical. The admin will have all the trails in one system and can do the security auditing in one system (perhaps a special system to keep the auditing). Some mechanisms as MD5 checksum and cryptographic features will be implemented to guarantee the integrity of the delivery system.
  • Enhance FreeBSD ext2fs to support preallocation and update ext2fs to able to read ext4 file systems This project implement preallocation in ext2fs and update ext2fs to be able to read ext4 file systems and possibly add other functionality, such as write ext4 file systems.
  • File system changes notification Most of the applications in FreeBSD currently use polling because of limitations of kevent-based file change monitoring (gamin, kde). Kevent approach has the same limitation as Linux' dnotify once had: file or directory should be opened to monitor changes, preventing file system unmounting. I propose to develop a kernel level file system changes notification mechanism for FreeBSD overcoming this limitation.
  • FreeBSD project in GSoC FreeBSD Project , Reduced FreeBSD kernel size for embedded, mentor is Warner Losh, sent by Mohammed Farrag, Developing new kernel structure for embedded.
  • Generic DMA engine framework for FreeBSD The aim of this project is to provide a generic, flexible framework for initiating and controlling DMA transfers using General Purpose DMA engines, found in most of embedded SoCs - along with tests and documentation. There are analogous frameworks for NetBSD (dmover(4)) and Solaris (ddi_dmae(9F)), but they are not well suited for embedded targets and don't offer all required features.
  • Make optional kernel subsystems register themselves via sysctl The goal of this project is to provide an easy way of registration of optional kernel components under the kern.features sysctl tree, and spoofing of these values. This will help porters to improve automatic build configuration of ported software. Also writing system administration tools would become easier.
  • Namecache improvements Reliable full path resolution for opened files and directories is becoming expectation from more and more software. Unlike Linux, VFS in FreeBSD is inode-centric and thus full path resolution is hard. Namecache in FreeBSD tends to reclaim intermediate directory vnodes and purges all entries from cache on removing or renaming single entry in directory, making full path resolution even harder. I propose to develop a directory cache that would make reliable full path resolution possible.
  • New experimental infrastructure for stable packages and binary updates This proposal aims to offer at least an experimental implementation of both, in a way that offers user a subset of available ports (from the ports tree) in an ABI-stable way which will also be maintained for at least the period of 12 months from the SoC project start, together with their binary packages and a rsync-like distribution method for both. The proposed technologies for building this infrastructure include reliance on existing FreeBSD tools and libraries, with Lua as the glue language.
  • Port FreeBSD to Yeeloong Yeloong, also known as "rms laptop" is a Chinese-designed netbook based on Loongson 2F CPU. It's popular among Free Software enthusiasts and people who want a small yet powerful netbook and don't care about windows being available. FreeBSD could profit much from thismips relaunch. When this port is done porting to other Loongson-based device should be relatively easy.
  • Ringmap Capturing Stack for High Performance Packet Capturing in FreeBSD The ringmap project has drawn a lot of interest from several research groups. I would like to continue my work on this project in order to improve and extend the developed software for production use in the open source community. I also would like to establish contacts to other software developers and use the opportunity to take part in GSoC for further development of ringmap.