Posted :
FreeBSD is formed from :
The source code for the FreeBSD base system, ports and documentation , is stored by using a central subversion repository .
The repository has the following structure :
Development of the FreeBSD base system , is done in the -current trunk , also known as : freebsd-current . It is where new features are tested , added , and removed . This is where code will be first reviewed, and tested , by FreeBSD users , and other FreeBSD developers .
The freebsd-current trunk , is not to be used in production environment. freebsd-current has a tag of head .
Every
two to three years , the FreeBSD release engineering team ,
creates a stable branch from the
-current
trunk .
For example,
the stable branch
6
, was created in 2005
, the
stable branch
7
was created in 2008
, the stable branch
8
was created in
2010
...
There exists only one -current trunk , but there might be several -stable branch , at a given time .
To create a -stable branch , the FreeBSD release engineering team , requests from developers , to focus on stability , and on fixing existing bugs , instead of adding new features to freebsd-current . At this stage, commits approval to the -current branch , is not yet enforced , by the release engineering team . This stage is known as code slush.
After a period of time , after code slush , the release engineering team , freezes the freebsd-current trunk . During the freeze period , commits to the -current trunk , must be approved by the release engineering team . The kind of commits which are approved , are security and bug fixes, device drivers update ...
After a period of time ,
a new branch is created from
-current
, this is the stable branch .
The -stable
branch version number is incremented , so if the previous
-stable
branch version was 11
, the newly created
-stable
branch version , will be 12
.
A
stable branch has a tag of
RELENG_n
,
where n is the stable version number .
For example
RELENG_12
, is the tag for
freebsd-stable
12
, and
RELENG_11
is the tag for
freebsd-stable
11
.
After the creation of a -stable branch from -current , the -current branch is thawed . This means , it is not necessary for commit to be approved , by the release engineering team .
The
-current branch revision number is incremented ,
for example , if the revision number was 12
, before the creation of a new
-stable branch 12
, after the creation
of a new -stable branch 12
, the
-current branch revision number ,
will become 13
.
The code of the newly created -stable branch from -current , is frozen, and is used to create beta releases . After beta builds , and when ready , a releng branch is created .
For
example after the stable branch 12
is created from
-current , and after beta
builds are created from this stable branch ,
the releng branch
12.0
is created from the stable branch
12
.
A releng branch , has a tag of
RELENG_n_n
. For example ,
the releng branch
12.0
has a tag of
RELENG_12_0
.
The releng branch code is frozen , and is used to create release candidates . After the first release candidates is released ,the -stable branch is thawed .
Multiple release candidates are created from the releng branch , and when ready a final release is created . This final release is called the dot-zero release.
To
create the dot zero release ,
a
release
branch is created from the
releng
branch .
For example to create the dot zero release from the releng 12.0
branch ,
the release 12.0.0
branch is created .
A
release branch has a tag of
RELENG_n_n_n_RELEASE
. For example the release 12.0.0
branch
has a tag of
RELENG_12_0_0_0_RELEASE
.
After a release is created from the releng branch , the releng branch is handed to the freebsd security team , for security and critical bugs updates .
A stable branch is used for the creation and development of production releases . Production releases , can be used in production sites . The first release from the stable branch , is called : dot zero release .
A point release is created from the stable branch around four times a year . A point release and a dot-zero release , are updated by the FreeBSD security team for a period of three months . A point release and a dot-zero release recieve security and critical bugs updates .
A stable branch is updated for a period of five years . A stable branch , recieves security and bugs updates , and new features , which do not break , application binary interface compatibility , across , different releases , from the stable branch .
What
this means , is that if a call is made to a function , it will return the same result ,
across different releases from stable . For example ABI stability between
the dot-zero release 12.0.0
,
and the point release
12.1.0
is maintained .
ABI
compatibility , can be broken between different stable versions ,
for example between the -stable version
11
and the
-stable
version 12
.
Once a stable branch has been created , bugs , new features , and security fixes , are added , after being tested in the -current branch , for a period , of at least three days . Once bugs and security fixes have accumulated, a point release is created from the stable branch.
To create a point release , the release engineering team slush , the stable branch code . Next , the -stable branch is frozen , and beta releases are created from the frozen code .
After a period of time , and when ready , the releng branch is created . The releng branch code , is frozen , and release candidates , are created from this branch . After the first release candidate , the -stable branch is thawed .
After multiple release candidates , from the releng branch , a point release is created by creating a release branch . After having created the release branch , the releng branch , is handed to the freebsd security team , by the freebsd release engineering team , for security and critical bug updates .
Alpha builds or snapshots , are created every week , from freebsd-current and freebsd-stable . They are used for testing and to report bugs . Alpha builds includes : ISO and virtual machine images .