%navincludes; %includes; %developers; ]> &header;

Introduction

The FreeBSD project has hundreds of active developers spread all over the world, and many of them have their own parts of the source-tree that they work on. However, there are always a lot of new interesting projects and ideas that needs to be investigated and evaluated, and this is where the FreeBSD project relies on heroic efforts from volunteers. The following list of possible projects is in no way complete, but it should serve as a nice starting point for volunteers who would like to become committers in the future.

Please note that we cannot guarantee that your work will be included in the FreeBSD source tree. This is because people tend to disagree about specifics in the implementation of new features or functionality. However, if you can find a developer who is interested in your work, and you can get him or her to review it, then you are pretty far on your way to get your code into the FreeBSD source tree.

If you have any non-technical questions about this list, please contact &a.netchild; or &a.joel;. Technical questions should be directed to the Technical contact for each project, or to the hackers mailinglist.


Project ideas

File System

Kernel

Networking

Security

Userland / Installation Tools

Additional Information


Port the NetBSD tmpfs (efficient memory file system)

At the moment FreeBSD includes a memory-based file system called mfs. mfs is is just an implementation of the regular ffs - designed for persistent storage - on top of the (volatile) virtual memory system. This means that it uses the same data structures as the on-disk implementation, rendering less than optimal performance and memory usage. With tmpfs, FreeBSD would gain a memory file system which uses less memory and is faster.

Goals:

Rohit Jalan has begun porting the NetBSD tmpfs to FreeBSD, and he would like to receive some feedback.

Requirements:


Autofs

Technical contact: &a.alfred;

Create the autofs file system from a specification. Most of this work is done, however, kernel transport and interaction with the "amd" automounter needs to be completed.

Requirements:


Implement Magic Symlinks

Technical contact: &a.jwd;

Patches: http://people.FreeBSD.org/~jwd/magiclinks.tgz

Experimental patches exist against 4-STABLE, though the DragonFly implementation using the setvar utility should be examined (interesting files in the DragonFly CVS: sys/kern/init_sysent.c, sys/kern/kern_varsym.c, sys/kern/syscalls.c, sys/kern/syscalls.master, sys/kern/vfs_lookup.c, sys/sys/syscall-hide.h, sys/sys/syscall.h, sys/sys/syscall.mk, sys/sys/sysproto.h, sys/sys/sysunion.h, bin/varsym/varsym.1, bin/varsym/varsym.c).

Andrey V. Elsukov has begun porting this to FreeBSD, and some initial patches for CURRENT can be found here. There is also some on-going development in Perforce.

Requirements:


Fix mdfs lockups when using non-sync operation modes

Rev. 1.115 of md.c has a discussion of the problem.

Requirements:


Extend dump/restore support for UFS2 to cover extended attributes

The UFS2 file system in FreeBSD supports extended attributes. Extended attributes are meta-data associated with vnodes representing files and directories. Unfortunately dump and restore do not backup or restore such attributes.

Requirements:


Make truss(1) able to work without procfs

Technical contact: &a.mux;

Someone needs to finish the support for PT_SYSCALL in the ptrace() subsystem, and add support for another ptrace() command that will replace the PIOCWAIT and PIOCSTATUS ioctls of procfs (should probably be named PT_WAIT), in order for truss(1) to be able to work without procfs.

Requirements:


Port the "Pluggable Disk Schedulers" SoC project to current/GEOM

Technical contact: Emiliano Mennucci

URL: The Pluggable Disk Schedulers SoC project, Patches

Our "Pluggable Disk Schedulers" SoC project resulted in code which solved the problem where large sequential I/O requests, or certain access patterns from one or a few processes, might almost completely starve other processes. It is available as a patch for RELENG_4 and RELENG_5. Unfortunately the code in FreeBSD-current (and RELENG_6) changed too much, so that the patches can not be committed. The goal of this project is to port the pluggable disk schedulers to the GEOM framework.

Requirements:


Sync USB code with NetBSD

Technical contact: usb@FreeBSD.org (mailing list)

There are various improvements and fixes to the USB code in NetBSD which have not found their way into FreeBSD yet.

Requirements:


Document as many sysctls as possible

Technical contacts: &a.mat;, &a.brd;

