Skip site navigation (1) Skip section navigation (2)

Site Navigation

FreeBSD list of projects and ideas for volunteers

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 questions about this list, please contact Alexander Leidinger or Joel Dahl.


Project ideas

File System

Kernel

Networking

Security

Userland / Installation Tools

Additional Information


Autofs

Technical contact: Alfred Perlstein

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:

  • Knowledge of file systems and network file systems.
  • Good knowledge of C.

Implement Magic Symlinks

Technical contact: John W. De Boskey

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

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • Some file system knowledge.

Fix mdfs lockups when using non-sync operation modes

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

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • Knowledge of the VFS and VMA subsystems.

Usable lock implementation with SX-semantics

Technical contact: Max Laier

The current sx(9) implementation has several problems that make it unusable in many areas: Might sleep (cv_wait) on the shared lock acquisition, implicit, hardcoded priority order without starvation protection, ... There are several handrolled lock implementations with SX-semantics in the tree already that solve some of the problems in their specific domain: MAC, pfil, ipfw, if_bridge, ...

  • Review existing uses of non-standard sx-locks.
  • Design an API usable to replace most/all of the handrolled hacks or find an existing API to do the same.
  • Write the actual code.

Requirements:

  • C knowledge.
  • Knowledge about shared/exclusive locking in SMP systems.

Document as many sysctls as possible

Contact: Brad Davis

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.

  • Find every undocumented sysctl in the kernel.
  • Try to determine what this sysctl is for and document it.

Requirements:

  • Ability to read and understand foreign C code.

Document the sound subsystem

Technical contacts: Alexander Leidinger, Ariff Abdullah

  • Add sound subsystem related section 9 manual pages, so far no sound subsystem related manual pages exists.
  • Add an example driver in share/examples which allows to write a new driver. For this purpose the example driver should contain enough documentation as comments and/or pointers to documentation in man-section 9. This work can be based upon this template.
  • Rewrite the sound subsystem chapter in the FreeBSD Architecture Handbook. The rewrite should contain an overview of the available parts in the sound subsystem and how they interact (data flow, dependencies, ...) and fit together. Additionally it should contain links to already available documentation (official standards, section 9 manual pages, ...).

Requirements:

  • Ability to read and understand foreign C code.
  • Documentation writing skills.

Syncing with the 4Front Technologies OSS v4 API

Technical contact: Alexander Leidinger

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:

  • Add the necessary interfaces.
  • Add appropriate code to the sound subsystem/drivers where possible.
  • Document the work (manual pages, maybe sound subsystem chapter in the FreeBSD Architecture Handbook, maybe extending the example driver). This part overlaps with the sound subsystem documentation project. Maybe 4Front is willing to donate parts of their documentation. Coordination regarding this is required.
  • Use the improved API in our userland programs where it is beneficial.

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • At least one supported sound card.

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

Technical contact: Alexander Leidinger

URL: 4Front Technologies, SALSA

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • At least one supported sound card.

Improve locking of the sound system

Technical contact: Ariff Abdullah

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • A good understanding of the FreeBSD locking methods.

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

Technical contact: Ariff Abdullah

URL: HDA Specification

  • Have a look at the specification.
  • Implement HDA support.

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • HDA sound card.

Implement a generic input device layer

