Over the years, the FreeBSD Project has built up a list of ideas for implementation work that seems like it might be a good idea, but no hands are available to do it. If you would like to contribute to the FreeBSD Project, you might peruse this list to get a sense of the kinds of work that others have thought might be useful or available to do. Obviously, contributions are not limited to this list!

Please contact us before starting on it though -- sometimes items remain on the list after they are completed, and sometimes they are just ideas, rather than a recipe for success. Searching our mailing list archives may turn up the discussions leading to ideas being put on the list. Frequently the initial goal would be to simply investigate the idea, rather than produce code. Many project ideas list contacts, who it is worth sending an e-mail. Otherwise (and perhaps as well), send e-mail to our hackers@ mailing list.

For Google Summer of Code Students

Ideas on this list are generally unsuitable for Summer of Code projects (too large, too small, no available mentor, etc) but there may still be ideas here that could form the basis of a good GSoC task.

See: FreeBSD Google Summer of Code Ideas

Important: When adding an idea, include a contact method, so interested parties can get in touch.


Wireless ideas can be found on WiFi/IdeasPage.


File Systems

Improve the performance of dump/restore


A performance evaluation of the split cache (as is) and an unified cache (like e.g. NetBSD) would be interesting. More details in this mail to the hackers mailing list. Additional improvements are welcome too.


Filesystem decompression layer

Solaris 10 and newer provide dcfs; a read-only decompression stacking filesystem layer for UFS. Files are initially compressed by a userland fiocompress utility. The filesystem layer is very simple, it is implemented in single file that permits transparent decompression without the end user knowing if the file is compressed or not. While the implementation is really simple it is very useful by making possible to install in systems with little memory or for quick compression of files in typical read-only directories like /usr/bin. While the Solaris fiocompress implementation uses zlib, it would be easy to use more modern algorithms like lz4 or snappy.

References: File-System Development with Stackable Layers

Bring back the RAIDframe port


NetBSD has a software RAID framework that is very useful for prototyping or otherwise implementing RAID solutions. Around FreeBSD 5 there was an heroic effort to port it, hovever, the interfaces to devices and disks was changed and the port never caught up so the code was removed from FreeBSD in Revision 127066.



Practical Filesystem Design Book


Before working at Apple, Dominic Giampaolo wrote a 64 bit journalling filesystem for BeOS. The objectives were to have a modern filesystem capable of streaming for multimedia applications. It also supports indexing and Extended Attributes for desktop use. Haiku has implemented a version of the filesystem based on the documentation which is used as their base filesystem and is available under an MIT license. Porting it, or rather using the existing implementation as the basis for a new one, would make an interesting case for an alternative filesystem.


Porting HFS+

HFS Wiki


The Hierarchical File System was developed by Apple Inc. for use in MacOS. With the Release of MacOS X it received many new features, and the source code was made available as part of XNU. An initial FreeBSD 5.3 HFS port was made and although it was subsequently abandoned and support for locking has to be added, it would be excellent reference material for an updated port. A port would also be a good reference for bringing other interesting filesystems from Apple's Darwin.



Kernel fuzzing suite


FreeBSD's memguard(9), and the compiler stack protection offer a good framework to detect memory leaks and buffer overflows in the kernel and the complete OS is frequently checked with static analysis tools, but we lack kernel specific fuzzer testing tools to aid in such detection. Originally the linux Trinity fuzzer was the main example of such tool, Dmitry Vyukov's syzkaller is somewhat more promising, and as of lately there is also the TriForceAFL used for OpenBSD.

A native tool would be good but perhaps just running the Trinity tool under the linux emulator, along with memguard(9), would reveal general bugs in the kernel.

Reference: syzkaller for freebsd posting


Technical Contact rwatson@

Homepage: DTrace for FreeBSD

DTrace is a dynamic tracing facility designed by Sun Microsystems and released in Solaris 10. They have since released the major part of Solaris under the banner of OpenSolaris and the Common Development and Distribution License (CDDL) 1.0.



Implement support for Kernel Address Sanitizer

Technical Contact andrew@

The Kernel Address Sanitizer KASan is a dynamic memory error detector developed by Google based on the similar userland tool. It provides a fast and comprehensive solution for finding use-after-free and out-of-bounds bugs. It requires instrumentation in the kernel which has recently been added to NetBSD with abundant documentation.