The sysctl(8) utility retrieves kernel states and allows processes with appropriate privilege to change kernel states. On request it is able to display description lines which document the kernel state. Unfortunately not every sysctl is documented. This task is possible to share with other volunteers. &a.mat has done some development in Perforce, in the mat_sysctl_cleanup branch.

Requirements:


Document the sound subsystem

Technical contacts: &a.netchild;, &a.ariff;

Requirements:


Syncing with the 4Front Technologies OSS v4 API

Technical contact: &a.netchild;

URL: 4Front Technologies

4Front Technologies will go live with an improved OSS API in the near future and we are discussing syncing with this API at the freebsd-multimedia mailing list. 4Front Technologies offered assistance. A volunteer would have to:

Requirements:


Implement necessary kernel interface for 4Front Technologies ALSA to OSS wrapper (SALSA)

Technical contact: &a.netchild;

URL: 4Front Technologies, SALSA

Requirements:


Improve locking of the sound system

Technical contact: &a.ariff;

Requirements:


Add High Definition Audio (HDA) support to our sound system

Technical contact: &a.ariff;

URL: HDA Specification

NetBSD azalia driver: azalia.c, azalia.h, azalia_codec.c

Requirements:


Implement a generic input device layer

Technical contact: &a.philip;

The kernel is lacking a generic input device layer analogous to the Linux 'input core' layer. Having such a layer would make it easy to write e.g. touchscreen support (&a.philip; has some work-in-progress regarding pointer devices and touchscreen support, but not enough time to also cover keyboard support or other generic features).

Requirements:


Add locking to the CAM layer

Technical contact: &a.scottl;

&a.scottl; has been working on this for a while, and he has patches in Perforce.

Requirements:


Implement iSCSI

Technical contact: Danny Braniss

Danny Braniss has been working on an iSCSI stack for FreeBSD for some time now. His work is in Perforce, and he has posted several patch sets and had numerous discussions on the mailing lists.

Requirements:


Port DragonFly's process checkpointing

Technical contact: &a.bruno;

