diff --git a/en/projects/ideas/index.sgml b/en/projects/ideas/index.sgml index 8f58dc7e9c..61a99bd5c1 100644 --- a/en/projects/ideas/index.sgml +++ b/en/projects/ideas/index.sgml @@ -1,1007 +1,1024 @@ - + %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


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

Requirements:


Fix mdfs lockups when using non-sync operation modes

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

Requirements:


Working kbdmux

Technical contact: &a.emax;

Deadline: January 31

We need this for the growing number of systems that assume that USB is the primary keyboard. Current status appears to be that the kbdmux driver breaks very easily. We need this working well enough where it can be enabled by default, and all attached keyboards Just Work. This needs to be resolved before FreeBSD 6.1.

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:

+ + +
+

Usable lock implementation with SX-semantics

Technical contact: &a.mlaier;

URL: Project page on the wiki

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

Requirements:


Document as many sysctls as possible

Contact: &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.

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 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:


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 contacts: &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 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:


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:


SMP kernels for install

Deadline: January 31

Right now we only install a UP kernel, for performance reasons. We should be able to package both a UP and SMP kernel into the release bits, and have sysinstall install both. It should also select the correct one for the target system and make that the default on boot. The easiest way to do this would be to have sysinstall boot an SMP kernel and then look at the hw.ncpu sysctl. The only problem is being able to have sysinstall fall back to booting a UP kernel for itself if the SMP one fails. This can probably be 'faked' by setting one of the SMP-disabling variables in the loader. But in any case, the point is to make the process Just Work for the user, without the user needing to know arcane loader/sysctl knobs. SMP laptops are here, and we should be ready to support SMP out-of-the-box. This needs to be resolved before FreeBSD 6.1.

Requirements:


Small sysinstall renovation

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:


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;