Technical contact: Philip Paeps

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 (Philip Paeps 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:

  • Ability to read and understand foreign C code.
  • Ability to write C code.

Add locking to the CAM layer

Technical contact: Scott Long

Scott Long has been working on this for a while, and he has patches in Perforce.

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • Knowledge about SCSI.
  • A good understanding of the FreeBSD locking methods.

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:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • Knowledge about (i)SCSI/CAM.

Port DragonFly's process checkpointing

Technical contact: Bruno Ducrot

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:

  • Ability to read and understand foreign C code.
  • Ability to write C code.

Evaluate and perhaps port DragonFly's optimized memcpy/bcopy/bzero support subsystem (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).

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • Knowledge of at least i386/MMX/XMM assembly.
  • A good understanding of the FreeBSD SMP system.
  • Roughly 6 weeks of free time.

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

Technical contact: John Baldwin

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:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • Knowledge of i386 assembly.
  • Knowledge of BIOS interfaces.
  • Knowledge of low-level boot behavior.

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:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • A good understanding of the FreeBSD SMP system.

Implement PCI-Hotplug support

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • A good understanding of low-level access of the hardware.
  • A good understanding of the FreeBSD device drivers.

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:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • A good understanding of the FreeBSD kernel.

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.

  • Determine a way how to distinguish between 32 bit and 64 bit applications when entering a system call.
  • Design and implement 64 bit support while keeping 32 bit support.

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • A good understanding of how to do a clean room implementation of GPL'ed code (no copy & paste!).

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.

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.
  • A good understanding of how to do a clean room implementation of GPL'ed code (no copy & paste!).

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:

  • Knowledge of assembly code.
  • Knowledge of ".cfi_*" pseudo-ops to insert dwarf2 frame descriptors.

Suspend to disk

Technical contacts: Nate Lawson, Bruno Ducrot

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:

  • Good knowledge of C.
  • Understanding of the hardware/software interface.
  • A laptop that works with ACPI.
  • Kernel awareness.

Dynamic module references

Technical contacts: Sam Leffler

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:

  • Good knowledge of C.
  • Kernel awareness.

Add zeroconf (Rendezvous/Bonjour) support to FreeBSD

  • Find/write a suitable zeroconf implementation.
  • Add zeroconf support to the base system daemons.

Requirements:

  • Ability to read and understand foreign C code.
  • Ability to write C code.

Network Disk Device

Technical contact: Alfred Perlstein

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:

  • Understanding or interest in remote procedure call systems.
  • Understanding or interest in networking (TCP/IP).
  • Interest to learn how UNIX® device drivers work as well as process management.

NFS Lockd (improve semantics)

Technical contact: Alfred Perlstein

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

Requirements:

  • Good knowledge of C.

NFS Lockd (kernel implementation)

Technical contact: Alfred Perlstein

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

Requirements:

  • Good knowledge of C.
  • Good understanding of NFS.
  • Good understanding of locking.
  • Good understanding of RPC.
  • Good understanding of kernel level networking.

Port Web100 to FreeBSD

Technical contact: Brooks Davis

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:

  • Good knowledge of C.
  • 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.
  • Good understanding of the TCP protocol.
  • Good understanding of kernel interfaces.

WPA2 preauthentication support in hostapd

Technical contact: Sam Leffler

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:

  • Good knowledge of C.
  • Wireless networking fundamentals.
  • WPA-capable wireless network setup.

IAPP preauthentication support in hostapd

Technical contact: Sam Leffler

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:

  • Good knowledge of C.
  • Wireless networking fundamentals.
  • Wireless network setup.

SecureMines

Technical contact: Alfred Perlstein

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:

  • Good knowledge of C.
  • Good understanding of the Unix process model.
  • Good understanding of the FreeBSD kernel.

Small sysinstall renovation

  • Ask for country & keyboard layout at start - so international keyboards work correctly.
  • Ask for network configuration before install - so you do not have to configure the net twice.
  • Get hostname from dhcp server as well.
  • Make a guess of the timezone based upon country & keyboard.
  • Write the FreeBSD version at the top of the display (or somewhere similar visible) - so lazy users know what they are installing (version: release, stable, snapshot + arch: i386, amd64, etc) even when the CD is unlabeled.
  • Other usability improvements not yet thought of.

Requirements:

  • Good C knowledge (reading and writing).
  • No fear regarding "naturally grown" code.

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:

  • Good PXE knowledge.

Improve our regression testing system

Technical contact: Nik Clayton

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

  • Many of the existing tests should be moved from using assert() to using ok() and friends from libtap.
  • More regression tests should be written.

Requirements:

  • Good knowledge of scripting languages (perl preferred).
  • Good knowledge of software testing.

Tracking performance over time

Technical contact: Brooks Davis

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.


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.