FreeBSD Summer Projects
The FreeBSD Project is excited to take part in the Google Summer of Code 2006. This project
endeavors to fund students to contribute to an open source project over the summer
break.
Example Proposal Ideas
In addition to the student project ideas listed below, the FreeBSD Project maintains a
list of general projects looking for volunteers here.
Userland / Installation Tools
- Bundled PXE Installer: It would be great to have a bundled PXE
installer. This would allow one to boot an install server from a FreeSBIE live CDROM on
one box, set the BIOS on subsequent boxes to PXE boot, and then have the rest happen by
magic. This would be very helpful for installing cluster nodes, etc.
- Fully Integrated SNMP monitoring: Plugins for our BSNMP pieces to
monitor elements of system state such as load, disk space, VM statistics, entropy,
firewall rules and states, sendmail queues and accepts/rejects, and the like. An SNMP
client that could pull and centralize the data gathering, render it, etc. Philip Paeps, Gleb Smirnoff, Harti Brandt, and Robert Watson are coordinating.
- Integrate Xen Support: Support for the Xen virtual machine monitor is
coming into FreeBSD -CURRENT, so the installer could be updated to make it possible to
setup a Xen system with several FreeBSD nodes, etc. Please coordinate with Kip Macy who has done work in this area.
- Improve our regression testing system: Nik Clayton has written a
regression test infrastructure using Perl. More of the regression tests should be made to
work with libtap. There are two main parts to it. First, many of the existing tests
should be moved from using assert() to using ok() and friends from libtap. Second, more
regression tests should be written. Students familiar with scripting languages and
software testing are encouraged to work on this. Nik
Clayton is the coordinator.
- Tracking performance over time: One of the major issues in a project
the size of FreeBSD is monitoring changes in performance characteristics over time. Doing
this requires several things. Those include a suite of appropriate tests, hardware to run
the tests on, a database to store results in, and software to extract interesting results
and display them. Solving the whole problems is probably beyond the scope of one summer's
work, but an interesting subset should be manageable. Brooks Davis is the coordinator.
- Improvements to FreeBSD's userland profiling: There are a number of
enhancements possible to FreeBSD profiling infrastructure: (a) allowing the profiling
clock used by executables compiled for profiling to be driven by hardware performance
monitoring counters, (b) enhancing gprof(1) to profile dynamically linked executables,
and (c) making gprof(1) and moncontrol(3) to be architecture independent. Joseph Koshy is the coordinator.
- A GUI front end for hwpmc(4): Create a GUI tool that can collect
performance data using hwpmc(4) and display it visually. In brief such a tool would
offer: live and offline analysis of a hwpmc(4) data stream, visual indication of hotspots
in executables and shared libraries with the ability to drill down to an annotated source
or machine code listing, system-wide as well as process-specific analyses, visual
representations of callgraphs. Joseph Koshy is
the coordinator.
- BSD licensed API compatible version of GNU readline: Create a
cleanroom implementation that is API compatible with GNU readline but which is not
encumbered by the GPL. Jordan Hubbard is the
coordinator.
Filesystem
- inode versioning: Introduce an inode version number into UFS, so we
can store inodes in different formats. As an example of how to use this, introduce a new
inode format that has a 32 bit link count field. David Malone is the coordinator.
- Autofs: Create the autofs filesystem from a specification.
Candidates should have some filesystem knowledge and network filesystem knowledge. Kernel
transport and interaction with the "amd" automounter needs to be completed. Alfred Perlstein is coordinating.
- Logical Volume Manager
Networking
- IPv6 stack vulnerabilities: Review the last few years worth of IP
stack vulnerabilities. Check that these have been fixed in the IPv6 stack too. Fix ones
that haven't been fixed. David Malone is the
coordinator.
- IPv6 feature parity: Review new features that have been added to the
IP stack (hostcache, TCP MD5 checksums, ...). Check if these include IPv6 support.
Implement if it hasn't. David Malone is the
coordinator.
- NFS Lockd (improve semantics): Improve the semantics of the NFS
lockd in FreeBSD. Apple has made certain enhancements that can be leveraged in our code
base. Implement state recovery in the lockd. Candidate would learn how to port code from
one kernel to another as well as how to maintain state on the client side. This would be
a good resume addition. Alfred Perlstein is
coordinating.
- NFS Lockd (kernel implementation): Improve the semantics of the NFS
lockd in FreeBSD. Moving the lockd implementation into the kernel provides several key
performance and semantic improvements. Candidates should have a good understanding of
NFS, locking, RPC and kernel networking. This is a great resume addition, providing you
want to be saddled with "knowing NFS" for the rest of your career, it is not for the
faint of heart. Alfred Perlstein is
coordinating.
Security
- SecureMines: Add meta-data to the system in order to trap intruders
and provide an audit log. The goal of this project is to create several means of marking
an event as a foreign act (such as opening a trap file) which halts the system and
provides as much information as possible, possibilities include using extended attributes
to tag such "mines". Candidates should have an understanding of the Unix process model
and should be prepared to investigate the new comprehensive audit system in FreeBSD. This
system will shortly have a framework for writing intrusion detection modules. Alfred Perlstein and Robert Watson are coordinating.
- SEBSD: SEBSD is a port of NSA's SELinux FLASK/TE security model to
the FreeBSD operating system using the TrustedBSD MAC Framework. Right now the system is
highly experimental, and a great project would be for one or more students to spend the
summer taking it from an experimental prototype to something that can be actually used.
This might include the development of policy, integration of SEBSD into the installer
components, adaptation of userland components, sample deployments, documentation, and so
on. Candidates will want some background in access control technology, especially
mandatory access control; experience with alternative security models would be a plus, as
would a background in OS development. However, there's room for a range of work here, and
all proposals will be considered! Robert Watson
is coordinating.
- Audit: Audit is a fine-grained security event log mechanism present
in FreeBSD (and other operating systems). FreeBSD's audit implementation is based on
Sun's published BSM API and file format, and will appear in FreeBSD 6.2-RELEASE. A
variety of student projects are available to work on, including tasks such as working on
XML output support and database integration, a graphical audit review tool, distributed
audit log management support, and intrusion detection work. Students are encouraged to
contact Robert Watson who is coordinating.
Kernel
- Generic Input Device Subsystem: Some work has been done in Perforce
that begins to replace the ancient psm->moused->syscons codepath into something
more pleasant. There's still a lot of duplication between psm and moused, however and
even more work is necessary to get syscons to be happy with the new world order. Philip Paeps is coordinating.
- Update the Linuxulator: FreeBSD provides Linux binary compatibility
through a Linux system call table that is invoked when Linux ELF binaries are executed.
This implementation should be compared with an up-to-date Linux Kernel so that important
missing syscalls can be added to ensure that all mainstream applications continue to work
on FreeBSD. The student should be able to read and understand foreign C code, write C
code, and have a good understanding of how to do a clean room implementation of GPLed
code (no copy & paste!).
- Suspend to disk: Implement a suspend/resume from disk mechanism.
Possibly use the dump functions to dump pages to disk, then use ACPI to put the system in
S4 or power-off. Resume would require changes to the loader to load the memory image
directly and then begin executing again. This project requires good knowledge of C, an
understanding of the hardware/software interface, a laptop that works with ACPI, and
kernel awareness. Nate Lawson and Bruno Ducrot are coordinating.
- Implement and profile various algorithms for powerd(8): Implement a
range of predictive algorithms (and perhaps design your own) and profile them for power
usage and performance loss. The best algorithm will save the most power while losing the
least performance. Requires basic C knowledge, laptop supported by cpufreq(4) (suggest
newer Pentium-M CPU), and some statistics. Nate
Lawson and Bruno Ducrot are coordinating.
- Kernel meta-language: Develop a dialect of the C language that
simplifies the task of writing kernel code. It should include language extensions that
make it possible to write kernel code more cleanly and with less bugs. An example of this
would have language support for linked lists, to obviate the need for messy MACROs. George V. Neville-Neil and Poul-Henning Kamp are coordinating. A Wiki with more
information is available here.
- The Arbitrary Interpreter Hack: Allow FreeBSD binaries for
non-native CPU architectures to be emulated by having these 'interpreted' by an
instruction set emulator. This work would allow FreeBSD/{ARM,MIPS,PowerPC} executables to
run on a FreeBSD/i386 or FreeBSD/amd64 host. This project requires an in-depth study of
machine ABIs and of Unix semantics. It has a small kernel component and also involves
effort in making the instruction set emulator robust. Joseph Koshy is the coordinator.
- Cheap Syscalls: Add a page shared between every process and the
kernel to do things like gettimeofday() without doing a real syscall. Can also be used to
enable the use of SYSENTER to do other syscalls, on i386, when the hardware supports it.
Similar to Linux's vsyscall page. Requires good knowledge of C, memory management on
modern operating systems, and run-time linking. Suleiman Souhlal is the coordinator.
- Boot-time Kernel Patching: Design and implement an API to patch
kernel code based on hardware features detected at boot. This will, for example, enable
the use of PREFETCH instructions when 3DNow! support is detected on the CPU. Requires
good knowledge of C, and basic knowledge of i386 assembly. Suleiman Souhlal is the coordinator.
- NMI Watchdog: Use the performance counters feature of i386/amd64
processors to periodically send an NMI to every processor, and make sure the kernel is
still running correctly. Requires good knowledge of the i386 architecture and C. Suleiman Souhlal is the coordinator.
Additional projects may be found by browsing the FreeBSD
Development Projects page or by viewing some of the recent Developer Status Reports.
Mentors
If you are interested in working on a project not explicitly mentioned above, you may
want to contact one of the potential mentors below about writing a proposal in one of the
following broad categories.
If your project is not selected for funding by Google, but you still think you have a
feasible project proposal, then please email proposals@FreeBSD.org.
Proposal Guidelines
Students are responsible for writing a proposal and submitting it to Google before the
application deadline. The following outline was adapted from the Perl Foundation open source proposal
HOWTO. A strong proposal will include:
- Name
- Email
- Project Title
- Possible Mentor (optional)
- Benefits to the FreeBSD Community - a good project will not just be
fun to work on, but also generally useful to others.
- Deliverables - It is very important to list quantifiable results
here e.g.
- "Improve X modules in ways Y and Z."
- "Write 3 new man pages for the new interfaces."
- "Improve test coverage by writing X more unit/regression tests."
- "Improve performance in FOO by X%."
- Project Schedule - How long will the project take? When can you
begin work?
- Availability - How many hours per week can you spend working on
this? What other obligations do you have this summer?
- Bio - Who are you? What makes you the best person to work on this
project?
Infrastructure Provided to Students
In 2005, the FreeBSD Project provided access to the FreeBSD Perforce revision control
infrastructure in order to facilitate student collaboration, provide public access and
archiving for the on-going student projects, and to help mentors and the community
monitor on-going work. It is expected that students participating in the 2006 program
will be offered the same facilities, and that unless there is a strong argument
otherwise, that those facilities will be used for 2006 projects. Students will also be
asked to maintain wiki pages on their on-going projects. In the past, e-mail, IRC, and
instant messaging have proven popular among students and mentors, and students
participating in the FreeBSD summer program are encouraged to use these and other
electronic communication mechanisms to become active in the community.
Frequently Asked Questions
-
Am I eligible?
Please see the Google Student
FAQ for all questions about eligibility.
-
When is the proposal deadline?
May 8, 2006 17:00 Pacific Daylight Time. Proposals must be submitted
through the Google web site, not directly to the FreeBSD Project.
-
Where do I send my proposal?
Propopsals must be sent to Google's student signup page.
-
What projects were completed successfully by students last
summer?
Please see the 2005 FreeBSD Summer of Code page
for a list of the completed projects from last year.