Knowledge of kernel memory allocation.

IOCTL command checking tool

Technical Contact: brooks@

The ioctl(2) system call takes integer commands which are typically defined using various _IO*() macros in sys/sys/ioccom.h. One component of the command is the amount of data to be copied in and/or out of the kernel (usually specified by a C type to be copied). Any object which changes size between 32 and 64-bit variants of an architecture requires compatibility definitions and special handling (this commonly occurs if a pointer or long is included in the object directly.) Types may also change size due to differing padding rules. Additionally, all types containing pointers require special handling even if a complex definition allows the size not to change. It would be useful to have a tool to check all ioctl(2) commands for size stability and to check objects used as command arguments for pointers.


Suspend to disk

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.


Sync FreeBSD i386 boot code with DragonFly

Technical Contact: 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 and evaluate both implementations and port interesting/good parts.


Solaris Doors IPC Implementation

Doors provide a mechanism for processes to issue remote procedure calls to functions in other processes running on the same system. The door APIs were developed by Sun Microsystems as a core part of the Spring operating system and were officially available in Solaris 2.6. They are extensively used in Illumos.

In addition to the Solaris/Illumos port, which is well documented, there is also an outdated implementation for linux that can serve for comparison. The project would consist in understanding how the existing code works and designing a completely new, but compatible, implementation for FreeBSD.


Develop a netmap vnic for jails that allows connecting jails to vale

Contact: DanielEbdrup

Technical Contact: freebsd-virtualization@

Jail network connectivity has gotten a separate network stack through VNET/VIMAGE, but at present is limited to 10G between jails and the host. Utilizing a netmap based vnic for jails and the vale software switch to make IPC for jails <-> bhyve and the outside world much easier and faster. Additionally, it may very well be possible to adopt a lot of existing code from svn revision 293459.



bhyve gdb-stub/dcons integration

FreeBSD's 'bhyve' Hypervisor has a feature where it allows the kernel debugger to communicate with the outside world via a socket. Unfortunately it is quite slow, being polled one byte at a time. In addition it still uses the kernel on the VM to do all the work. Some avenues of improvement could include using the existing dcons memory buffer driver so that a whole buffer might be transferred at a time, or to make the current driver much faster. One might also intercept some of the commands (memory read for example) and perform them directly in the hypervisor so that cooperation of the virtualized system is not required to examine memory. It is even possible that by manipulating the processor flags appropriately, one could single step or 'break' the guest without its cooperation at all.


VirtualBox shared folder support for FreeBSD guests

Technical Contact: lwhsu@, gonzo@, decke@ Contact: vbox@


Oracle VirtualBox does unofficially support FreeBSD as host and guest operating system. VirtualBox shared folder support allows to access folders of your host from within the guest system. This is similar how you would use network shares in Windows networks except that shared folders do not need require networking, only the VirtualBox Guest Additions.

This task was part of GSoC 2013 where the main focus was on porting the code to FreeBSD. The result was almost working read only support but more bugs need to be fixed and read write support needs to be added and tested.



The manufacturing industry and automation have special requirements for networking in industrial environments: while the cabling has to carry special isolation there is also the requirement to support real-time communications. In such environments, there is a tendency to move towards Ethernet to take advantage of the existing hardware. Several Ethernet types have been developed and standardized to support real-time, with Ethernet/IP and PROFINET being the most common. Ethernet PowerLink (EPL) is particularly interesting as the protocol stack is available under a BSD license.

References: openPowerLink

SCPS, Space Communication Protocol Standards

SCPS is a protocol suite designed to allow communication over challenging environments. Originally developed jointly by NASA and DoD's USSPACECOM, these protocols are used for commercial, educational, and military environments. A student project in this area would involve implementing various network protocols according to specification (SCPS File Protocol, similar to FTP; SCPS-Transport Protocol, based on TCP; and others.)

Note that European Space Agency has now an ESA Summer of Code in Space program and while FreeBSD is not a mentoring organization, interested students could motivate such a process.

References: Consultative Committee for Space Data Systems



Port FreeBSD to new platforms

Porting to new platforms is a good way to learn the internals of FreeBSD and serves to check the general portability of the base system.

