doc/en/projects/summerofcode.sgml
Murray Stokely afe4105ca7 Update this page for Summer 2006:
* Add a new section on "Proposal Guidelines" borrowed heavily from the
  Perl Foundation open source proposal HOWTO.

* Begin the example proposal ideas section with a pointer to the general
  ideas page as an additional source of projects that need developers.

* Add 3 project ideas proposed by David Malone last year: inode
  versioning, ipv6 stack vulnerability audit, and ipv6 feature parity.

* Add generic input device subsystem project proposed by philip.

* Add gnn@ as a potential mentor for other unlisted networking projects.

* Add ssouhlal@ as a potential mentor for other unlisted filesystem/vm
  projects.

* Add a FAQ entry with a pointer to the summerofcode-2005.html page
  with last year's successful projects listed.

Note that none of these projects are written in stone.  If you think a
particular project idea is bogus and shouldn't be worked on this
summer please contact the proposed mentor.
2006-04-11 07:11:46 +00:00

479 lines
22 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.33 2005/10/04 19:43:49 hrs 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
2006</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="#proposals">Proposal Guidelines</a></li>
<li><a href="#faq">Frequently Asked Questions</a></li>
</ul>
<a name="ideas"></a>
<h2>Example Proposal Ideas</h2>
<p>In addition to the student project ideas listed below, the FreeBSD
Project maintains a list of general projects looking for volunteers <a
href="&base;/projects/ideas/index.html">here</a>.</p>
<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 manageable. <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>inode versioning</strong>: 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. <a
href="mailto:dwmalone@freebsd.org">&a.dwmalone;</a> is the
coordinator.</li>
<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>IPv6 stack vulnerabilities</strong>: 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. <a
href="mailto:dwmalone@freebsd.org">&a.dwmalone;</a> is the
coordinator.</li>
<li><strong>IPv6 feature parity</strong>: 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. <a href="mailto:dwmalone@freebsd.org">&a.dwmalone;</a> is
the coordinator.</li>
<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>Generic Input Device Subsystem</strong>: 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. <a
href="mailto:philip@FreeBSD.org">&a.philip;</a> is coordinating.</li>
<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:gnn@FreeBSD.org">&a.gnn;</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>, <a
href="mailto:ssouhlal@FreeBSD.org">&a.ssouhlal;</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>
<li><strong>Virtual Memory</strong>: <a
href="mailto:ssouhlal@FreeBSD.og">&a.ssouhlal;</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="proposals"></a>
<h2>Proposal Guidelines</h2>
<p>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 <a
href="http://www.perlfoundation.org/gc/grants/proposals.html">open
source proposal HOWTO</a>. A strong proposal will include:</p>
<ul>
<li><strong>Name</strong></li>
<li><strong>Email</strong></li>
<li><strong>Project Title</strong></li>
<li><strong>Benefits to the FreeBSD Community</strong> - a good
project will not just be fun to work on, but also generally
useful to others.</li>
<li><strong>Deliverables</strong> - It is very important to list
quantifiable results here e.g.
<ul>
<li>"Improve X modules in ways Y and Z."</li>
<li>"Write 3 new man pages for the new interfaces."</li>
<li>"Improve test coverage by writing X more unit/regression
tests."</li>
<li>"Improve performance in FOO by X%."</li>
</ul>
</li>
<li><strong>Project Schedule</strong> - How long will the project
take? When can you begin work?</li>
<li><strong>Bio</strong> - Who are you? What makes you the best
person to work on this project?</li>
</ul>
<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>When is the proposal deadline?</strong></p>
<p>Please check back soon for the proposal deadline.</p></li>
<li><p><strong>What projects were completed successfully by students
last summer?</strong></p>
<p>Please see the <a href="summerofcode-2005.html">2005 FreeBSD
Summer of Code</a> page for a list of the completed projects
from last year.</p></li>
</ul>
&footer;
</body>
</html>