Submitted by: Emily Boyd (emilyboyd at emilyboyd dot com) Sponsored by: Google Summer of Code 2005
401 lines
19 KiB
Text
401 lines
19 KiB
Text
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" [
|
|
<!ENTITY base CDATA "..">
|
|
<!ENTITY date "$FreeBSD: www/en/projects/summerofcode.sgml,v 1.32 2005/09/29 11:13:18 joel Exp $">
|
|
<!ENTITY title "FreeBSD Summer Projects">
|
|
<!ENTITY % navincludes SYSTEM "../includes.navdevelopers.sgml"> %navincludes;
|
|
<!ENTITY % includes SYSTEM "../includes.sgml"> %includes;
|
|
<!ENTITY % developers SYSTEM "../developers.sgml"> %developers;
|
|
]>
|
|
|
|
<html>
|
|
&header;
|
|
|
|
<p>The FreeBSD Project is excited to take part in the Google <a
|
|
href="http://code.google.com/summerofcode.html">Summer of Code
|
|
2005</a>. This project endeavors to fund students to contribute to
|
|
an open source project over the summer break.</p>
|
|
|
|
<ul>
|
|
<li><a href="#ideas">Example Proposal Ideas</a>
|
|
<ul>
|
|
<li><a href="#p-userland">Userland / Installation Tools</a></li>
|
|
<li><a href="#p-filesystem">Filesystem</a></li>
|
|
<li><a href="#p-networking">Networking</a></li>
|
|
<li><a href="#p-security">Security</a></li>
|
|
<li><a href="#p-kernel">Kernel</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#mentors">Possible Mentors</a></li>
|
|
<li><a href="#faq">Frequently Asked Questions</a></li>
|
|
</ul>
|
|
|
|
<a name="ideas"></a>
|
|
<h2>Example Proposal Ideas</h2>
|
|
|
|
<a name="p-userland"></a>
|
|
<h3>Userland / Installation Tools</h3>
|
|
|
|
<ul>
|
|
<!-- <li><strong>FreeBSD website redesign</strong></li> -->
|
|
<li><strong>Integrate BSD Installer</strong>: Prepare a prototype
|
|
merge of the <a href="http://www.bsdinstaller.org/">BSD
|
|
Installer</a> as a complete replacement for the venerable FreeBSD
|
|
sysinstall program. Enough of the groundwork has been laid out now
|
|
that someone with a few months and some background could do a lot
|
|
of good work here, especially with adequate mentoring by more
|
|
senior FreeBSD developers.</li>
|
|
|
|
<li><strong>Bundled PXE Installer</strong>: 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.</li>
|
|
|
|
<li><strong>Fully Integrated SNMP monitoring</strong>: 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. <a href="mailto:philip@FreeBSD.org">&a.philip;</a>, <a
|
|
href="mailto:glebius@FreeBSD.org">&a.glebius;</a>, <a
|
|
href="mailto:harti@FreeBSD.org">&a.harti;</a>, and <a
|
|
href="mailto:rwatson@FreeBSD.org">&a.rwatson;</a> are
|
|
coordinating.</li>
|
|
|
|
<li><strong>Integrate Xen Support</strong>: Support for the <a
|
|
href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/">Xen virtual
|
|
machine monitor</a> 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.</li>
|
|
|
|
<li><strong>Rewrite CVSup in C</strong>: <a
|
|
href="http://www.cvsup.org">CVSup</a> is the CVS-Optimized
|
|
General-Purpose Network File Distribution System. It has been
|
|
used heavily for nearly 10 years to distribute the FreeBSD CVS
|
|
tree to mirrors around the world. CVSup was written in Modula-3
|
|
and a rewrite in C would encourage more users to improve it.
|
|
CVSup is a multi-threaded application by design so the applicant
|
|
should have at least some experience with pthreads.
|
|
Additional requested features include understanding of Subversion
|
|
fsfs repositories and Perforce depots. Currently part of the work
|
|
and research has already been completed. More information on this
|
|
project is available <a href="http://mu.org/~mux/csup.html">here</a>.
|
|
<a href="mailto:mux@FreeBSD.org">&a.mux;</a> is the coordinator.</li>
|
|
|
|
<li><strong>Improve our regression testing system</strong>: 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. <a
|
|
href="mailto:nik@FreeBSD.org">&a.nik;</a> is the coordinator.
|
|
</li>
|
|
|
|
<li><strong>Tracking performance over time</strong>: 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 managable. <a
|
|
href="mailto:brooks@FreeBSD.org">&a.brooks;</a> is the coordinator.</li>
|
|
|
|
</ul>
|
|
|
|
<a name="p-filesystem"></a>
|
|
<h3>Filesystem</h3>
|
|
|
|
<ul>
|
|
<li><strong>UFS Journaling</strong>: Add transaction journaling and
|
|
playback to the UFS filesystem. The goal is to increase the reliability
|
|
of the filesystem and greatly reduce the need for a full 'fsck' after
|
|
a crash or power loss. This is a project that deals with not only
|
|
the filesystem internals, but also the VM and buffer/cache systems,
|
|
so it is an excellent opportunity to learn about many fundamental
|
|
aspects of an operating system.<br>
|
|
|
|
Work is already in progress on this task, but more help is always
|
|
needed and welcome. Candidates should have at least a cursory
|
|
understanding of filesystem data structures (inodes, free lists,
|
|
directories) and a strong desire to learn more about such systems.
|
|
This project would be a major contribution to anyone's resume, but it
|
|
is not for the faint of heart. <a
|
|
href="mailto:scottl@FreeBSD.org">&a.scottl;</a> is the coordinator.
|
|
|
|
<li><strong>Autofs</strong>: Create the autofs filesystem from a
|
|
specification. Candidates should have some filesystem knowledge
|
|
and network filesystem knowledge. Most of this work is done,
|
|
however kernel transport and interaction with the "amd"
|
|
automounter needs to be completed. <a
|
|
href="mailto:alfred@FreeBSD.org">&a.alfred;</a> is coordinating.</li>
|
|
|
|
<li><strong>Logical Volume Manager</strong></li>
|
|
|
|
<li><strong>Magic Symlinks</strong>: Implement magic symlinks.
|
|
Candidates should have some filesystem knowledge.
|
|
Experimental
|
|
<a href="http://www.freebsd.org/~jwd/magiclinks.tgz">patches</a>
|
|
exist against 4-STABLE, though the DragonFly implementation using the
|
|
setvar utility should be examined.
|
|
<a href="mailto:jwd@FreeBSD.org">&a.jwd;</a> can coordinate.</li>
|
|
|
|
</ul>
|
|
|
|
<a name="p-networking"></a>
|
|
<h3>Networking</h3>
|
|
|
|
<ul>
|
|
<li><strong>Network Disk Device</strong>: Add the ability to
|
|
remotely access devices from one system to another. The goal is
|
|
to allow remote access to resources such as disks, sound devices,
|
|
and other miscellaneous pieces of hardware over the network.
|
|
Prospective candidates should have an understanding or interest in
|
|
remote procedure call systems, networking (TCP/IP), an interest to
|
|
learn how Unix device drivers work as well as process management
|
|
will be required. This project would be a good resume builder,
|
|
but is not for the faint of heart. <a
|
|
href="mailto:alfred@FreeBSD.org">&a.alfred;</a> is coordinating.</li>
|
|
|
|
<li><strong>NFS Lockd (improve semantics)</strong>: 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. <a
|
|
href="mailto:alfred@FreeBSD.org">&a.alfred;</a> is coordinating.</li>
|
|
|
|
<li><strong>NFS Lockd (kernel implementation)</strong>: 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. <a href="mailto:alfred@FreeBSD.org">&a.alfred;</a> is
|
|
coordinating.</li>
|
|
|
|
<li><strong>Userland/kernel interface cleanups (net/if_var.h)</strong>:
|
|
Over <em>eight</em> years ago, the network interface headers
|
|
were split into net/if.h and net/if_var.h. The intent was for
|
|
net/if_var.h to be kernel only and net/if.h to contain public
|
|
interfaces. Today, the internal header, net/if_var.h is still
|
|
included in many userland applications. In some cases, this is
|
|
due to interfaces that are not in fact kernel internal. In other
|
|
cases, these structures are being used in conjunction with libkvm to
|
|
access kernel information directly. This project would correct both
|
|
classes of problems, primarily rewriting the netstat(1) command and
|
|
any other network related libkvm consumers to use alternate
|
|
interfaces, creating those interfaces if needed. Netstat's
|
|
coredump analysis features would likely be split into a separate
|
|
program. <a href="mailto:brooks@FreeBSD.org">&a.brooks;</a> is
|
|
coordinating.</li>
|
|
|
|
<li><strong>Web100 port to FreeBSD</strong>: The <a
|
|
href="http://www.web100.org/">Web100</a> project was created to
|
|
address the problems of TCP performance over long-fat network
|
|
pipes. They created an interesting set of tuning and monitoring
|
|
patches for Linux which enable significantly better performance
|
|
in this area. Integrating this work into FreeBSD could provide
|
|
significant benefits in terms of TCP performance in certain
|
|
environments. The features of Web100 need to be mapped into
|
|
appropriate FreeBSD abstractions and integrated into the
|
|
system. The performance impact of these changes would have
|
|
to be quantified before the changes could be introduced. An
|
|
ideal candidate for this task would have some knowledge of the
|
|
operation of the TCP protocol and familiarity with kernel
|
|
interfaces. <a href="mailto:brooks@FreeBSD.org">&a.brooks;</a> is
|
|
coordinating.</li>
|
|
|
|
<li><p><strong>ipfw2 NAT support and libalias improvement</strong>: The
|
|
native FreeBSD firewall, ipfw2, does not currently have in-kernel
|
|
NAT support, though the architecture is extensible and the basic
|
|
mechanisms for dynamic rule creation and lookup are already
|
|
present in the kernel. At the same time, userland NAT is supported
|
|
by libalias, which has been recently made into a kernel module.
|
|
The project has the following two goals:
|
|
<ul>
|
|
<li>create hooks for ipfw2 to call LibAlias</li>
|
|
<li>revise LibAlias to improve its structures, specifically:<ul>
|
|
<li>instrument, evaluate and possibly optimize basic operations
|
|
(session creation, lookup and destruction; tcp flow
|
|
reassembly);</li>
|
|
<li>provide mechanisms to register/unregister protocol handlers
|
|
instead of having to manipulate the source code;</li>
|
|
<li>make a better match of the kernel and libalias data structure
|
|
to possibly reduce the number of copies.</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>The above should be applicable to 5.x and -current, and
|
|
possibly 4.x as well. Applicants should be familiar with
|
|
networking issues related to NAT, and with the network stack in
|
|
the kernel. <a href="mailto:rizzo@icir.org">Luigi Rizzo</a> is
|
|
the coordinator.</p></li>
|
|
|
|
</ul>
|
|
|
|
<a name="p-security"></a>
|
|
<h3>Security</h3>
|
|
|
|
<ul>
|
|
<li><strong>SecureMines</strong>: 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. <a
|
|
href="mailto:alfred@FreeBSD.org">&a.alfred;</a> is coordinating.</li>
|
|
|
|
<li><strong>SEBSD</strong>: 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! <a
|
|
href="mailto:rwatson@FreeBSD.org">&a.rwatson;</a> is coordinating.</li>
|
|
</ul>
|
|
|
|
<a name="p-kernel"></a>
|
|
<h3>Kernel</h3>
|
|
|
|
<ul>
|
|
<li><strong>Update the Linuxulator</strong>: 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!).</li>
|
|
|
|
<li><strong>Implement passive cooling in ACPI thermal</strong>: The
|
|
cpufreq interface should be used to cool the processor, based on
|
|
the various _PSV settings. Also, we need to implement variable
|
|
polling intervals for thermal zones based on both the passive
|
|
settings and polling explicitly specified in the ASL. This
|
|
project requires good knowledge of C, an understanding of the
|
|
hardware/software interface, a laptop that works with ACPI, and
|
|
kernel awareness. <a href="mailto:njl@FreeBSD.org">&a.njl;</a>
|
|
and <a href="mailto:bruno@FreeBSD.og">&a.bruno;</a> are
|
|
coordinating.</li>
|
|
|
|
<li><strong>Suspend to disk</strong>: 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. <a href="mailto:njl@FreeBSD.org">&a.njl;</a>
|
|
and <a href="mailto:bruno@FreeBSD.og">&a.bruno;</a> are
|
|
coordinating.</li>
|
|
|
|
<li><strong>Implement and profile various algorithms for
|
|
powerd(8)</strong>: 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. <a href="mailto:njl@FreeBSD.org">&a.njl;</a>
|
|
and <a href="mailto:bruno@FreeBSD.og">&a.bruno;</a> are
|
|
coordinating.</li>
|
|
|
|
<li><strong>Kernel meta-language</strong>: 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. <a
|
|
href="mailto:gnn@FreeBSD.org">&a.gnn;</a> and <a
|
|
href="mailto:phk@FreeBSD.org">&a.phk;</a> are coordinating. A Wiki
|
|
with more information is available <a
|
|
href="http://wikitest.freebsd.org/moin.cgi/K">here</a>.</li>
|
|
|
|
<li><strong>Pluggable Disk Schedulers</strong>: The project will
|
|
create hooks to implement pluggable disk schedulers, to replace
|
|
the standard elevator scheme used in FreeBSD, and then implement
|
|
at least one alternative mechanism (e.g. variants of proportional
|
|
share, etc.) to demonstrate the effectiveness of the new
|
|
interface. Applicants should be familiar with the disk scheduling
|
|
theory and, to some degree, with kernel programming. <a
|
|
href="mailto:rizzo@icir.org">Luigi Rizzo</a> is the coordinator.</li>
|
|
|
|
</ul>
|
|
|
|
<p>Additional projects may be found by browsing the <a
|
|
href="index.html">FreeBSD Development Projects</a> page or by
|
|
viewing some of the recent <a href="&base;/news/status">Developer
|
|
Status Reports</a>.</p>
|
|
|
|
<a name="mentors"></a>
|
|
<h2>Mentors</h2>
|
|
|
|
<p>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.</p>
|
|
|
|
<ul>
|
|
<li><strong>Networking</strong>:
|
|
<a href="mailto:alfred@FreeBSD.org">&a.alfred;</a>,
|
|
<a href="mailto:brooks@FreeBSD.org">&a.brooks;</a>, and
|
|
<a href="mailto:sam@FreeBSD.org">&a.sam;</a></li>
|
|
<li><strong>Filesystems</strong>: <a
|
|
href="mailto:scottl@FreeBSD.org">&a.scottl;</a>, <a href="mailto:alfred@FreeBSD.org">&a.alfred;</a></li>
|
|
<li><strong>GEOM</strong>: <a
|
|
href="mailto:phk@FreeBSD.org">&a.phk;</a></li>
|
|
<li><strong>Release Engineering / Integration</strong>: <a
|
|
href="mailto:re@FreeBSD.org">re@FreeBSD.org</a></li>
|
|
<li><strong>TrustedBSD / Security</strong>: <a
|
|
href="mailto:rwatson@FreeBSD.org">&a.rwatson;</a></li>
|
|
<li><strong>Pluggable Disk Schedulers</strong>: <a href="mailto:luigi@FreeBSD.org">&a.luigi;</a>.</li>
|
|
<li><strong>ACPI</strong>: <a href="mailto:njl@FreeBSD.org">&a.njl;</a>
|
|
and <a href="mailto:bruno@FreeBSD.og">&a.bruno;</a>.</li>
|
|
<li><strong>Sound</strong>: <a
|
|
href="mailto:matk@FreeBSD.org">&a.matk;</a>.</li>
|
|
</ul>
|
|
|
|
|
|
<p>If your project is not selected for funding by Google, but you
|
|
still think you have a feasible project proposal, then please email
|
|
<a href="mailto:proposals@FreeBSD.org">proposals@FreeBSD.org</a>.</p>
|
|
|
|
<a name="faq"></a>
|
|
<h2>Frequently Asked Questions</h2>
|
|
|
|
<ul>
|
|
<li><p><strong>Am I eligible?</strong></p>
|
|
|
|
<p>Please see the Google <a
|
|
href="http://code.google.com/summfaq.html">Participant FAQ</a>
|
|
for all questions about eligibility.</p></li>
|
|
|
|
<li><p><strong>How do I write a proposal?</strong></p>
|
|
|
|
<p>The Perl Foundation has a nice <a
|
|
href="http://www.perlfoundation.org/gc/grants/proposals.html">HOWTO</a>
|
|
that describes how to write an open source proposal.</p></li>
|
|
|
|
<li><p><strong>When is the proposal deadline?</strong></p>
|
|
|
|
<p>Proposals must be received by Google by June 14.</p></li>
|
|
|
|
</ul>
|
|
|
|
&footer;
|
|
</body>
|
|
</html>
|