While there are important efforts to maintain an external toolchain working it would be ideal to start working on newer platforms that are already supported by the toolchain in base and where the hardware support is either easy to find or well supported through emulation.

Although not exactly new, updating the SPARC64 port or supporting the PowerPC in Little Endian mode would be interesting projects.

Contact: freebsd-arch@


Port FreeBSD on Tablet device

Porting FreeBSD to arm, intel tablets and next mobile device.

Contact: freebsd-arch@


Testing and Continuous Integration

POSIX compliance testing framework


Standards compliance has always been one of the main objectives for the FreeBSD project. In the past we had some efforts to follow regular testing procedures but we haven't followed up the efforts with proper and sustainable infrastructure.

The Open Group has made some testsuites freely available. In particular there used to be a FreeBSD port of the TET testing suite, but this was removed due to a lack of maintenance and other issues. The lsb-vsx Linux testsuite should also be cleaned up so that together we are able to do regular testing on both linux-emulation and FreeBSD-native support.

Any compliance issue should be reported in Bugzilla and an attempt to contact the respective group should be made to draw a plan towards compliance.

Travis Continuous Integration Support for FreeBSD

Technical Contact: rodrigc@,


Travis Continuous Integration is a very popular Continuous Integration system used by projects hosted on GitHub. If a GitHub project has a .travis.yml config file in the root directory, the Travis system will build and test the project if new code is committed to the GitHub project.

Currently, Travis only supports Linux and MacOS X. The Travis project closed issue 1818 which was a request to add FreeBSD support to Travis, due to lack of resources. However, having this support would be very useful, and allow FreeBSD to test many third party projects on GitHub.


Userland / Installation Tools

Profile Guided Optimization (PGO)


Both GCC and clang offer the option of generating code optimized with the CPU programming counter data from by tools like linux perf or FreeBSD's pmc(3). On linux, the recommendation is to use the -b flag to use the Last Branch Record (LBR) to record call chains. This information is then converted with the autofdo tool to generate a profile. We currently don't have a similar process for FreeBSD: we need to enhance our tooling to make it possible to generate such profiles in a compatible format.

NDMP data server

URL: Network Data Management Protocol (NDMP)

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.


Port prebind from OpenBSD

The OpenBSD prebind is a secure implementation of prelinking that is compatible with address space randomization. Prelinking allows to speed up application startup when a lot of libraries are involved. This should show a noticeable effect with e.g. GNOME/KDE.


Proxy auto-config file support for libfetch

A proxy auto-config (PAC) file contains a JavaScript function "FindProxyForURL(url, host)" that determines which HTTP or SOCKS proxy, if any, to use to access a given URL. In most application the file may be specified manually or discovered using the Web Proxy Autodiscovery Protocol. Support for PAC files in libfetch would make fetch more versitle.

Supporting PAC files nominally requires a fairly complete JavaScript implementation. Google's V8 JavaScript engine is BSD Licensed, however it compiles code to native machine code so platform support is an issue. However, the parser etc may provide a good starting point, and other engines may also exist and should be evaluated. A minimalist implementation of the language with commonly used constructs such as if/else, string comparison, and functions would be sufficient in many cases.



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.

m@ is working on a bundled PXE installer as part of his BSDInstaller project within the Google Summer of Code 2006. The PXE Installer is working but some non-PXE related issues have to be solved before it can enter the tree.


Improve cron(8) and atrun(8)

Currently, cron(8) and atrun(8) are outdated in their implementation. Here are some directions for improvement:



Technical Contact

Create a library to be able to manage users/groups easily, it also should have a pam/nss-like plugin framework for different account systems.

libutil has pw_* and gr_* undocumented functions which allow user/group manipulation

writing pw_*() and gr_*() manpages

known users for that library: pkgng, pw(8)


resurrect memory leak detector libmprof

Technical Contact: julian@

There used to be, many years ago, a port called mprof, which would do one thing, but do it very well: Find memory leaks. Unfortunately it has bitrotted and no longer works. It reads symbols from the executable, and correlates it with a detailed memory allocation trace to produce a very useful memory allocation leak descrition.


Safe crash dumps

Technical Contact: gavin@

Crash dumps are important for collecting debugging information but are also disabled by default because they can consume much space in /var if the user doesn't pay attention to them.

