Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
DEVELOPMENT(7)	   FreeBSD Miscellaneous Information Manual	DEVELOPMENT(7)

     development -- introduction to FreeBSD development	process

     FreeBSD development is split into three major suprojects: doc, ports, and
     src.  Doc is the documentation, such as the FreeBSD Handbook.  To read
     more, see:

     Ports, described further in ports(7), are the way to build, package, and
     install third party software.  To read more, see:

     The last one, src,	revolves around	the source code	for the	base system,
     consisting	of the kernel, and the libraries and utilities commonly	called
     the world.

     The Committer's Guide, describing topics relevant to all committers, can
     be	found at:

     FreeBSD src development takes place in the	project-hosted Git repository,
     located at:

     The push URL is:


     There is also a list of public, read-only Git mirrors at:

     The `main'	Git branch represents CURRENT; all changes are first committed
     to	CURRENT	and then usually cherry-picked back to STABLE, which refers to
     Git branches such as `stable/13'.	Every few years	a new STABLE is
     branched from CURRENT, with an incremented	major version number.  Re-
     leases are	then branched off STABLE and numbered with consecutive minor

     The layout	of the source tree is described	in its file.	Build
     instructions can be found in build(7) and release(7).  Kernel programming
     interfaces	(KPIs) are documented in section 9 manual pages; use `apropos
     -s	9 .' for a list.  Regression test suite	is described in	tests(7).  For
     coding conventions, see style(9).

     To	ask questions regarding	development, use the mailing lists, such as
     freebsd-arch@ and freebsd-hackers@:

     To	get your patches integrated into the main FreeBSD repository use
     Phabricator; it is	a code review tool that	allows other developers	to re-
     view the changes, suggest improvements, and, eventually, allows them to
     pick up the change	and commit it:

     To	check the latest FreeBSD build and test	status of CURRENT and STABLE
     branches, the continuous integration system is at:

     Check out the CURRENT branch, build it, and install, overwriting the cur-
     rent system:

	   git clone src
	   cd src
	   make	-sj8 buildworld	buildkernel installkernel
	   shutdown -r now

     After reboot:

	   cd src
	   make	-j8 installworld

     Rebuild and reinstall a single piece of userspace,	in this	case ls(1):

	   cd src/bin/ls
	   make	clean all install

     Quickly rebuild and reinstall the kernel, only recompiling	the files
     changed since last	build; note that this will only	work if	the full ker-
     nel build has been	completed in the past, not on a	fresh source tree:

	   cd src
	   make	-sj8 kernel KERNFAST=1

     To	rebuild	parts of FreeBSD for another CPU architecture, first prepare
     your source tree by building the cross-toolchain:

	   cd src
	   make	-sj8 toolchain TARGET_ARCH=aarch64

     Afterwards, to build and install a	single piece of	userspace, use:

	   cd src/bin/ls
	   make	buildenv TARGET_ARCH=aarch64
	   make	clean all install DESTDIR=/clients/arm

     Likewise, to quickly rebuild and reinstall	the kernel, use:

	   cd src
	   make	buildenv TARGET_ARCH=aarch64
	   make	-sj8 kernel KERNFAST=1 DESTDIR=/clients/arm

     git(1), witness(4), build(7), hier(7), ports(7), release(7), tests(7),
     locking(9), style(9)

     The development manual page was originally	written	by Matthew Dillon
     <> and first appeared in	FreeBSD	5.0, December 2002.
     It	was since extensively modified by Eitan	Adler <> to
     reflect the repository conversion from cvs(1) to svn(1).  It was rewrit-
     ten from scratch by Edward	Tomasz Napierala <> for
     FreeBSD 12.0.

FreeBSD	13.0		       November	1, 2022			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help