Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. 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. juniorjobs.txt Last modified: 2023/07/31 12:55by MitchellHorne