What we miss is a safe way to enable crash dumps by default without having to worry about them filling up /var.


Import syslogd improvements from NetBSD

Technical Contacts: emaste@, markj@

Note - there is work in progress on this project, please contact Ed or Mark for details.

NetBSD's syslogd has a number of improvements from a former Google Summer of Code project available for porting:

The changes are in NetBSD's repository in src/usr.sbin/syslogd, available for viewing on their cvsweb:


RAID and disk monitoring suite

Technical Contact:

There have been several organizations that have independently developed RAID and disk failure monitoring tools. These should be gathered together into a unified group of daemons and monitoring scripts to provide a consistent view of disk status.


Global Projects (may touch everything)

EPUB Support in Documentation Build Infrastructure

Suggested Summer of Code project idea

Enhance the FreeBSD Documentation Project build infrastructure to generate EPUB format output suitable for eBook readers from such as iPads and Kindles.


PerfVisor (PERFormance adVISOR)

Coordination: netchild@

Possible Old or No Interest

Document all sysctls

Technical Contact: brd@, eadler@


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. mat has done some development in Perforce, in the mat_sysctl_cleanup branch.


BSD-licensed ELF Tools

Technical Contact: jkoshy@, kaiw@

Create BSD-licensed versions of ELF processing tools (e.g., ld, dbx, as and others) using the ELF(3) and GELF(3) API set. Identify overlapping functions in those tools and create a library out of the common functions. Identify parts which can be generated by tools (e.g., machine code parser generators) to support our Tier-1 and Tier-2 architectures.



BSD-licensed Text-Processing Tools

Part of Summer of Code 2010, Part of Summer of Code 2008

Technical Contact: gabor@

grep: It has been committed to the base system and available as an alternative of GNU grep. The compatibility is good but the performance is quite behind GNU grep, which prevents us from using it as a default. There are also some problems of regular expressions involved. It is under active development by gabor@.

diff/diff3/sdiff: Many command-line options are supported but some features are still missing. Maybe the three programs can be integrated into a single binary, this should be evaluated. A thorough performance benchmark should also be done. See SummerOfCode2012/JesseHagewood for last status.

mdocml: Some groff features are very hard to implement but they aren't strictly needed to render our man pages. Yet some manuals do not compile with mdocml. Investigate the reasons and create a migration plan.


The goal of this project is to get a tool which can analyze a system for performance bottlenecks and maybe even give some hints what to do next.

This is not a GSoC project. Maybe small parts of it can be done during a GSoC.

Prerequisites you should know/read to understand the project steps:

Project phases

Initial phase

Improvement phase

Visualization phase

Cloud phase (everything is cloudy nowadays...)

Datawarehouse phase (buzzword bingo!)


The first item in the initial phase is a big item. It may be better to see the complete initial phase as an iterative or divide and conquer step. First determine some high level resources and process all steps of the initial phase on them. Then repeat the initial phase again by braking up the high level resources in more detailed items (e.g. first "all CPU in system" as one resource, second "each CPU in system" as a resrouce, third breaking up each CPU via hardware performance counters).

GSoC info

Each phase is a big project of its own. Do not expect to be able to do it during some weekends or during a GSoC. If you think you can, you did not get the full scope, think again. If you still insinst after rethinking, be our guest, but you better prepare a very good outline what you want to do when, how, at which level of detail (e.g. come with a list of resources for the first item in the initial phase), and also include what you will NOT do/cover/handle but could be related (e.g. CPU internal performance counters if you want to handle the CPU performance side of this). You already need to know FreeBSD (you use it already on your server or desktop since several months) and you shall not be afraid to ask questions or discuss on the mailinglists. This is not a project for 2h per day, if you are not motivated to spend time on this, you better chose a different topic.

This can be made "big enough" to be a project suitable for finals at your university (depending on the requirements of your university, with or without extending it over the end of the GSoC).


`make db` target in ports

Technical Contact: bapt@

A target in ports tree root that pulls all possible information out of the prots tree into a db, for example, sqlite. From which many things can be query fastly and historical data can be retrieved by querying the snapshots.




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.

  1. For porting ideas go to WantedPorts

  2. For Beginner tasks check out JuniorJobs

IdeasPage (last edited 2021-06-17T22:43:15+0000 by WarnerLosh)