Process checkpointing allows to migrate some processes to other machines or to let some processes "survive" a reboot (subject to some constraints). Interesting files in the DragonFly CVS are sys/sys/ckpt.h, sys/checkpt/* and sys/kern/imgact_elf.c.

Requirements:


Evaluate and perhaps port DragonFly's optimized MMX/XMM memcpy/bcopy/bzero/copyin/copyout code (this includes an FPU subsystem overhaul)

Interesting files in the DragonFly CVS are sys/i386/gnu/fpemul/fpu_system.h, sys/i386/i386/bcopy.s, sys/i386/i386/genassym.c, sys/i386/i386/globals.s, sys/i386/i386/machdep.c, sys/i386/i386/math_emu.h, sys/i386/i386/mp_machdep.c, sys/i386/i386/pmap.c, sys/i386/i386/support.s, sys/i386/i386/swtch.s, sys/i386/i386/trap.c, sys/i386/i386/vm86bios.s, sys/i386/i386/vm_machdep.c, sys/i386/include/asmacros.h, sys/i386/include/globaldata.h, sys/i386/include/md_var.h, sys/i386/include/npx.h, sys/i386/include/pcb.h, sys/i386/include/thread.h sys/i386/isa/npx.c, sys/i386/i386/bcopy.s and sys/i386/i386/bzero.s. A more detailed writeup can be found in this compressed file. This includes a mail from Matthew Dillon with suggestions on how to do this in FreeBSD (including a small benchmark which shows 35%-55% speed improvement for at least those benchmarks).

Attilio Rao has begun porting this to FreeBSD, and he would like to receive some feedback.

Requirements:


Evaluate and perhaps sync FreeBSD i386 boot code with DragonFly's boot code

Technical contact: &a.jhb;

DragonFly invested a lot of time to clean-up and document it. Additionally they fixed some bugs. Interesting files in the DragonFly CVS are sys/boot/i386/bootasm.h, sys/boot/i386/bootasmdef.c, sys/boot/boot0/*, sys/boot/boot2/*, sys/boot/i386/btx/*, sys/boot/i386/cdboot/*, sys/boot/i386/libi386/amd64_tramp.S, sys/boot/i386/libi386/biosdisk.c and sys/boot/i386/loader/main.c. An interested volunteer has to compare both implementations and port interesting/good parts.

Requirements:


Fix the CPU usage display in top for threaded processes

The current kernel statistics do not know how to calculate the CPU usage of threaded processes. A volunteer has to understand the current statistics model, design a new statistics model and implement it.

Requirements:


Implement PCI-Hotplug support

Technical contact: &a.bms;

Requirements:


Implement something similar to Solaris' DTrace

Technical contact: Devon H. O'Dell

URL: Perforce repository

Need to get the DTrace provider working. This is the epicenter of DTrace and it is the first step to making the rest of it work from the kernel side of things. Userland stuff is 98% done. The other 2% will be addressed later when some kernel dependencies are satisfied.

Requirements:


Add amd64 native support to the Linuxulator

FreeBSD provides Linux binary compatibility through a Linux system call table that is invoked when Linux ELF binaries are executed. The implementation on amd64 machines only provides support for 32bit (x86) executables. This needs to be coordinated with the emulation mailinglist regarding the userland part of the linuxulator.

Requirements:


Update the Linuxulator

Technical contact: &a.cracauer;

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.

Requirements:


Annotate every assembler file [*.[sS]] with dwarf2 call frame information

A debug kernel is not able to show stack traces with cross exceptions anymore. This is because we do not emit any dwarf2 call frame information for any assembler code, since gdb switched to the dwarf2 format.

Requirements:


Suspend to disk

Technical contacts: &a.njl;, &a.bruno;

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.

Requirements:


Implement and profile various algorithms for powerd

Technical contacts: &a.njl;, &a.bruno;

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. This has been discussed on the ACPI mailing list and &a.bruno; has some early patches.

Requirements:


Dynamic module references

Technical contact: &a.sam;

Kernel modules may have dynamic references created during operation. For example net80211 key entries reference functions in the crypto module that implements the key's cipher. Presently there is no standard mechanism for expressing this dependency so that module unloading is disallowed; instead modules must track references and implement their own semantics. This task is to define and implement a general mechanism for tracking these references and use them in handling module unload requests.

Requirements:


Add some more information in the ktrace(1)/kdump(1) output

Technical contact: &a.netchild;

The ktrace(1) facility allows to monitor what running processes do. It allows to determine if a process is stuck or if it still does useful work. The goal of this item is to look at the kernel interfaces, add missing "pieces" (e.g. syscall's) to the ktrace output and to extend the output with "decoded" (translating hex/dec values into human readable information, e.g. O_RDONLY in the case of open(2)) information.

Requirements:


Move HESIOD out of libc into a NSS module

Currently HESIOD is build statically into libc. Since LDAP is more popular today, it is not necessary to provide this name service to every consumer of libc by default.

Benefits:

Requirements:


Move NIS/YP out of libc into a NSS module

Currently NIS/YP is build statically into libc. Since LDAP is more popular today, it is not necessary to provide this name service to every consumer of libc by default.

Benefits:

Requirements:


Import NSS LDAP support into the base system

Since LDAP is very popular today, it would be beneficial to have NSS-LDAP support available by default. The license of the NSS LDAP module should however be investigated first.

Benefits:

Requirements:


Rewrite the in-kernel file system syncer and modernize the write behind code

References: mail #1, mail #2

Goals:

Requirements:


Contribute to the csup project

Technical contact: &a.mux;

URL's: csup homepage, CVSweb

&a.mux; is working on a rewrite of CVSup in C, called csup. A rewrite in C would allow the FreeBSD project to include the functionality of CVSup into the FreeBSD base system, instead of shipping it as a separate package. You can find snapshots of csup, along with a CVSWeb interface to the code and much more by following the links above. It is also available from the Ports Collection, which should make it somewhat easier for curious people to test.

Requirements:


Add zeroconf (Rendezvous/Bonjour) support to FreeBSD

URL: NetBSD zeroconf SoC project

Requirements:


Network Disk Device

Technical contact: &a.alfred;

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. This project would be a good resume builder, but is not for the faint of heart.

Requirements:


NFS Lockd (improve semantics)

Technical contact: &a.alfred;

Requirements:


NFS Lockd (kernel implementation)

Technical contact: &a.alfred;

Moving the lockd implementation into the kernel provides several key performance and semantic improvements.

Requirements:


Port Web100 to FreeBSD

Technical contact: &a.brooks;

URL: The Web100 project

The Web100 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.

Requirements:


WPA2 preauthentication support in hostapd

Technical contact: &a.sam;

WPA2 is the authentication protocol defined as part of the IEEE 802.11i specification. This protocol is now commonly used to authenticate wireless stations to access points. Part of this protocol is the ability to pre-authenticate a station with one or more access points so that roaming can happen quickly. FreeBSD lacks support for this aspect of the protocol in the hostapd program used to construct a WPA-enabled access point. This task would port the Linux code that exists to support pre-authentication in hostapd. This mostly involves rewriting some user-mode multicast code and testing the result.

Requirements:


IAPP preauthentication support in hostapd

Technical contact: &a.sam;

IAPP is the Inter-Access Point Protocol, a protocol by which cooperating access points communicate about associated wireless stations. FreeBSD lacks support for this aspect of the protocol in the hostapd program used to construct a WPA-enabled access point. This task would port the Linux code that exists to support IAPP in hostapd. This mostly involves rewriting some user-mode multicast code and testing the result.

Requirements:


Bring wi(4) up to par with the current state of affairs in the WLAN infrastructure

Many new and useful features (e.g. crypto protocols like WPA) of the WLAN infrastructure in the kernel are not used in wi(4). While wi(4) cards are old and can not compete with recent wireless cards, they are still in use in a lot of places. The goal of this item is to examine the WLAN infrastructure and other WLAN drivers in the tree for nice features and port/use them in the wi(4) driver.

Requirements:


Re-factor Apple Talk into a kernel module

At the moment the Apple Talk protocol is only available as a compile time option. The goal of this item is to allow to load the Apple Talk protocol at runtime (as part of netgraph or as a "standalone" module) and to add appropriate locking (as a start even a generic subsystem lock would be ok, more fine grained locking can be added later).

Benefits:

Requirements:


"Flight mode" for the loader

Not every airline allows to use radio transmitters like WLAN-NIC's in airplanes (yet). The goal of this entry is to provide an entry in the loader which prohibits drivers for devices which transmit radio signals to attach to the device. One way of providing this functionality would be to add a menu entry to the loader which sets a "flight mode" loader tunable which would have to be queried by every driver which is able to transmit radio signals to decide if the normal operation is allowed or if the device has to be disabled. The loader-menu should be able to detect this tunable in loader.conf and indicate which way of booting is the current default (in case the user adds it there to be on the safe side in the airplane).

Requirements:


SecureMines

Technical contact: &a.alfred;

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".

Requirements:


Small sysinstall renovation

Requirements:


Extract the partition and slice table editor from sysinstall

Technical contact: &a.netchild;

The partition and slice table editor in sysinstall is not only useful at system installation time, it is also a nice tool to handle new disks in an already setup system. The goal of this entry is to extract (and perhaps enhance) this editor from sysinstall into a standalone tool. This allows us to remove sysinstall when the new installer enters the tree without loosing nice functionality. Additionally novice users cannot shoot themselves in the foot by accidentally triggering the wrong actions in unrelated parts of sysinstall.

Requirements:


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 CD-ROM 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.

Requirements:


Improve our regression testing system

Technical contact: &a.nik;

&a.nik; has written a regression test infrastructure using Perl. More of the regression tests should be made to work with libtap.

Requirements:


Tracking performance over time

Technical contact: &a.brooks;

One of the major issues in a project with 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.


Write a NDMP data server

URL: The NDMP Initiative

The NDMP initiative was launched to create an open standard protocol for network-based backup for network-attached storage. Major commercial storage systems come with a compliant service. This allows major commercial backup systems to backup such NAS devices. Including a NDMP disk server into FreeBSD would allow to play nice out of the box (modulo some configuring) regarding backups in a corporate environment.

Requirements:


Add support for NO_* switches to "make delete-old"

Technical contact: &a.netchild;

The new "delete-old" and "delete-old-libs" target in /usr/src for 6.1 and -current should be extended to support the NO_* knobs, e.g. NO_RESCUE or NO_CRYPT, and delete files which are covered by those knobs.

Requirements:


Projects at FreeBSD.org

Additional projects may be found by browsing the FreeBSD Development Projects page. The most prominent projects are:

Do not forget to have a look at the other projects too or by viewing some of the recent Developer Status Reports.


Technical contacts

If you are interested in working on a project not explicitly mentioned above, you may want to contact one of the potential technical contacts below:

Additionally, there are a lot of interesting mailing lists that can be used when searching information about specific subjects.


&footer;