IdeasPage - FreeBSD Wiki (original) (raw)
Ideas Page
Contents
- Ideas Page
- Wireless
- Kernel
- Virtualization
- Networking
- Porting
- Userland / Installation Tools
- Global Projects (may touch everything)
- Possible Old or No Interest
- Ports
- `make db` target in ports
- See Also
Introduction
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.
 wiki-admin note to self: this page is prime for being triaged for staleness 20240827.
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, please include a contact method, so interested parties can get in touch.
Wireless
Wireless ideas can be found on WiFi/IdeasPage.
Kernel
Technical Contact markj@
DTrace is a dynamic tracing facility designed by Sun Microsystems and released in Solaris 10. It has been ported to FreeBSD and is widely used for profiling and debugging.
One component of DTrace is CTF, compat C type format, documented in ctf(5). DTrace uses CTF metadata from the kernel to obtain type definitions for kernel types.
Requirements
- Ability to read and understand foreign C code.
- Ability to write C code.
- A good understanding of the FreeBSD kernel.
Kernel Control Flow Integrity (kCFI)
[last updated: 2024-08-14]
Note, there is a WIP patch on phabricator which implements this.
Control Flow Integrity (CFI) is a security feature implemented mostly compilers and is fully supported by Clang/LLVM: the original prototype was indeed implemented for FreeBSD. CFI has greatly evolved and has been implemented in the Linux kernel and Android. CFI is relatively well documented and should be easy to implement on FreeBSD.
Requirements
- Ability to read and understand foreign C code.
- Ability to write C code and definitions.
- Interest in compilers, linkers, and how they work.
[last updated: 2018-03-19]
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.
Requirements
- Ability to read and understand foreign C code.
- Ability to write C code.
- Tool may be written in any language.
Suspend to disk
[last updated: previous to 2010-02-23]
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.
Virtualization
Finish upstreaming bsd-user enhancements
[last updated: 2024-02-01]
Mentor | Warner Losh |
---|---|
Skills | C (intermediate) |
Mid-term deliverable | All system calls into a patch stream for upstream, and can build packages with poudriere |
Duration | 175 hours |
Difficulty | Easy |
Expected Outcome | All bsd-user changes from our fork are upstream |
bsd-user is a set of modifications to the QEMU project. It is similar to the linux-user feature that's integrated into the QEMU project. Years ago, we forked our own tree, and had difficulty getting the changes at the time upstream. Since then, upstream attitudes have changed and they are very eager to get the bsd-user changes committed.
The current bsd-user fork is up-to-date with the latest qemu-project repo (as of the 7.2 release). The task here would be to break down the differences between our tree and upstream.
There's three groups of changes: (1) Changes to the binary loading. These are mostly the same upstream, but were originally based on linux-user. linux-user has evolved, but some of the relevant changes have not been merged over from linux-user. It is also desirable that refactoring the common items, like elf loading, could result in more code reuse and bsd-user's ability to keep up faster than it can today. (2) bsd-user has a number of architectures (powerpc, riscv and aarch64) that aren't in upstream today. These changes need to be broken down in to 50-100 line chunks, reviewed by the upstream and contributed to the maintainer to get into upstream. In addition, any adjustments or enhancements to the ABIs that have happened since the code was originally written may require adjustment to the current code. (3) bsd-user only has about half of the system calls implemented in the fork upstreamed. These also need to be chunked into small patches that can be reviewed upstream. There are some system calls that are poorly placed as well and may need changes to bsd-user's fork to correct.
A successful project will result in all or most of the changes being upstreamed. The successful candidate will also need to understand where to find FreeBSD's implementation for the architectural specific bits, as well as an understanding of setting up a poudriere build world, using poudriere jails and ways to effectively test subsets of the all the packages to ensure problems are corrected. A/B testing with the current really old version of qemu bsd-user based on 3.2 will help control regressions.
[last updated: 2013-04-22]
Technical Contact: see the VirtualBox Porting Team page
Description
- https://github.com/lwhsu/freebsd-vboxfs
- https://kernelnomicon.org/?p=650
- https://www.virtualbox.org/manual/ch04.html#sharedfolders
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.
Requirements
- Ability to read and understand foreign C code
- Ability to write C code
- Knowledge of the VFS subsystem
Networking
openPOWERLINK and other industrial ethernet protocols
[last updated: 2020-02-28]
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
Requirements
- Good knowledge of C and TCP.
- Able to understand the FreeBSD TCP/IP stack.
- A testbed with at least two machines.
Audit Base for Read-Only and NFS Mount Compatibility
[last updated: 2024-01-29]
FreeBSD has supported read-only and "root on NFS" for decades but has not experienced consistent testing for compatibility under these circumstances. Issues can include the failure of utilities to create temporary files and locking failures with "databases" such as /etc/pwd.db, /var/db/pkg/local.sqlite and /var/db/xenstore/dbf. Temporary workarounds include tmpfs(5) mounts for directories such as /var/db/, MD/MFS mounts, iSCSI/FC/ggate devices, or network-based authentication. Long-term solutions can follow the model of pkg(8)'s NFS_WITH_PROPER_LOCKING=yes option. Search terms to help understand the problem: "NFS flock", "sqlite on NFS". Motivation: "Cloud" and "Container" environments often achieve statelessness via simple mechanisms like read-only and network file system mounts.
Required skills: /bin/sh (moderate), System and Network configuration, sqlite, berkelydb and similar (moderate), hier(7) and general FreeBSD base awareness
Add audit(4) support to NFS
[last updated: 2024-02-01]
Skills | C (intermediate), Kernel (intermediate), Security (intermediate) |
---|---|
Mid-term deliverable | Ability to generate an audit trail for any NFSv3 RPC |
Difficulty | Medium |
Expected Outcome | Ability to generate an audit trail for any NFS RPCs |
Security Event Audit is a facility to provide fine-grained, configurable logging of security-relevant events, and is intended to meet the requirements of the Common Criteria (CC) Common Access Protection Profile (CAPP) evaluation. It can record an audit record for various events, such as process creation, network activity, or file system activity. However, it mostly works at the syscall level. Since the NFS server is implemented within the kernel, that means NFS RPCs don't generate any audit records. audit(4) can still be used within NFS networks, but auditd must be run on every NFS client. It would be a great addition if each NFS RPC could be audited. That would allow auditd(8) to run just on the NFS server, and still audit all NFS activity within the network.
Porting
Port FreeBSD to Windows Subsystem for Linux (WSL2)
[last updated: 2025-07-11]
WSL2 lets you run off-the-shelf Linux distros under Microsoft Windows using a custom kernel and init(8). We already support most of the technologies involved (HyperV, 9pfs...) and in theory it should be possible to run FreeBSD under WSL2. Someone would have to figure out the distribution format (apparently it can be a tar file) and the startup sequence.
Contact: freebsd-arch@
Requirements
- C programming and willingness to play with the init system.
Profile Guided Optimization (PGO)
[last updated: 2023-07-18]
Both GCC and clang offer the option of generating code that is optimized with CPU programming counter data by tools like Linux perf or FreeBSD pmc(3).
With 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 autofdo to generate a profile.
FreeBSD has no similar process. We should enhance tooling to enable generation of profiles in a compatible format.
Documentation
Profile Guided Optimization – Clang Compiler User's Manual
LLVM SPGO profile generation tool:
- llvm-profgen14, llvm-profgen(1) https://man.freebsd.org/cgi/man.cgi?query=llvm-profgen14&sektion=1&manpath=freebsd-ports
- llvm-profgen15, llvm-profgen(1) https://man.freebsd.org/cgi/man.cgi?query=llvm-profgen15&sektion=1&manpath=freebsd-ports
- llvm-profgen16, llvm-profgen(1) manual page installable with devel/llvm16, the online version is not yet available (2023-07-18).
NDMP data server
[last updated: previous to 2010-02-23]
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.
- Evaluate the existing revisions of the NDMP standard.
- Choose an appropriate revision (after checking of supported versions in commercial backup systems).
- Implement at least a NDMP data server.
- Bonus: implement a NDMP tape server (to allow attached tapes to be used).
Requirements
- Access to a commercial backup system with NDMP support (mostly for interoperability testing; since a NDMPcopy application seems to be available, this is not a hard requirement).
- Good knowledge of a programming language which is included in the base system.
- Knowledge about UFS snapshots.
Proxy auto-config file support for libfetch
[last updated: previous to 2010-02-23]
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.
References:
- Wikipedia Article on Proxy auto-config
- Proxy Auto-Configuration (PAC) file
- Proxy Auto-Config File Format
Requirements
- Strong knowledge of secure C programming.
Improve cron(8) and atrun(8)
[last updated: previous to 2010-02-23]
Currently, cron(8) and atrun(8) are outdated in their implementation. Here are some directions for improvement:
- Update cron(8) to ISC cron with security fixes from OpenBSD.
- Integrate the atrun(8) functionality into cron(8), as it was done in NetBSD.
Requirements
- Strong knowledge of the C language and Unix API.
libpw
[last updated: 2011-10-31]
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)
Requirements
- Knowledge of C
- Knowledge of pam/nss
Import syslogd improvements from NetBSD
[last updated: 2018-04-16]
Technical Contacts: emaste@, markj@
NetBSD's syslogd has a number of improvements from a former Google Summer of Code project available for porting:
- new syslog protocol api syslogp(3) that supports structured data and draft-rfc timestamps
- reliable tcp connections with queuing
- encrypted connections (TLS)
The changes are in NetBSD's repository in src/usr.sbin/syslogd, available for viewing on their cvsweb:
Requirements
- Good knowledge about the C programming language.
- Some familiarity with Capsicum, as syslogd runs in capability mode
Requirements
- Knowledge of /etc/rc.d scripts and ordering
- Basic understanding of C and UNIX
- Shell scripting in /bin/sh
Teach truss about netlink
[last updated: 2025-09-29]
Technical Contacts: kp@
More and more configuration calls are transitioning from ioctl to netlink. This means that truss $process only produces sendmsg()/recvmsg() output, reducing its utility for debugging. It should be possible to teach truss (ideally via libsysdecode so it also works for trace) enough about the netlink protocol to at least identify the command and result.
Requirements
- Basic understanding of C and UNIX
Global Projects (may touch everything)
EPUB Support in Documentation Build Infrastructure
[last updated: 2014-02-13]
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.
Requirements
- Ability to work with Makefiles
- Knowledge of SGML/XML transforms
Possible Old or No Interest
Document all sysctls
[last updated: previous to 2010-02-23]
Technical Contact: brd@, eadler@
Description
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.
- 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.
Ports
`make db` target in ports
[last updated: 2024-03-29]
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.
References:
- A make json target was committed in 3d9f300e01f5ecdb140027096c603623264ecc07 that creates a json representation of the ports tree.
- A review for adding make csv and make db already exists here. The former provides a way to load the ports information into any RDMS supporting CSV format. The later already does this and loads the data into an sqlite database
Requirements
- Scripting
- Basic knowledge in database
See Also
- For porting ideas check out WantedPorts
- For Beginner tasks check out JuniorJobs