Tasks for new contributors that should take ~ a few days to complete. Looking for this list, but for [[Ports|ports]]? Check out [[WantedPorts]]. What about other ideas? Look at [[IdeasPage]] ====== General kernel work hints ====== * Use a virtual machine: VirtualBox and [[bhyve]] are good options. * Kernel should always have debugging options enabled. [[Glossary#CURRENT|CURRENT]] has most [[http://www.freebsd.org/doc/en/books/developers-handbook/kerneldebug-options.html|kernel debugging options]] enabled by default. * Code should follow [[https://man.freebsd.org/style(9)|FreeBSD Code Style Guidelines]], unless there are compelling cases to make exceptions. ====== How to submit patches ====== Mail technical contact and inline the patch (don't attach, have it as a part of the mail). It may be your e-mail client or something along the way will mess with the patch, so consider providing an url as a backup. The patch should be against **head** and in unified format (diff -u, git diff, svn diff etc.). ====== Kernel projects ====== ===== Various kernel man pages needed ===== **Technical Contact**: [[JohnMarkGurney]] ==== Difficulty ==== Easy ==== Description ==== Add missing man pages for parts of the %%FreeBSD%% kernel. [[Doc/MissingManpages]] directs readers to start at %%FreeBSD%% bug [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=108980|108980 – list of missing man pages]]. Currently known missing: * PCPU stuff: DPCPU_* dpcpu_* PCPU_* * sched_* * if_*, like if_setdrvflagbits and many other in if_var.h * cold (the variable that denotes pre/post interrupts) and maybe other items in sys/systm.h * cn* (sys/cons.h), such as cnputs * ppsratecheck * sys/param.h/cdefs.h helper functions like: powerof2, nitems, setbit, member2struct, %%<%%underbar>%%<%%underbar>offsetof, * drivers: cesa, glxsb, sec, cryptocteon, nlmsec, rmisec * device pager: cdev_pager_allocate, mmap_single, vm_pager_allocate * FEATURE (macro that adds kern.features) * tty_makedev and friends * m_ether_tcpip_hash* * sbuf_uionew * cdevsw structure * calculate_crc32c, crc32 * DIOCG* ioctls from sys/disk.h * Document which standard libc functions are available in the kernel ==== Requirements ==== * minimal C language programming skills. * Ability to read/write mdoc(7), though jmg@ is willing to help w/ mark up. ====== User space projects ====== ===== Improve Test Coverage ===== **Technical Contact**: JohnMarkGurney ==== Difficulty ==== Easy ==== Description ==== Implement additional tests. Currently known missing: * implement missing sbuf tests, [[https://svnweb.freebsd.org/base/head/lib/libsbuf/tests/sbuf_core_test.c?view=log|sbuf_core_test.c]] has a few tests that are if 0'd out at the end of the file You can look at the [[https://man.freebsd.org/cgi/man.cgi?query=atf-c&apropos=0&sektion=0&manpath=FreeBSD+11.2-RELEASE+and+Ports&arch=default&format=html|atf-c(3)]] manpage for info on writing tests. ==== Requirements ==== * basic C language programming skills. ===== Tidy up some ELF toolchain loose ends ===== **Technical Contact**: EdMaste ==== Difficulty ==== Medium ==== Description ==== We've migrated to using the ELF toolchain version of tools like size, strip, nm, etc. Some of the ELF toolchain tools are derivatives of tools that first appeared in the %%FreeBSD%% tree, and others are new. There are a few remaining tasks in the ELF toolchain project. * Identify differences between the ELF toolchain and %%FreeBSD%% versions of ar/ranlib and elfdump. Either incorporate ELF toolchain changes into %%FreeBSD%%, or incorporate the %%FreeBSD%% changes into ELF toolchain, and switch to using the ELF toolchain source from contrib/ * Identify missing functionality relative to contemporary GNU Binutils and implement equivalent functionality in ELF toolchain. ==== Requirements ==== * Knowledge of C * Knowledge of the ELF format ===== Various man page improvements ===== **Technical Contact**: JohnMarkGurney ==== Difficulty ==== Easy ==== Description ==== [[Doc/MissingManpages]] directs readers to start at %%FreeBSD%% bug [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=108980|108980 – list of missing man pages]]. Add or improve man pages: * intro(3) is missing MANY libraries that are now common * libc(3) is missing, include reference and places for notable additions, and standards compliance * timespec, sbintime_t and various sys/time.h are not documented. ==== Requirements ==== * minimal C language programming skills. * Ability to read/write mdoc(7), though jmg@ is willing to help w/ mark up. ====== Build projects ====== ====== Past projects ====== ===== Validate coredump format string ===== **Technical Contact**: MateuszGuzik Valid patch received. ==== Difficulty ==== Easy ==== Description ==== The pattern can be set with the **kern.corefile** sysctl. No validation is performed. However, errors are detected during traversal. Modify the code so that it validates the pattern prior to accepting it. ===== Convert mountlist_mtx to rwlock ===== **Technical Contact**: MateuszGuzik Valid patch received. ==== Difficulty ==== Easy ==== Description ==== Self-explanatory. Rename it to mountlist_lock. Note that mountlist is rarely modified and even shared locking with rwlocks introduces overhead. Interested person can upgrade this task to non-junior by coming up with a solution exploiting rare need to modify the list. Example approaches include designing a locking primitive with cheap shared locking (think: per-cpu) at the expense of exclusive locking. ==== Requirements ==== * C language programming skills. ===== Fix corefilename race ===== **Technical Contact**: MateuszGuzik Committed as [[https://svnweb.freebsd.org/changeset/base/280312|r280312]]. ==== Difficulty ==== Easy ==== Description ==== The kernel keeps core file pattern in corefilename array. It can be modified at any time, including when it is being accessed to generate core names. Fix the problem. ===== sysctl reporting current working directory ===== **Technical Contact**: MateuszGuzik Committed as [[https://svnweb.freebsd.org/changeset/base/274167|r274167]]. ==== Difficulty ==== Medium ==== Description ==== Right now current working directory of a differnent process can be obtained with **kern.proc.filedesc** sysctl. But it also returns the list of open file descriptors which adds a lot of overhead if the list is long (e.g. 10k entries). One frequent user of this sysctl is **tmux** which wants current working directory of various processes, but has to obtain the whole list. Add a sysctl which returns only current working directory or all special entries (see **procstat -f** output for the list), but no files. Provide an example patch for tmux utilizing this new functionality. ==== Requirements ==== * C language programming skills. ===== Embedd group table into struct ucred ===== **Technical Contact**: MateuszGuzik Committed as [[https://svnweb.freebsd.org/changeset/base/274122|r274122]]. ==== Difficulty ==== Easy ==== Description ==== Each instance of **strut ucred** has a pointer to a table with groups. Current size of **struct ucred** is 160 bytes, while it occupies space in 256-byte slab (i.e. we waste almost 100 bytes). On the other hand default group limit is 16 which gives 64 byte allocated from 64-byte slab. Extend **struct ucred** with **gid_t** table of **XU_NGROUPS** elements and use it unless a bigger size is requested, in which case allocate memory just like current code does. ===== Temporary buffer in setgroups ===== **Technical Contact**: MateuszGuzik Committed as [[https://svnweb.freebsd.org/changeset/base/273684|r273684]]. ==== Difficulty ==== Easy ==== Description ==== Currently **setgroups** always allocates a temporary buffer. But most callers will provide small number of groups and for such cases a buffer on the stack will work just fine. Provide a temporary buffer capable of holding **XU_NGROUPS** groups and update the code to use it when appropriate. See **sys_poll** implementation in **kern/sys_generic.c** for an example of this approach. A harder solution would be to pass it down to kern_getgroups which allocates memory anyway and copyin directly to new cred buffer. ==== Requirements ==== * C language programming skills. ===== Replace loginclass mutex with rwlock ===== **Technical Contact**: MateuszGuzik Committed as [[https://svnweb.freebsd.org/changeset/base/273763|r273763]]. ==== Difficulty ==== Medium ==== Description ==== **kern/kern_loginclass.c** uses a mutex, even though rwlocks seem to be more suitable. While here update **loginclass_find** to lookup first and only allocated when needed, but beware of typical races. See **uifind** in **kern/kern_resource.c** for an idea how it should look like. ==== Requirements ==== * C language programming skills.