View | Details | Raw Unified | Return to bug 264771
Collapse All | Expand All

(-)b/documentation/content/en/books/dev-model/_index.adoc (-211 / +207 lines)
Lines 1-10 Link Here
1
---
1
---
2
title: A project model for the FreeBSD Project
2
title: A project model for the FreeBSD Project
3
authors: 
3
authors:
4
  - author: Niklas Saers
4
  - author: Niklas Saers
5
copyright: Copyright © 2002-2005 Niklas Saers
5
copyright: Copyright © 2002-2005 Niklas Saers
6
description: A formal study of the organization of the FreeBSD project
6
description: A formal study of the organization of the FreeBSD project
7
trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"] 
7
trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
8
bookOrder: 45
8
bookOrder: 45
9
tags: ["model", "project model", "FreeBSD"]
9
tags: ["model", "project model", "FreeBSD"]
10
---
10
---
Lines 102-126 I would like to thank the following people for taking the time to explain things Link Here
102
[[overview]]
102
[[overview]]
103
== Overview
103
== Overview
104
A project model is a means to reduce the communications overhead in a project.
104
A project model is a means to reduce the communications overhead in a project.
105
As shown by [<<brooks, Brooks, 1995>>], increasing the number of project participants increases the communication in the project exponentionally. 
105
As shown by [<<brooks, Brooks, 1995>>], increasing the number of project participants increases the communication in the project exponentionally.
106
FreeBSD has during the past few years increased both its mass of active users and committers, and the communication in the project has risen accordingly.
106
FreeBSD has during the past few years increased both its mass of active users and committers, and the communication in the project has risen accordingly.
107
This project model will serve to reduce this overhead by providing an up-to-date description of the project. 
107
This project model will serve to reduce this overhead by providing an up-to-date description of the project.
108
108
109
During the Core elections in 2002, Mark Murray stated "I am opposed to a long rule-book, as that satisfies lawyer-tendencies, and is counter to the technocentricity that the project so badly needs."
109
During the Core elections in 2002, Mark Murray stated "I am opposed to a long rule-book, as that satisfies lawyer-tendencies, and is counter to the technocentricity that the project so badly needs."
110
[<<bsd-election2002, FreeBSD, 2002B>>].
110
[<<bsd-election2002, FreeBSD, 2002B>>].
111
This project model is not meant to be a tool to justify creating impositions for developers, but as a tool to facilitate coordination.
111
This project model is not meant to be a tool to justify creating impositions for developers, but as a tool to facilitate coordination.
112
It is meant as a description of the project, with an overview of how the different processes are executed.
112
It is meant as a description of the project, with an overview of how the different processes are executed.
113
It is an introduction to how the FreeBSD project works. 
113
It is an introduction to how the FreeBSD project works.
114
114
115
The FreeBSD project model will be described as of July 1st, 2004.
115
The FreeBSD project model will be described as of July 1st, 2004.
116
It is based on the Niels Jørgensen's paper [<<jorgensen2001, Jørgensen, 2001>>], FreeBSD's official documents, discussions on FreeBSD mailing lists and interviews with developers. 
116
It is based on the Niels Jørgensen's paper [<<jorgensen2001, Jørgensen, 2001>>], FreeBSD's official documents, discussions on FreeBSD mailing lists and interviews with developers.
117
117
118
After providing definitions of terms used, this document will outline the organisational structure (including role descriptions and communication lines), discuss the methodology model and after presenting the tools used for process control, it will present the defined processes.
118
After providing definitions of terms used, this document will outline the organisational structure (including role descriptions and communication lines), discuss the methodology model and after presenting the tools used for process control, it will present the defined processes.
119
Finally it will outline major sub-projects of the FreeBSD project. 
119
Finally it will outline major sub-projects of the FreeBSD project.
120
120
121
[<<freebsd-developer-handbook, FreeBSD, 2002A>>] Section 1.2 and 1.3 give the vision and the architectural guidelines for the project.
121
[<<freebsd-developer-handbook, FreeBSD, 2002A>>] Section 1.2 and 1.3 give the vision and the architectural guidelines for the project.
122
The vision is "To produce the best UNIX-like operating system package possible, with due respect to the original software tools ideology as well as usability, performance and stability."
122
The vision is "To produce the best UNIX-like operating system package possible, with due respect to the original software tools ideology as well as usability, performance and stability."
123
The architectural guidelines help determine whether a problem that someone wants to be solved is within the scope of the project 
123
The architectural guidelines help determine whether a problem that someone wants to be solved is within the scope of the project
124
124
125
[[definitions]]
125
[[definitions]]
126
== Definitions
126
== Definitions
Lines 130-143 The architectural guidelines help determine whether a problem that someone wants Link Here
130
130
131
An "activity" is an element of work performed during the course of a project [<<ref-pmbok, PMI, 2000>>].
131
An "activity" is an element of work performed during the course of a project [<<ref-pmbok, PMI, 2000>>].
132
It has an output and leads towards an outcome.
132
It has an output and leads towards an outcome.
133
Such an output can either be an input to another activity or a part of the process' delivery. 
133
Such an output can either be an input to another activity or a part of the process' delivery.
134
134
135
[[def-process]]
135
[[def-process]]
136
=== Process
136
=== Process
137
137
138
A "process" is a series of activities that lead towards a particular outcome.
138
A "process" is a series of activities that lead towards a particular outcome.
139
A process can consist of one or more sub-processes.
139
A process can consist of one or more sub-processes.
140
An example of a process is software design. 
140
An example of a process is software design.
141
141
142
[[ref-hat]]
142
[[ref-hat]]
143
=== Hat
143
=== Hat
Lines 145-151 An example of a process is software design. Link Here
145
A "hat" is synonymous with role.
145
A "hat" is synonymous with role.
146
A hat has certain responsibilities in a process and for the process outcome.
146
A hat has certain responsibilities in a process and for the process outcome.
147
The hat executes activities.
147
The hat executes activities.
148
It is well defined what issues the hat should be contacted about by the project members and people outside the project. 
148
It is well defined what issues the hat should be contacted about by the project members and people outside the project.
149
149
150
[[ref-outcome]]
150
[[ref-outcome]]
151
=== Outcome
151
=== Outcome
Lines 153-159 It is well defined what issues the hat should be contacted about by the project Link Here
153
An "outcome" is the final output of the process.
153
An "outcome" is the final output of the process.
154
This is synonymous with deliverable, that is defined as "any measurable, tangible, verifiable outcome, result or item that must be produced to complete a project or part of a project.
154
This is synonymous with deliverable, that is defined as "any measurable, tangible, verifiable outcome, result or item that must be produced to complete a project or part of a project.
155
Often used more narrowly in reference to an external deliverable, which is a deliverable that is subject to approval by the project sponsor or customer" by [<<ref-pmbok, PMI, 2000>>].
155
Often used more narrowly in reference to an external deliverable, which is a deliverable that is subject to approval by the project sponsor or customer" by [<<ref-pmbok, PMI, 2000>>].
156
Examples of outcomes are a piece of software, a decision made or a report written. 
156
Examples of outcomes are a piece of software, a decision made or a report written.
157
157
158
[[ref-freebsd]]
158
[[ref-freebsd]]
159
=== FreeBSD
159
=== FreeBSD
Lines 163-171 When saying "FreeBSD" we will mean the BSD derivative UNIX-like operating system Link Here
163
[[model-orgstruct]]
163
[[model-orgstruct]]
164
== Organisational structure
164
== Organisational structure
165
165
166
While no-one takes ownership of FreeBSD, the FreeBSD organisation is divided into core, committers and contributors and is part of the FreeBSD community that lives around it. 
166
While no-one takes ownership of FreeBSD, the FreeBSD organisation is divided into core, committers and contributors and is part of the FreeBSD community that lives around it.
167
167
168
The FreeBSD Project's structure (in order of descending authority) 
168
The FreeBSD Project's structure (in order of descending authority)
169
169
170
[.informaltable]
170
[.informaltable]
171
[cols="1,1", options="header"]
171
[cols="1,1", options="header"]
Lines 177-206 The FreeBSD Project's structure (in order of descending authority) Link Here
177
|9
177
|9
178
178
179
|Committers
179
|Committers
180
|269
180
|317
181
181
182
|Contributors
182
|Contributors
183
|~3000
183
|~3000
184
|===
184
|===
185
185
186
Number of committers has been determined by going through CVS logs from January 1st, 2004 to December 31st, 2004 and contributors by going through the list of contributions and problem reports. 
186
Number of committers has been determined by going through CVS logs from January 1st, 2004 to December 31st, 2004 and contributors by going through the list of contributions and problem reports.
187
187
188
The main resource in the FreeBSD community is its developers: the committers and contributors.
188
The main resource in the FreeBSD community is its developers: the committers and contributors.
189
It is with their contributions that the project can move forward.
189
It is with their contributions that the project can move forward.
190
Regular developers are referred to as contributors.
190
Regular developers are referred to as contributors.
191
As of January 1st, 2003, there are an estimated 5500 contributors on the project. 
191
As of January 1st, 2003, there are an estimated 5500 contributors on the project.
192
192
193
Committers are developers with the privilege of being able to commit changes.
193
Committers are developers with the privilege of being able to commit changes.
194
These are usually the most active developers who are willing to spend their time not only integrating their own code but integrating code submitted by the developers who do not have this privilege.
194
These are usually the most active developers who are willing to spend their time not only integrating their own code but integrating code submitted by the developers who do not have this privilege.
195
They are also the developers who elect the core team, and they have access to closed discussions. 
195
They are also the developers who elect the core team, and they have access to closed discussions.
196
196
197
The project can be grouped into four distinct separate parts, and most developers will focus their involvement in one part of FreeBSD.
197
The project can be grouped into four distinct separate parts, and most developers will focus their involvement in one part of FreeBSD.
198
The four parts are kernel development, userland development, ports and documentation.
198
The four parts are kernel development, userland development, ports and documentation.
199
When referring to the base system, both kernel and userland is meant. 
199
When referring to the base system, both kernel and userland is meant.
200
200
201
This split changes our table to look like this: 
201
This split changes our table to look like this:
202
202
203
The FreeBSD Project's structure with committers in categories 
203
The FreeBSD Project's structure with active committers in categories
204
204
205
[.informaltable]
205
[.informaltable]
206
[cols="1,1,1", options="header"]
206
[cols="1,1,1", options="header"]
Lines 214-269 The FreeBSD Project's structure with committers in categories Link Here
214
|9
214
|9
215
215
216
|Committers
216
|Committers
217
|Kernel
217
|Base
218
|56
218
|164
219
220
|
221
|Userland
222
|50
223
219
224
|
220
|
225
|Docs
221
|Docs
226
|9
222
|44
227
223
228
|
224
|
229
|Ports
225
|Ports
230
|120
226
|164
231
227
232
|
228
|
233
|Total
229
|Total
234
|269
230
|372
235
231
236
|Contributors
232
|Contributors
237
|
233
|
238
|~3000
234
|~3000
239
|===
235
|===
240
236
241
Number of committers per area has been determined by going through CVS logs from January 1st, 2004 to December 31st, 2004.
237
Number of committers per area has been determined by going through access file of git repos.
242
Note that many committers work in multiple areas, making the total number higher than the real number of committers.
238
Note that many committers work in multiple areas, making the total number lower than numerical total.
243
The total number of committers at that time was 269. 
239
The total number of active unique committers on June 2022 was 317.
244
240
245
Committers fall into three groups: committers who are only concerned with one area of the project (for instance file systems), committers who are involved only with one sub-project, and committers who commit to different parts of the code, including sub-projects.
241
Committers fall into three groups: committers who are only concerned with one area of the project (for instance file systems), committers who are involved only with one sub-project, and committers who commit to different parts of the code, including sub-projects.
246
Because some committers work on different parts, the total number in the committers section of the table is higher than in the above table. 
242
Because some committers work on different parts, the total number in the committers section of the table is higher than in the above table.
247
243
248
The kernel is the main building block of FreeBSD.
244
The kernel is the main building block of FreeBSD.
249
While the userland applications are protected against faults in other userland applications, the entire system is vulnerable to errors in the kernel.
245
While the userland applications are protected against faults in other userland applications, the entire system is vulnerable to errors in the kernel.
250
This, combined with the vast amount of dependencies in the kernel and that it is not easy to see all the consequences of a kernel change, demands developers with a relative full understanding of the kernel.
246
This, combined with the vast amount of dependencies in the kernel and that it is not easy to see all the consequences of a kernel change, demands developers with a relative full understanding of the kernel.
251
Multiple development efforts in the kernel also require a closer coordination than userland applications do. 
247
Multiple development efforts in the kernel also require a closer coordination than userland applications do.
252
248
253
The core utilities, known as userland, provide the interface that identifies FreeBSD, both user interface, shared libraries and external interfaces to connecting clients.
249
The core utilities, known as userland, provide the interface that identifies FreeBSD, both user interface, shared libraries and external interfaces to connecting clients.
254
Currently, 162 people are involved in userland development and maintenance, many being maintainers for their own part of the code.
250
Currently, 162 people are involved in userland development and maintenance, many being maintainers for their own part of the code.
255
Maintainership will be discussed in the <<role-maintainer>> section. 
251
Maintainership will be discussed in the <<role-maintainer>> section.
256
252
257
Documentation is handled by <<sub-project-documentation>> and includes all documents surrounding the FreeBSD project, including the web pages. 
253
Documentation is handled by <<sub-project-documentation>> and includes all documents surrounding the FreeBSD project, including the web pages.
258
There were during 2004 101 people making commits to the FreeBSD Documentation Project. 
254
There were during 2004 101 people making commits to the FreeBSD Documentation Project.
259
255
260
Ports is the collection of meta-data that is needed to make software packages build correctly on FreeBSD.
256
Ports is the collection of meta-data that is needed to make software packages build correctly on FreeBSD.
261
An example of a port is the port for the web-browser Mozilla.
257
An example of a port is the port for the web-browser Mozilla.
262
It contains information about where to fetch the source, what patches to apply and how, and how the package should be installed on the system.
258
It contains information about where to fetch the source, what patches to apply and how, and how the package should be installed on the system.
263
This allows automated tools to fetch, build and install the package.
259
This allows automated tools to fetch, build and install the package.
264
As of this writing, there are more than 12600 ports available.
260
As of this writing, there are more than 12600 ports available.
265
footnote:[Statistics are generated by counting the number of entries in the file fetched by portsdb by April 1st, 2005. portsdb is a part of the port sysutils/portupgrade.] , ranging from web servers to games, programming languages and most of the application types that are in use on modern computers. 
261
footnote:[Statistics are generated by counting the number of entries in the file fetched by portsdb by April 1st, 2005. portsdb is a part of the port sysutils/portupgrade.] , ranging from web servers to games, programming languages and most of the application types that are in use on modern computers.
266
Ports will be discussed further in the section <<sub-project-ports>>. 
262
Ports will be discussed further in the section <<sub-project-ports>>.
267
263
268
[[methodology-model]]
264
[[methodology-model]]
269
== Methodology model
265
== Methodology model
Lines 272-280 Ports will be discussed further in the section <<sub-project-ports>>. Link Here
272
=== Development model
268
=== Development model
273
269
274
There is no defined model for how people write code in FreeBSD.
270
There is no defined model for how people write code in FreeBSD.
275
However, Niels Jørgenssen has suggested a model of how written code is integrated into the project. 
271
However, Niels Jørgenssen has suggested a model of how written code is integrated into the project.
276
272
277
Jørgenssen's model for change integration 
273
Jørgenssen's model for change integration
278
274
279
[.informaltable]
275
[.informaltable]
280
[cols="1,1,1", options="header"]
276
[cols="1,1,1", options="header"]
Lines 308-367 Jørgenssen's model for change integration Link Here
308
|code
304
|code
309
|===
305
|===
310
306
311
The "development release" is the FreeBSD-CURRENT ("-CURRENT") branch and the "production release" is the FreeBSD-STABLE branch ("-STABLE") [<<jorgensen2001, Jørgensen, 2001>>]. 
307
The "development release" is the FreeBSD-CURRENT ("-CURRENT") branch and the "production release" is the FreeBSD-STABLE branch ("-STABLE") [<<jorgensen2001, Jørgensen, 2001>>].
312
308
313
This is a model for one change, and shows that after coding, developers seek community review and try integrating it with their own systems.
309
This is a model for one change, and shows that after coding, developers seek community review and try integrating it with their own systems.
314
After integrating the change into the development release, called FreeBSD-CURRENT, it is tested by many users and developers in the FreeBSD community.
310
After integrating the change into the development release, called FreeBSD-CURRENT, it is tested by many users and developers in the FreeBSD community.
315
After it has gone through enough testing, it is merged into the production release, called FreeBSD-STABLE.
311
After it has gone through enough testing, it is merged into the production release, called FreeBSD-STABLE.
316
Unless each stage is finished successfully, the developer needs to go back and make modifications in the code and restart the process.
312
Unless each stage is finished successfully, the developer needs to go back and make modifications in the code and restart the process.
317
To integrate a change with either -CURRENT or -STABLE is called making a commit. 
313
To integrate a change with either -CURRENT or -STABLE is called making a commit.
318
314
319
Jørgensen found that most FreeBSD developers work individually, meaning that this model is used in parallel by many developers on the different ongoing development efforts.
315
Jørgensen found that most FreeBSD developers work individually, meaning that this model is used in parallel by many developers on the different ongoing development efforts.
320
A developer can also be working on multiple changes, so that while they are waiting for review or people to test one or more of their changes, they may be writing another change. 
316
A developer can also be working on multiple changes, so that while they are waiting for review or people to test one or more of their changes, they may be writing another change.
321
317
322
As each commit represents an increment, this is a massively incremental model.
318
As each commit represents an increment, this is a massively incremental model.
323
The commits are in fact so frequent that during one year footnote:[The period from January 1st, 2004 to December 31st, 2004 was examined to find this number.] , 85427 commits were made, making a daily average of 233 commits. 
319
The commits are in fact so frequent that during one year footnote:[The period from January 1st, 2004 to December 31st, 2004 was examined to find this number.] , 85427 commits were made, making a daily average of 233 commits.
324
320
325
Within the "code" bracket in Jørgensen's model, each programmer has their own working style and follows their own development models.
321
Within the "code" bracket in Jørgensen's model, each programmer has their own working style and follows their own development models.
326
The bracket could very well have been called "development" as it includes requirements gathering and analysis, system and detailed design, implementation and verification.
322
The bracket could very well have been called "development" as it includes requirements gathering and analysis, system and detailed design, implementation and verification.
327
However, the only output from these stages is the source code or system documentation. 
323
However, the only output from these stages is the source code or system documentation.
328
324
329
From a stepwise model's perspective (such as the waterfall model), the other brackets can be seen as further verification and system integration.
325
From a stepwise model's perspective (such as the waterfall model), the other brackets can be seen as further verification and system integration.
330
This system integration is also important to see if a change is accepted by the community.
326
This system integration is also important to see if a change is accepted by the community.
331
Up until the code is committed, the developer is free to choose how much to communicate about it to the rest of the project.
327
Up until the code is committed, the developer is free to choose how much to communicate about it to the rest of the project.
332
In order for -CURRENT to work as a buffer (so that bright ideas that had some undiscovered drawbacks can be backed out) the minimum time a commit should be in -CURRENT before merging it to -STABLE is 3 days.
328
In order for -CURRENT to work as a buffer (so that bright ideas that had some undiscovered drawbacks can be backed out) the minimum time a commit should be in -CURRENT before merging it to -STABLE is 3 days.
333
Such a merge is referred to as an MFC (Merge From Current). 
329
Such a merge is referred to as an MFC (Merge From Current).
334
330
335
It is important to notice the word "change".
331
It is important to notice the word "change".
336
Most commits do not contain radical new features, but are maintenance updates. 
332
Most commits do not contain radical new features, but are maintenance updates.
337
333
338
The only exceptions from this model are security fixes and changes to features that are deprecated in the -CURRENT branch.
334
The only exceptions from this model are security fixes and changes to features that are deprecated in the -CURRENT branch.
339
In these cases, changes can be committed directly to the -STABLE branch. 
335
In these cases, changes can be committed directly to the -STABLE branch.
340
336
341
In addition to many people working on the project, there are many related projects to the FreeBSD Project.
337
In addition to many people working on the project, there are many related projects to the FreeBSD Project.
342
These are either projects developing brand new features, sub-projects or projects whose outcome is incorporated into FreeBSD footnote:[For instance, the development of the Bluetooth stack started as a sub-project until it was deemed stable enough to be merged into the -CURRENT branch. Now it is a part of the core FreeBSD system.].
338
These are either projects developing brand new features, sub-projects or projects whose outcome is incorporated into FreeBSD footnote:[For instance, the development of the Bluetooth stack started as a sub-project until it was deemed stable enough to be merged into the -CURRENT branch. Now it is a part of the core FreeBSD system.].
343
These projects fit into the FreeBSD Project just like regular development efforts: they produce code that is integrated with the FreeBSD Project.
339
These projects fit into the FreeBSD Project just like regular development efforts: they produce code that is integrated with the FreeBSD Project.
344
However, some of them (like Ports and Documentation) have the privilege of being applicable to both branches or commit directly to both -CURRENT and -STABLE. 
340
However, some of them (like Ports and Documentation) have the privilege of being applicable to both branches or commit directly to both -CURRENT and -STABLE.
345
341
346
There is no standards to how design should be done, nor is design collected in a centralised repository.
342
There is no standards to how design should be done, nor is design collected in a centralised repository.
347
The main design is that of 4.4BSD.
343
The main design is that of 4.4BSD.
348
footnote:[According to Kirk McKusick, after 20 years of developing UNIX operating systems, the interfaces are for the most part figured out. There is therefore no need for much design. However, new applications of the system and new hardware leads to some implementations being more beneficial than those that used to be preferred. One example is the introduction of web browsing that made the normal TCP/IP connection a short burst of data rather than a steady stream over a longer period of time.]
344
footnote:[According to Kirk McKusick, after 20 years of developing UNIX operating systems, the interfaces are for the most part figured out. There is therefore no need for much design. However, new applications of the system and new hardware leads to some implementations being more beneficial than those that used to be preferred. One example is the introduction of web browsing that made the normal TCP/IP connection a short burst of data rather than a steady stream over a longer period of time.]
349
As design is a part of the "Code" bracket in Jørgenssen's model, it is up to every developer or sub-project how this should be done.
345
As design is a part of the "Code" bracket in Jørgenssen's model, it is up to every developer or sub-project how this should be done.
350
Even if the design should be stored in a central repository, the output from the design stages would be of limited use as the differences of methodologies would make them poorly if at all interoperable.
346
Even if the design should be stored in a central repository, the output from the design stages would be of limited use as the differences of methodologies would make them poorly if at all interoperable.
351
For the overall design of the project, the project relies on the sub-projects to negotiate fit interfaces between each other rather than to dictate interfacing. 
347
For the overall design of the project, the project relies on the sub-projects to negotiate fit interfaces between each other rather than to dictate interfacing.
352
348
353
[[release-branches]]
349
[[release-branches]]
354
=== Release branches
350
=== Release branches
355
351
356
The releases of FreeBSD are best illustrated by a tree with many branches where each major branch represents a major version.
352
The releases of FreeBSD are best illustrated by a tree with many branches where each major branch represents a major version.
357
Minor versions are represented by branches of the major branches. 
353
Minor versions are represented by branches of the major branches.
358
354
359
In the following release tree, arrows that follow one-another in a particular direction represent a branch.
355
In the following release tree, arrows that follow one-another in a particular direction represent a branch.
360
Boxes with full lines and diamonds represent official releases.
356
Boxes with full lines and diamonds represent official releases.
361
Boxes with dotted lines represent the development branch at that time.
357
Boxes with dotted lines represent the development branch at that time.
362
Security branches are represented by ovals.
358
Security branches are represented by ovals.
363
Diamonds differ from boxes in that they represent a fork, meaning a place where a branch splits into two branches where one of the branches becomes a sub-branch.
359
Diamonds differ from boxes in that they represent a fork, meaning a place where a branch splits into two branches where one of the branches becomes a sub-branch.
364
For example, at 4.0-RELEASE the 4.0-CURRENT branch split into 4-STABLE and 5.0-CURRENT. At 4.5-RELEASE, the branch forked off a security branch called RELENG_4_5. 
360
For example, at 4.0-RELEASE the 4.0-CURRENT branch split into 4-STABLE and 5.0-CURRENT. At 4.5-RELEASE, the branch forked off a security branch called RELENG_4_5.
365
361
366
.The FreeBSD release tree
362
.The FreeBSD release tree
367
image::branches.png[Refer to table below for a screen-reader friendly version.]
363
image::branches.png[Refer to table below for a screen-reader friendly version.]
Lines 379-393 image::branches.png[Refer to table below for a screen-reader friendly version.] Link Here
379
375
380
|3.0 Current (development branch)
376
|3.0 Current (development branch)
381
|
377
|
382
|Releng 3 branches: 3.0 Release to 3.5 Release, leading to 3.5.1 Release and the subsequent 3 Stable branch 
378
|Releng 3 branches: 3.0 Release to 3.5 Release, leading to 3.5.1 Release and the subsequent 3 Stable branch
383
379
384
|4.0 Current (development branch)
380
|4.0 Current (development branch)
385
|3.1 Release
381
|3.1 Release
386
|Releng 4 branches: 4.1 Release to 4.6 Release (and 4.6.2 Release), then 4.7 Release to 4.11 Release (all starting at 4.3 Release also leading to a Releng_4_n branch), and the subsequent 4 Release branch 
382
|Releng 4 branches: 4.1 Release to 4.6 Release (and 4.6.2 Release), then 4.7 Release to 4.11 Release (all starting at 4.3 Release also leading to a Releng_4_n branch), and the subsequent 4 Release branch
387
383
388
|5.0 Current (development branch)
384
|5.0 Current (development branch)
389
|4.0 Release
385
|4.0 Release
390
|Releng 5 branches: 5.0 Release to 5.4 Release (all except 5.0 and 5.3 also leading to a Releng_5_n branch), and the subsequent 5 Release branch 
386
|Releng 5 branches: 5.0 Release to 5.4 Release (all except 5.0 and 5.3 also leading to a Releng_5_n branch), and the subsequent 5 Release branch
391
387
392
|6.0 Current (development branch)
388
|6.0 Current (development branch)
393
|5.3 Release
389
|5.3 Release
Lines 407-415 However, the -CURRENT branch does not need to fork at that point in time, but ca Link Here
407
An example of this is that following 3.0-RELEASE, 3.1-RELEASE was also a continuation of the -CURRENT-branch, and -CURRENT did not become a true development branch until this version was released and the 3-STABLE branch was forked.
403
An example of this is that following 3.0-RELEASE, 3.1-RELEASE was also a continuation of the -CURRENT-branch, and -CURRENT did not become a true development branch until this version was released and the 3-STABLE branch was forked.
408
When -CURRENT returns to becoming a development branch, it can only be followed by a major release.
404
When -CURRENT returns to becoming a development branch, it can only be followed by a major release.
409
5-STABLE is predicted to be forked off 5.0-CURRENT at around 5.3-RELEASE.
405
5-STABLE is predicted to be forked off 5.0-CURRENT at around 5.3-RELEASE.
410
It is not until 5-STABLE is forked that the development branch will be branded 6.0-CURRENT. 
406
It is not until 5-STABLE is forked that the development branch will be branded 6.0-CURRENT.
411
407
412
A "minor release" is made from the -CURRENT branch following a major release, or from the -STABLE branch. 
408
A "minor release" is made from the -CURRENT branch following a major release, or from the -STABLE branch.
413
409
414
Following and including, 4.3-RELEASEfootnote:[The first release this actually happened for was 4.5-RELEASE, but security branches were at the same time created for 4.3-RELEASE and 4.4-RELEASE.], when a minor release has been made, it becomes a "security branch".
410
Following and including, 4.3-RELEASEfootnote:[The first release this actually happened for was 4.5-RELEASE, but security branches were at the same time created for 4.3-RELEASE and 4.4-RELEASE.], when a minor release has been made, it becomes a "security branch".
415
This is meant for organisations that do not want to follow the -STABLE branch and the potential new/changed features it offers, but instead require an absolutely stable environment, only updating to implement security updates. footnote:[There is a terminology overlap with respect to the word "stable", which leads to some confusion. The -STABLE branch is still a development branch, whose goal is to be useful for most people. If it is never acceptable for a system to get changes that are not announced at the time it is deployed, that system should run a security branch.]
411
This is meant for organisations that do not want to follow the -STABLE branch and the potential new/changed features it offers, but instead require an absolutely stable environment, only updating to implement security updates. footnote:[There is a terminology overlap with respect to the word "stable", which leads to some confusion. The -STABLE branch is still a development branch, whose goal is to be useful for most people. If it is never acceptable for a system to get changes that are not announced at the time it is deployed, that system should run a security branch.]
Lines 417-441 This is meant for organisations that do not want to follow the -STABLE branch an Link Here
417
Each update to a security branch is called a "patchlevel".
413
Each update to a security branch is called a "patchlevel".
418
For every security enhancement that is done, the patchlevel number is increased, making it easy for people tracking the branch to see what security enhancements they have implemented.
414
For every security enhancement that is done, the patchlevel number is increased, making it easy for people tracking the branch to see what security enhancements they have implemented.
419
In cases where there have been especially serious security flaws, an entire new release can be made from a security branch.
415
In cases where there have been especially serious security flaws, an entire new release can be made from a security branch.
420
An example of this is 4.6.2-RELEASE. 
416
An example of this is 4.6.2-RELEASE.
421
417
422
[[model-summary]]
418
[[model-summary]]
423
=== Model summary
419
=== Model summary
424
420
425
To summarise, the development model of FreeBSD can be seen as the following tree: 
421
To summarise, the development model of FreeBSD can be seen as the following tree:
426
422
427
.The overall development model
423
.The overall development model
428
image::freebsd-code-model.png[Refer to paragraphs below for a screen-reader friendly version.]
424
image::freebsd-code-model.png[Refer to paragraphs below for a screen-reader friendly version.]
429
425
430
The tree of the FreeBSD development with ongoing development efforts and continuous integration. 
426
The tree of the FreeBSD development with ongoing development efforts and continuous integration.
431
427
432
The tree symbolises the release versions with major versions spawning new main branches and minor versions being versions of the main branch.
428
The tree symbolises the release versions with major versions spawning new main branches and minor versions being versions of the main branch.
433
The top branch is the -CURRENT branch where all new development is integrated, and the -STABLE branch is the branch directly below it.
429
The top branch is the -CURRENT branch where all new development is integrated, and the -STABLE branch is the branch directly below it.
434
Below the -STABLE branch are old, unsupported versions. 
430
Below the -STABLE branch are old, unsupported versions.
435
431
436
Clouds of development efforts hang over the project where developers use the development models they see fit.
432
Clouds of development efforts hang over the project where developers use the development models they see fit.
437
The product of their work is then integrated into -CURRENT where it undergoes parallel debugging and is finally merged from -CURRENT into -STABLE. 
433
The product of their work is then integrated into -CURRENT where it undergoes parallel debugging and is finally merged from -CURRENT into -STABLE.
438
Security fixes are merged from -STABLE to the security branches. 
434
Security fixes are merged from -STABLE to the security branches.
439
435
440
Many committers have a special area of responsibility.
436
Many committers have a special area of responsibility.
441
These roles are called hats.
437
These roles are called hats.
Lines 447-453 The other option is to have the role held by a group. Link Here
447
Many of these hats are not formalised.
443
Many of these hats are not formalised.
448
Formalised hats have a charter stating the exact purpose of the hat along with its privileges and responsibilities.
444
Formalised hats have a charter stating the exact purpose of the hat along with its privileges and responsibilities.
449
The writing of such charters is a new part of the project, and has thus yet to be completed for all hats.
445
The writing of such charters is a new part of the project, and has thus yet to be completed for all hats.
450
These hat descriptions are not such a formalisation, rather a summary of the role with links to the charter where available and contact addresses. 
446
These hat descriptions are not such a formalisation, rather a summary of the role with links to the charter where available and contact addresses.
451
447
452
[[sect-hats]]
448
[[sect-hats]]
453
== Hats
449
== Hats
Lines 463-474 A Contributor contributes to the FreeBSD project either as a developer, as an au Link Here
463
[[role-committer]]
459
[[role-committer]]
464
==== Committer
460
==== Committer
465
461
466
A person who has the required privileges to add their code or documentation to the repository. 
462
A person who has the required privileges to add their code or documentation to the repository.
467
A committer has made a commit within the past 12 months.
463
A committer has made a commit within the past 12 months.
468
[<<freebsd-developer-handbook, FreeBSD, 2000A>>] An active committer is a committer who has made an average of one commit per month during that time. 
464
[<<freebsd-developer-handbook, FreeBSD, 2000A>>] An active committer is a committer who has made an average of one commit per month during that time.
469
465
470
It is worth noting that there are no technical barriers to prevent someone, once having gained commit privileges to the main- or a sub-project, to make commits in parts of that project's source the committer did not specifically get permission to modify.
466
It is worth noting that there are no technical barriers to prevent someone, once having gained commit privileges to the main- or a sub-project, to make commits in parts of that project's source the committer did not specifically get permission to modify.
471
However, when wanting to make modifications to parts a committer has not been involved in before, they should read the logs to see what has happened in this area before, and also read the MAINTAINERS file to see if the maintainer of this part has any special requests on how changes in the code should be made. 
467
However, when wanting to make modifications to parts a committer has not been involved in before, they should read the logs to see what has happened in this area before, and also read the MAINTAINERS file to see if the maintainer of this part has any special requests on how changes in the code should be made.
472
468
473
[[role-core]]
469
[[role-core]]
474
==== Core Team
470
==== Core Team
Lines 476-566 However, when wanting to make modifications to parts a committer has not been in Link Here
476
The core team is elected by the committers from the pool of committers and serves as the board of directors of the FreeBSD project.
472
The core team is elected by the committers from the pool of committers and serves as the board of directors of the FreeBSD project.
477
It promotes active contributors to committers, assigns people to well-defined hats, and is the final arbiter of decisions involving which way the project should be heading.
473
It promotes active contributors to committers, assigns people to well-defined hats, and is the final arbiter of decisions involving which way the project should be heading.
478
As of July 1st, 2004, core consisted of 9 members.
474
As of July 1st, 2004, core consisted of 9 members.
479
Elections are held every two years. 
475
Elections are held every two years.
480
476
481
[[role-maintainer]]
477
[[role-maintainer]]
482
==== Maintainership
478
==== Maintainership
483
479
484
Maintainership means that that person is responsible for what is allowed to go into that area of the code and has the final say should disagreements over the code occur.
480
Maintainership means that that person is responsible for what is allowed to go into that area of the code and has the final say should disagreements over the code occur.
485
This involves proactive work aimed at stimulating contributions and reactive work in reviewing commits. 
481
This involves proactive work aimed at stimulating contributions and reactive work in reviewing commits.
486
482
487
With the FreeBSD source comes the MAINTAINERS file that contains a one-line summary of how each maintainer would like contributions to be made. 
483
With the FreeBSD source comes the MAINTAINERS file that contains a one-line summary of how each maintainer would like contributions to be made.
488
Having this notice and contact information enables developers to focus on the development effort rather than being stuck in a slow correspondence should the maintainer be unavailable for some time. 
484
Having this notice and contact information enables developers to focus on the development effort rather than being stuck in a slow correspondence should the maintainer be unavailable for some time.
489
485
490
If the maintainer is unavailable for an unreasonably long period of time, and other people do a significant amount of work, maintainership may be switched without the maintainer's approval.
486
If the maintainer is unavailable for an unreasonably long period of time, and other people do a significant amount of work, maintainership may be switched without the maintainer's approval.
491
This is based on the stance that maintainership should be demonstrated, not declared. 
487
This is based on the stance that maintainership should be demonstrated, not declared.
492
488
493
Maintainership of a particular piece of code is a hat that is not held as a group. 
489
Maintainership of a particular piece of code is a hat that is not held as a group.
494
490
495
[[official-hats]]
491
[[official-hats]]
496
=== Official Hats
492
=== Official Hats
497
493
498
The official hats in the FreeBSD Project are hats that are more or less formalised and mainly administrative roles.
494
The official hats in the FreeBSD Project are hats that are more or less formalised and mainly administrative roles.
499
They have the authority and responsibility for their area.
495
They have the authority and responsibility for their area.
500
The following list shows the responsibility lines and gives a description of each hat, including who it is held by. 
496
The following list shows the responsibility lines and gives a description of each hat, including who it is held by.
501
497
502
[[role-doc-manager]]
498
[[role-doc-manager]]
503
==== Documentation project manager
499
==== Documentation project manager
504
500
505
<<sub-project-documentation>> architect is responsible for defining and following up documentation goals for the committers in the Documentation project, which they supervise. 
501
<<sub-project-documentation>> architect is responsible for defining and following up documentation goals for the committers in the Documentation project, which they supervise.
506
502
507
Hat held by: The DocEng team mailto:doceng@FreeBSD.org[doceng@FreeBSD.org].
503
Hat held by: The DocEng team mailto:doceng@FreeBSD.org[doceng@FreeBSD.org].
508
The https://www.freebsd.org/internal/doceng/[ DocEng Charter]. 
504
The https://www.freebsd.org/internal/doceng/[ DocEng Charter].
509
505
510
[[role-postmaster]]
506
[[role-postmaster]]
511
==== Postmaster
507
==== Postmaster
512
508
513
The Postmaster is responsible for mail being correctly delivered to the committers' email address.
509
The Postmaster is responsible for mail being correctly delivered to the committers' email address.
514
They are also responsible for ensuring that the mailing lists work and should take measures against possible disruptions of mail such as having troll-, spam- and virus-filters. 
510
They are also responsible for ensuring that the mailing lists work and should take measures against possible disruptions of mail such as having troll-, spam- and virus-filters.
515
511
516
Hat currently held by: the Postmaster Team mailto:postmaster@FreeBSD.org[postmaster@FreeBSD.org]. 
512
Hat currently held by: the Postmaster Team mailto:postmaster@FreeBSD.org[postmaster@FreeBSD.org].
517
513
518
[[role-release-coordination]]
514
[[role-release-coordination]]
519
==== Release Coordination
515
==== Release Coordination
520
516
521
The responsibilities of the Release Engineering Team are 
517
The responsibilities of the Release Engineering Team are
522
518
523
* Setting, publishing and following a release schedule for official releases 
519
* Setting, publishing and following a release schedule for official releases
524
* Documenting and formalising release engineering procedures 
520
* Documenting and formalising release engineering procedures
525
* Creation and maintenance of code branches 
521
* Creation and maintenance of code branches
526
* Coordinating with the Ports and Documentation teams to have an updated set of packages and documentation released with the new releases 
522
* Coordinating with the Ports and Documentation teams to have an updated set of packages and documentation released with the new releases
527
* Coordinating with the Security team so that pending releases are not affected by recently disclosed vulnerabilities. 
523
* Coordinating with the Security team so that pending releases are not affected by recently disclosed vulnerabilities.
528
524
529
Further information about the development process is available in the <<process-release-engineering>> section. 
525
Further information about the development process is available in the <<process-release-engineering>> section.
530
526
531
[[role-releng]]
527
[[role-releng]]
532
Hat held by: the Release Engineering team mailto:re@FreeBSD.org[re@FreeBSD.org].
528
Hat held by: the Release Engineering team mailto:re@FreeBSD.org[re@FreeBSD.org].
533
The https://www.freebsd.org/releng/charter/[ Release Engineering Charter]. 
529
The https://www.freebsd.org/releng/charter/[ Release Engineering Charter].
534
530
535
[[role-pr-cr]]
531
[[role-pr-cr]]
536
==== Public Relations & Corporate Liaison
532
==== Public Relations & Corporate Liaison
537
533
538
The Public Relations & Corporate Liaison's responsibilities are: 
534
The Public Relations & Corporate Liaison's responsibilities are:
539
535
540
* Making press statements when happenings that are important to the FreeBSD Project happen. 
536
* Making press statements when happenings that are important to the FreeBSD Project happen.
541
* Being the official contact person for corporations that are working close with the FreeBSD Project. 
537
* Being the official contact person for corporations that are working close with the FreeBSD Project.
542
* Take steps to promote FreeBSD within both the Open Source community and the corporate world. 
538
* Take steps to promote FreeBSD within both the Open Source community and the corporate world.
543
* Handle the "freebsd-advocacy" mailing list. 
539
* Handle the "freebsd-advocacy" mailing list.
544
540
545
This hat is currently not occupied. 
541
This hat is currently not occupied.
546
542
547
[[role-security-officer]]
543
[[role-security-officer]]
548
==== Security Officer
544
==== Security Officer
549
545
550
The Security Officer's main responsibility is to coordinate information exchange with others in the security community and in the FreeBSD project.
546
The Security Officer's main responsibility is to coordinate information exchange with others in the security community and in the FreeBSD project.
551
The Security Officer is also responsible for taking action when security problems are reported and promoting proactive development behavior when it comes to security. 
547
The Security Officer is also responsible for taking action when security problems are reported and promoting proactive development behavior when it comes to security.
552
548
553
Because of the fear that information about vulnerabilities may leak out to people with malicious intent before a patch is available, only the Security Officer, consisting of an officer, a deputy and two <<role-core>> members, receive sensitive information about security issues.
549
Because of the fear that information about vulnerabilities may leak out to people with malicious intent before a patch is available, only the Security Officer, consisting of an officer, a deputy and two <<role-core>> members, receive sensitive information about security issues.
554
However, to create or implement a patch, the Security Officer has the Security Officer Team mailto:security-team@FreeBSD.org[security-team@FreeBSD.org] to help do the work. 
550
However, to create or implement a patch, the Security Officer has the Security Officer Team mailto:security-team@FreeBSD.org[security-team@FreeBSD.org] to help do the work.
555
551
556
[[role-repo-manager]]
552
[[role-repo-manager]]
557
==== Source Repository Manager
553
==== Source Repository Manager
558
554
559
The Source Repository Manager is the only one who is allowed to directly modify the repository without using the <<tool-svn>> tool.
555
The Source Repository Manager is the only one who is allowed to directly modify the repository without using the <<tool-svn>> tool.
560
It is their responsibility to ensure that technical problems that arise in the repository are resolved quickly.
556
It is their responsibility to ensure that technical problems that arise in the repository are resolved quickly.
561
The source repository manager has the authority to back out commits if this is necessary to resolve a SVN technical problem. 
557
The source repository manager has the authority to back out commits if this is necessary to resolve a SVN technical problem.
562
558
563
Hat held by: the Source Repository Manager mailto:clusteradm@FreeBSD.org[clusteradm@FreeBSD.org]. 
559
Hat held by: the Source Repository Manager mailto:clusteradm@FreeBSD.org[clusteradm@FreeBSD.org].
564
560
565
[[role-election-manager]]
561
[[role-election-manager]]
566
==== Election Manager
562
==== Election Manager
Lines 569-632 The Election Manager is responsible for the <<process-core-election>> process. Link Here
569
The manager is responsible for running and maintaining the election system, and is the final authority should minor unforeseen events happen in the election process.
565
The manager is responsible for running and maintaining the election system, and is the final authority should minor unforeseen events happen in the election process.
570
Major unforeseen events have to be discussed with the <<role-core>>
566
Major unforeseen events have to be discussed with the <<role-core>>
571
567
572
Hat held only during elections. 
568
Hat held only during elections.
573
569
574
[[role-webmaster]]
570
[[role-webmaster]]
575
==== Web site Management
571
==== Web site Management
576
572
577
The Web site Management hat is responsible for coordinating the rollout of updated web pages on mirrors around the world, for the overall structure of the primary web site and the system it is running upon.
573
The Web site Management hat is responsible for coordinating the rollout of updated web pages on mirrors around the world, for the overall structure of the primary web site and the system it is running upon.
578
The management needs to coordinate the content with <<sub-project-documentation>> and acts as maintainer for the "www" tree. 
574
The management needs to coordinate the content with <<sub-project-documentation>> and acts as maintainer for the "www" tree.
579
575
580
Hat held by: the FreeBSD Webmasters mailto:www@FreeBSD.org[www@FreeBSD.org]. 
576
Hat held by: the FreeBSD Webmasters mailto:www@FreeBSD.org[www@FreeBSD.org].
581
577
582
[[role-ports-manager]]
578
[[role-ports-manager]]
583
==== Ports Manager
579
==== Ports Manager
584
580
585
The Ports Manager acts as a liaison between <<sub-project-ports>> and the core project, and all requests from the project should go to the ports manager. 
581
The Ports Manager acts as a liaison between <<sub-project-ports>> and the core project, and all requests from the project should go to the ports manager.
586
582
587
Hat held by: the Ports Management Team mailto:portmgr@FreeBSD.org[portmgr@FreeBSD.org].
583
Hat held by: the Ports Management Team mailto:portmgr@FreeBSD.org[portmgr@FreeBSD.org].
588
The https://www.freebsd.org/portmgr/charter/[Portmgr charter]. 
584
The https://www.freebsd.org/portmgr/charter/[Portmgr charter].
589
585
590
[[role-standards]]
586
[[role-standards]]
591
==== Standards
587
==== Standards
592
588
593
The Standards hat is responsible for ensuring that FreeBSD complies with the standards it is committed to , keeping up to date on the development of these standards and notifying FreeBSD developers of important changes that allows them to take a proactive role and decrease the time between a standards update and FreeBSD's compliancy. 
589
The Standards hat is responsible for ensuring that FreeBSD complies with the standards it is committed to , keeping up to date on the development of these standards and notifying FreeBSD developers of important changes that allows them to take a proactive role and decrease the time between a standards update and FreeBSD's compliancy.
594
590
595
Hat currently held by: Garrett Wollman mailto:wollman@FreeBSD.org[wollman@FreeBSD.org]. 
591
Hat currently held by: Garrett Wollman mailto:wollman@FreeBSD.org[wollman@FreeBSD.org].
596
592
597
[[role-core-secretary]]
593
[[role-core-secretary]]
598
==== Core Secretary
594
==== Core Secretary
599
595
600
The Core Secretary's main responsibility is to write drafts to and publish the final Core Reports.
596
The Core Secretary's main responsibility is to write drafts to and publish the final Core Reports.
601
The secretary also keeps the core agenda, thus ensuring that no balls are dropped unresolved. 
597
The secretary also keeps the core agenda, thus ensuring that no balls are dropped unresolved.
602
598
603
Hat currently held by: {bofh}. 
599
Hat currently held by: {bofh}.
604
600
605
[[role-bugmeister]]
601
[[role-bugmeister]]
606
==== Bugmeister
602
==== Bugmeister
607
603
608
The Bugmeister is responsible for ensuring that the maintenance database is in working order, that the entries are correctly categorised and that there are no invalid entries.
604
The Bugmeister is responsible for ensuring that the maintenance database is in working order, that the entries are correctly categorised and that there are no invalid entries.
609
They supervise bugbusters. 
605
They supervise bugbusters.
610
606
611
Hat currently held by: the Bugmeister Team mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org]. 
607
Hat currently held by: the Bugmeister Team mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org].
612
608
613
[[role-donations]]
609
[[role-donations]]
614
==== Donations Liaison Officer
610
==== Donations Liaison Officer
615
611
616
The task of the donations liaison officer is to match the developers with needs with people or organisations willing to make a donation. 
612
The task of the donations liaison officer is to match the developers with needs with people or organisations willing to make a donation.
617
613
618
Hat held by: the Donations Liaison Office mailto:donations@FreeBSD.org[donations@FreeBSD.org].
614
Hat held by: the Donations Liaison Office mailto:donations@FreeBSD.org[donations@FreeBSD.org].
619
The https://www.freebsd.org/donations/[ Donations Liaison Charter]. 
615
The https://www.freebsd.org/donations/[ Donations Liaison Charter].
620
616
621
[[role-admin]]
617
[[role-admin]]
622
==== Admin
618
==== Admin
623
619
624
(Also called "FreeBSD Cluster Admin") 
620
(Also called "FreeBSD Cluster Admin")
625
621
626
The admin team consists of the people responsible for administrating the computers that the project relies on for its distributed work and communication to be synchronised.
622
The admin team consists of the people responsible for administrating the computers that the project relies on for its distributed work and communication to be synchronised.
627
It consists mainly of those people who have physical access to the servers. 
623
It consists mainly of those people who have physical access to the servers.
628
624
629
Hat held by: the Admin team mailto:admin@FreeBSD.org[admin@FreeBSD.org]. 
625
Hat held by: the Admin team mailto:admin@FreeBSD.org[admin@FreeBSD.org].
630
626
631
[[proc-depend-hats]]
627
[[proc-depend-hats]]
632
=== Process dependent hats
628
=== Process dependent hats
Lines 634-660 Hat held by: the Admin team mailto:admin@FreeBSD.org[admin@FreeBSD.org]. Link Here
634
[[role-problem-originator]]
630
[[role-problem-originator]]
635
==== Report originator
631
==== Report originator
636
632
637
The person originally responsible for filing a Problem Report. 
633
The person originally responsible for filing a Problem Report.
638
634
639
[[role-bugbuster]]
635
[[role-bugbuster]]
640
==== Bugbuster
636
==== Bugbuster
641
637
642
A person who will either find the right person to solve the problem, or close the PR if it is a duplicate or otherwise not an interesting one. 
638
A person who will either find the right person to solve the problem, or close the PR if it is a duplicate or otherwise not an interesting one.
643
639
644
[[role-mentor]]
640
[[role-mentor]]
645
==== Mentor
641
==== Mentor
646
642
647
A mentor is a committer who takes it upon them to introduce a new committer to the project, both in terms of ensuring the new committer's setup is valid, that the new committer knows the available tools required in their work, and that the new committer knows what is expected of them in terms of behavior. 
643
A mentor is a committer who takes it upon them to introduce a new committer to the project, both in terms of ensuring the new committer's setup is valid, that the new committer knows the available tools required in their work, and that the new committer knows what is expected of them in terms of behavior.
648
644
649
[[role-vendor]]
645
[[role-vendor]]
650
==== Vendor
646
==== Vendor
651
647
652
The person(s) or organisation whom external code comes from and whom patches are sent to. 
648
The person(s) or organisation whom external code comes from and whom patches are sent to.
653
649
654
[[role-reviewer]]
650
[[role-reviewer]]
655
==== Reviewers
651
==== Reviewers
656
652
657
People on the mailing list where the request for review is posted. 
653
People on the mailing list where the request for review is posted.
658
654
659
The following section will describe the defined project processes.
655
The following section will describe the defined project processes.
660
Issues that are not handled by these processes happen on an ad-hoc basis based on what has been customary to do in similar cases.
656
Issues that are not handled by these processes happen on an ad-hoc basis based on what has been customary to do in similar cases.
Lines 667-686 Issues that are not handled by these processes happen on an ad-hoc basis based o Link Here
667
663
668
The Core team has the responsibility of giving and removing commit privileges to contributors.
664
The Core team has the responsibility of giving and removing commit privileges to contributors.
669
This can only be done through a vote on the core mailing list.
665
This can only be done through a vote on the core mailing list.
670
The ports and documentation sub-projects can give commit privileges to people working on these projects, but have to date not removed such privileges. 
666
The ports and documentation sub-projects can give commit privileges to people working on these projects, but have to date not removed such privileges.
671
667
672
Normally a contributor is recommended to core by a committer.
668
Normally a contributor is recommended to core by a committer.
673
For contributors or outsiders to contact core asking to be a committer is not well thought of and is usually rejected. 
669
For contributors or outsiders to contact core asking to be a committer is not well thought of and is usually rejected.
674
670
675
If the area of particular interest for the developer potentially overlaps with other committers' area of maintainership, the opinion of those maintainers is sought.
671
If the area of particular interest for the developer potentially overlaps with other committers' area of maintainership, the opinion of those maintainers is sought.
676
However, it is frequently this committer that recommends the developer. 
672
However, it is frequently this committer that recommends the developer.
677
673
678
When a contributor is given committer status, they are assigned a mentor.
674
When a contributor is given committer status, they are assigned a mentor.
679
The committer who recommended the new committer will, in the general case, take it upon themselves to be the new committers mentor. 
675
The committer who recommended the new committer will, in the general case, take it upon themselves to be the new committers mentor.
680
676
681
When a contributor is given their commit bit, a <<tool-pgp>>-signed email is sent from either <<role-core-secretary>>, <<role-ports-manager>>, or nik@freebsd.org to both admins@freebsd.org, the assigned mentor, the new committer, and core confirming the approval of a new account.
677
When a contributor is given their commit bit, a <<tool-pgp>>-signed email is sent from either <<role-core-secretary>>, <<role-ports-manager>>, or nik@freebsd.org to both admins@freebsd.org, the assigned mentor, the new committer, and core confirming the approval of a new account.
682
The mentor then gathers a password line, <<tool-ssh2>> public key, and PGP key from the new committer and sends them to <<role-admin>>.
678
The mentor then gathers a password line, <<tool-ssh2>> public key, and PGP key from the new committer and sends them to <<role-admin>>.
683
When the new account is created, the mentor activates the commit bit and guides the new committer through the rest of the initial process. 
679
When the new account is created, the mentor activates the commit bit and guides the new committer through the rest of the initial process.
684
680
685
.Process summary: adding a new committer
681
.Process summary: adding a new committer
686
image::proc-add-committer.png[Refer to paragraph below for a screen-reader friendly version.]
682
image::proc-add-committer.png[Refer to paragraph below for a screen-reader friendly version.]
Lines 689-712 When a contributor sends a piece of code, the receiving committer may choose to Link Here
689
If they recommend this to core, core will vote on this recommendation.
685
If they recommend this to core, core will vote on this recommendation.
690
If the vote is in favour, a mentor is assigned the new committer and the new committer has to email their details to the administrators for an account to be created.
686
If the vote is in favour, a mentor is assigned the new committer and the new committer has to email their details to the administrators for an account to be created.
691
After this, the new committer is all set to make their first commit.
687
After this, the new committer is all set to make their first commit.
692
By tradition, this is by adding their name to the committers list. 
688
By tradition, this is by adding their name to the committers list.
693
689
694
Recall that a committer is considered to be someone who has committed code during the past 12 months.
690
Recall that a committer is considered to be someone who has committed code during the past 12 months.
695
However, it is not until after 18 months of inactivity have passed that commit privileges are eligible to be revoked.
691
However, it is not until after 18 months of inactivity have passed that commit privileges are eligible to be revoked.
696
[<<freebsd-expiration-policy, FreeBSD, 2002H>>]
692
[<<freebsd-expiration-policy, FreeBSD, 2002H>>]
697
There are, however, no automatic procedures for doing this.
693
There are, however, no automatic procedures for doing this.
698
For reactions concerning commit privileges not triggered by time, see <<process-reactions,section 1.5.8>>. 
694
For reactions concerning commit privileges not triggered by time, see <<process-reactions,section 1.5.8>>.
699
695
700
.Process summary: removing a committer
696
.Process summary: removing a committer
701
image::proc-rm-committer.png[Refer to paragraph below for a screen-reader friendly version.]
697
image::proc-rm-committer.png[Refer to paragraph below for a screen-reader friendly version.]
702
698
703
When Core decides to clean up the committers list, they check who has not made a commit for the past 18 months.
699
When Core decides to clean up the committers list, they check who has not made a commit for the past 18 months.
704
Committers who have not done so have their commit bits revoked and their account removed by the administrators. 
700
Committers who have not done so have their commit bits revoked and their account removed by the administrators.
705
701
706
It is also possible for committers to request that their commit bit be retired if for some reason they are no longer going to be actively committing to the project.
702
It is also possible for committers to request that their commit bit be retired if for some reason they are no longer going to be actively committing to the project.
707
In this case, it can also be restored at a later time by core, should the committer ask. 
703
In this case, it can also be restored at a later time by core, should the committer ask.
708
704
709
Roles in this process: 
705
Roles in this process:
710
706
711
. <<role-core>>
707
. <<role-core>>
712
. <<role-contributor>>
708
. <<role-contributor>>
Lines 719-744 Roles in this process: Link Here
719
[[committing]]
715
[[committing]]
720
=== Committing code
716
=== Committing code
721
717
722
The committing of new or modified code is one of the most frequent processes in the FreeBSD project and will usually happen many times a day. 
718
The committing of new or modified code is one of the most frequent processes in the FreeBSD project and will usually happen many times a day.
723
Committing of code can only be done by a "committer".
719
Committing of code can only be done by a "committer".
724
Committers commit either code written by themselves, code submitted to them, or code submitted through a <<model-pr,problem report>>. 
720
Committers commit either code written by themselves, code submitted to them, or code submitted through a <<model-pr,problem report>>.
725
721
726
When code is written by the developer that is non-trivial, they should seek a code review from the community.
722
When code is written by the developer that is non-trivial, they should seek a code review from the community.
727
This is done by sending mail to the relevant list asking for review.
723
This is done by sending mail to the relevant list asking for review.
728
Before submitting the code for review, they should ensure it compiles correctly with the entire tree and that all relevant tests run.
724
Before submitting the code for review, they should ensure it compiles correctly with the entire tree and that all relevant tests run.
729
This is called "pre-commit test".
725
This is called "pre-commit test".
730
When contributed code is received, it should be reviewed by the committer and tested the same way. 
726
When contributed code is received, it should be reviewed by the committer and tested the same way.
731
727
732
When a change is committed to a part of the source that has been contributed from an outside <<role-vendor>>, the maintainer should ensure that the patch is contributed back to the vendor.
728
When a change is committed to a part of the source that has been contributed from an outside <<role-vendor>>, the maintainer should ensure that the patch is contributed back to the vendor.
733
This is in line with the open source philosophy and makes it easier to stay in sync with outside projects as the patches do not have to be reapplied every time a new release is made. 
729
This is in line with the open source philosophy and makes it easier to stay in sync with outside projects as the patches do not have to be reapplied every time a new release is made.
734
730
735
After the code has been available for review and no further changes are necessary, the code is committed into the development branch, -CURRENT.
731
After the code has been available for review and no further changes are necessary, the code is committed into the development branch, -CURRENT.
736
If the change applies for the -STABLE branch or the other branches as well, a "Merge From Current" ("MFC") countdown is set by the committer.
732
If the change applies for the -STABLE branch or the other branches as well, a "Merge From Current" ("MFC") countdown is set by the committer.
737
After the number of days the committer chose when setting the MFC have passed, an email will automatically be sent to the committer reminding them to commit it to the -STABLE branch (and possibly security branches as well).
733
After the number of days the committer chose when setting the MFC have passed, an email will automatically be sent to the committer reminding them to commit it to the -STABLE branch (and possibly security branches as well).
738
Only security critical changes should be merged to security branches. 
734
Only security critical changes should be merged to security branches.
739
735
740
Delaying the commit to -STABLE and other branches allows for "parallel debugging" where the committed code is tested on a wide range of configurations.
736
Delaying the commit to -STABLE and other branches allows for "parallel debugging" where the committed code is tested on a wide range of configurations.
741
This makes changes to -STABLE to contain fewer faults and thus giving the branch its name. 
737
This makes changes to -STABLE to contain fewer faults and thus giving the branch its name.
742
738
743
.Process summary: A committer commits code
739
.Process summary: A committer commits code
744
image::proc-commit.png[Refer to paragraph below for a screen-reader friendly version.]
740
image::proc-commit.png[Refer to paragraph below for a screen-reader friendly version.]
Lines 748-810 If the code is trivial or has been reviewed and the committer is not the maintai Link Here
748
If the code is contributed by an outside vendor, the maintainer should create a patch that is sent back to the vendor.
744
If the code is contributed by an outside vendor, the maintainer should create a patch that is sent back to the vendor.
749
The code is then committed and then deployed by the users.
745
The code is then committed and then deployed by the users.
750
Should they find problems with the code, this will be reported and the committer can go back to writing a patch.
746
Should they find problems with the code, this will be reported and the committer can go back to writing a patch.
751
If a vendor is affected, they can choose to implement or ignore the patch. 
747
If a vendor is affected, they can choose to implement or ignore the patch.
752
748
753
.Process summary: A contributor commits code
749
.Process summary: A contributor commits code
754
image::proc-contrib.png[Refer to paragraphs below and above for a screen-reader friendly version.]
750
image::proc-contrib.png[Refer to paragraphs below and above for a screen-reader friendly version.]
755
751
756
The difference when a contributor makes a code contribution is that they submit the code through the Bugzilla interface.
752
The difference when a contributor makes a code contribution is that they submit the code through the Bugzilla interface.
757
This report is picked up by the maintainer who reviews the code and commits it. 
753
This report is picked up by the maintainer who reviews the code and commits it.
758
754
759
Hats included in this process are: 
755
Hats included in this process are:
760
756
761
. <<role-committer>>
757
. <<role-committer>>
762
. <<role-contributor>>
758
. <<role-contributor>>
763
. <<role-vendor>>
759
. <<role-vendor>>
764
. <<role-reviewer>>
760
. <<role-reviewer>>
765
761
766
[<<freebsd-committer, FreeBSD, 2001>>] [<<jorgensen2001, Jørgensen, 2001>>] 
762
[<<freebsd-committer, FreeBSD, 2001>>] [<<jorgensen2001, Jørgensen, 2001>>]
767
763
768
[[process-core-election]]
764
[[process-core-election]]
769
=== Core election
765
=== Core election
770
766
771
Core elections are held at least every two years. footnote:[The first Core election was held September 2000] Nine core members are elected.
767
Core elections are held at least every two years. footnote:[The first Core election was held September 2000] Nine core members are elected.
772
New elections are held if the number of core members drops below seven.
768
New elections are held if the number of core members drops below seven.
773
New elections can also be held should at least 1/3 of the active committers demand this. 
769
New elections can also be held should at least 1/3 of the active committers demand this.
774
770
775
When an election is to take place, core announces this at least 6 weeks in advance, and appoints an election manager to run the elections. 
771
When an election is to take place, core announces this at least 6 weeks in advance, and appoints an election manager to run the elections.
776
772
777
Only committers can be elected into core.
773
Only committers can be elected into core.
778
The candidates need to submit their candidacy at least one week before the election starts, but can refine their statements until the voting starts.
774
The candidates need to submit their candidacy at least one week before the election starts, but can refine their statements until the voting starts.
779
They are presented in the http://election.uk.freebsd.org/candidates.html[candidates list].
775
They are presented in the http://election.uk.freebsd.org/candidates.html[candidates list].
780
When writing their election statements, the candidates must answer a few standard questions submitted by the election manager. 
776
When writing their election statements, the candidates must answer a few standard questions submitted by the election manager.
781
777
782
During elections, the rule that a committer must have committed during the 12 past months is followed strictly.
778
During elections, the rule that a committer must have committed during the 12 past months is followed strictly.
783
Only these committers are eligible to vote. 
779
Only these committers are eligible to vote.
784
780
785
When voting, the committer may vote once in support of up to nine nominees.
781
When voting, the committer may vote once in support of up to nine nominees.
786
The voting is done over a period of four weeks with reminders being posted on "developers" mailing list that is available to all committers. 
782
The voting is done over a period of four weeks with reminders being posted on "developers" mailing list that is available to all committers.
787
783
788
The election results are released one week after the election ends, and the new core team takes office one week after the results have been posted. 
784
The election results are released one week after the election ends, and the new core team takes office one week after the results have been posted.
789
785
790
Should there be a voting tie, this will be resolved by the new, unambiguously elected core members. 
786
Should there be a voting tie, this will be resolved by the new, unambiguously elected core members.
791
787
792
Votes and candidate statements are archived, but the archives are not publicly available. 
788
Votes and candidate statements are archived, but the archives are not publicly available.
793
789
794
.Process summary: Core elections
790
.Process summary: Core elections
795
image::proc-elections.png[Refer to paragraph below for a screen-reader friendly version.]
791
image::proc-elections.png[Refer to paragraph below for a screen-reader friendly version.]
796
792
797
Core announces the election and selects an election manager who prepares the elections, and when ready, candidates can announce their candidacies through submitting their statements.
793
Core announces the election and selects an election manager who prepares the elections, and when ready, candidates can announce their candidacies through submitting their statements.
798
The committers then vote.
794
The committers then vote.
799
After the vote is over, the election results are announced and the new core team takes office. 
795
After the vote is over, the election results are announced and the new core team takes office.
800
796
801
Hats in core elections are: 
797
Hats in core elections are:
802
798
803
* <<role-core>>
799
* <<role-core>>
804
* <<role-committer>>
800
* <<role-committer>>
805
* <<role-election-manager>>
801
* <<role-election-manager>>
806
802
807
[<<freebsd-bylaws, FreeBSD, 2000A>>] [<<bsd-election2002, FreeBSD, 2002B>>] [<<freebsd-election, FreeBSD, 2002G>>] 
803
[<<freebsd-bylaws, FreeBSD, 2000A>>] [<<bsd-election2002, FreeBSD, 2002B>>] [<<freebsd-election, FreeBSD, 2002G>>]
808
804
809
[[new-features]]
805
[[new-features]]
810
=== Development of new features
806
=== Development of new features
Lines 813-833 Within the project there are sub-projects that are working on new features. Link Here
813
These projects are generally done by one person [<<jorgensen2001, Jørgensen, 2001>>].
809
These projects are generally done by one person [<<jorgensen2001, Jørgensen, 2001>>].
814
Every project is free to organise development as it sees fit.
810
Every project is free to organise development as it sees fit.
815
However, when the project is merged to the -CURRENT branch it must follow the project guidelines.
811
However, when the project is merged to the -CURRENT branch it must follow the project guidelines.
816
When the code has been well tested in the -CURRENT branch and deemed stable enough and relevant to the -STABLE branch, it is merged to the -STABLE branch. 
812
When the code has been well tested in the -CURRENT branch and deemed stable enough and relevant to the -STABLE branch, it is merged to the -STABLE branch.
817
813
818
The requirements of the project are given by developer wishes, requests from the community in terms of direct requests by mail, Problem Reports, commercial funding for the development of features, or contributions by the scientific community.
814
The requirements of the project are given by developer wishes, requests from the community in terms of direct requests by mail, Problem Reports, commercial funding for the development of features, or contributions by the scientific community.
819
The wishes that come within the responsibility of a developer are given to that developer who prioritises their time between the request and their wishes. 
815
The wishes that come within the responsibility of a developer are given to that developer who prioritises their time between the request and their wishes.
820
A common way to do this is maintain a TODO-list maintained by the project.
816
A common way to do this is maintain a TODO-list maintained by the project.
821
Items that do not come within someone's responsibility are collected on TODO-lists unless someone volunteers to take the responsibility.
817
Items that do not come within someone's responsibility are collected on TODO-lists unless someone volunteers to take the responsibility.
822
All requests, their distribution and follow-up are handled by the <<tool-bugzilla>> tool. 
818
All requests, their distribution and follow-up are handled by the <<tool-bugzilla>> tool.
823
819
824
Requirements analysis happens in two ways.
820
Requirements analysis happens in two ways.
825
The requests that come in are discussed on mailing lists, both within the main project and in the sub-project that the request belongs to or is spawned by the request.
821
The requests that come in are discussed on mailing lists, both within the main project and in the sub-project that the request belongs to or is spawned by the request.
826
Furthermore, individual developers on the sub-project will evaluate the feasibility of the requests and determine the prioritisation between them.
822
Furthermore, individual developers on the sub-project will evaluate the feasibility of the requests and determine the prioritisation between them.
827
Other than archives of the discussions that have taken place, no outcome is created by this phase that is merged into the main project. 
823
Other than archives of the discussions that have taken place, no outcome is created by this phase that is merged into the main project.
828
824
829
As the requests are prioritised by the individual developers on the basis of doing what they find interesting, necessary, or are funded to do, there is no overall strategy or prioritisation of what requests to regard as requirements and following up their correct implementation.
825
As the requests are prioritised by the individual developers on the basis of doing what they find interesting, necessary, or are funded to do, there is no overall strategy or prioritisation of what requests to regard as requirements and following up their correct implementation.
830
However, most developers have some shared vision of what issues are more important, and they can ask for guidelines from the release engineering team. 
826
However, most developers have some shared vision of what issues are more important, and they can ask for guidelines from the release engineering team.
831
827
832
The verification phase of the project is two-fold.
828
The verification phase of the project is two-fold.
833
Before committing code to the current-branch, developers request their code to be reviewed by their peers.
829
Before committing code to the current-branch, developers request their code to be reviewed by their peers.
Lines 843-854 It is an advantage to the project to for each area of the source have at least o Link Here
843
Some parts of the code have designated maintainers. Others have de-facto maintainers, and some parts of the system do not have maintainers.
839
Some parts of the code have designated maintainers. Others have de-facto maintainers, and some parts of the system do not have maintainers.
844
The maintainer is usually a person from the sub-project that wrote and integrated the code, or someone who has ported it from the platform it was written for.
840
The maintainer is usually a person from the sub-project that wrote and integrated the code, or someone who has ported it from the platform it was written for.
845
footnote:[sendmail and named are examples of code that has been merged from other platforms.]
841
footnote:[sendmail and named are examples of code that has been merged from other platforms.]
846
The maintainer's job is to make sure the code is in sync with the project the code comes from if it is contributed code, and apply patches submitted by the community or write fixes to issues that are discovered. 
842
The maintainer's job is to make sure the code is in sync with the project the code comes from if it is contributed code, and apply patches submitted by the community or write fixes to issues that are discovered.
847
843
848
The main bulk of work that is put into the FreeBSD project is maintenance.
844
The main bulk of work that is put into the FreeBSD project is maintenance.
849
[<<jorgensen2001, Jørgensen, 2001>>] has made a figure showing the life cycle of changes. 
845
[<<jorgensen2001, Jørgensen, 2001>>] has made a figure showing the life cycle of changes.
850
846
851
Jørgenssen's model for change integration 
847
Jørgenssen's model for change integration
852
848
853
[.informaltable]
849
[.informaltable]
854
[cols="1,1,1", options="header"]
850
[cols="1,1,1", options="header"]
Lines 883-906 Jørgenssen's model for change integration Link Here
883
|===
879
|===
884
880
885
Here "development release" refers to the -CURRENT branch while "production release" refers to the -STABLE branch.
881
Here "development release" refers to the -CURRENT branch while "production release" refers to the -STABLE branch.
886
The "pre-commit test" is the functional testing by peer developers when asked to do so or trying out the code to determine the status of the sub-project. 
882
The "pre-commit test" is the functional testing by peer developers when asked to do so or trying out the code to determine the status of the sub-project.
887
"Parallel debugging" is the functional testing that can trigger more review, and debugging when the code is included in the -CURRENT branch. 
883
"Parallel debugging" is the functional testing that can trigger more review, and debugging when the code is included in the -CURRENT branch.
888
884
889
As of this writing, there were 269 committers in the project.
885
As of this writing, there were 269 committers in the project.
890
When they commit a change to a branch, that constitutes a new release.
886
When they commit a change to a branch, that constitutes a new release.
891
It is very common for users in the community to track a particular branch.
887
It is very common for users in the community to track a particular branch.
892
The immediate existence of a new release makes the changes widely available right away and allows for rapid feedback from the community.
888
The immediate existence of a new release makes the changes widely available right away and allows for rapid feedback from the community.
893
This also gives the community the response time they expect on issues that are of importance to them.
889
This also gives the community the response time they expect on issues that are of importance to them.
894
This makes the community more engaged, and thus allows for more and better feedback that again spurs more maintenance and ultimately should create a better product. 
890
This makes the community more engaged, and thus allows for more and better feedback that again spurs more maintenance and ultimately should create a better product.
895
891
896
Before making changes to code in parts of the tree that has a history unknown to the committer, the committer is required to read the commit logs to see why certain features are implemented the way they are in order not to make mistakes that have previously either been thought through or resolved. 
892
Before making changes to code in parts of the tree that has a history unknown to the committer, the committer is required to read the commit logs to see why certain features are implemented the way they are in order not to make mistakes that have previously either been thought through or resolved.
897
893
898
[[model-pr]]
894
[[model-pr]]
899
=== Problem reporting
895
=== Problem reporting
900
896
901
Before FreeBSD 10, FreeBSD included a problem reporting tool called `send-pr`.
897
Before FreeBSD 10, FreeBSD included a problem reporting tool called `send-pr`.
902
Problems include bug reports, feature requests, feature enhancements and notices of new versions of external software that are included in the project. 
898
Problems include bug reports, feature requests, feature enhancements and notices of new versions of external software that are included in the project.
903
Although `send-pr` is available, users and developers are encouraged to submit issues using our https://bugs.freebsd.org/submit/[ problem report form]. 
899
Although `send-pr` is available, users and developers are encouraged to submit issues using our https://bugs.freebsd.org/submit/[ problem report form].
904
900
905
Problem reports are sent to an email address where it is inserted into the Problem Reports maintenance database.
901
Problem reports are sent to an email address where it is inserted into the Problem Reports maintenance database.
906
A <<role-bugbuster>> classifies the problem and sends it to the correct group or maintainer within the project.
902
A <<role-bugbuster>> classifies the problem and sends it to the correct group or maintainer within the project.
Lines 911-917 Once a patch for the problem is made, the originator may be asked to try it out. Link Here
911
Finally, the working patch is integrated into the project, and documented if applicable.
907
Finally, the working patch is integrated into the project, and documented if applicable.
912
It there goes through the regular maintenance cycle as described in section <<model-maintenance>>.
908
It there goes through the regular maintenance cycle as described in section <<model-maintenance>>.
913
These are the states a problem report can be in: open, analyzed, feedback, patched, suspended and closed.
909
These are the states a problem report can be in: open, analyzed, feedback, patched, suspended and closed.
914
The suspended state is for when further progress is not possible due to the lack of information or for when the task would require so much work that nobody is working on it at the moment. 
910
The suspended state is for when further progress is not possible due to the lack of information or for when the task would require so much work that nobody is working on it at the moment.
915
911
916
.Process summary: problem reporting
912
.Process summary: problem reporting
917
image::proc-pr.png[Refer to paragraph below for a screen-reader friendly version.]
913
image::proc-pr.png[Refer to paragraph below for a screen-reader friendly version.]
Lines 919-933 image::proc-pr.png[Refer to paragraph below for a screen-reader friendly version Link Here
919
A problem is reported by the report originator.
915
A problem is reported by the report originator.
920
It is then classified by a bugbuster and handed to the correct maintainer.
916
It is then classified by a bugbuster and handed to the correct maintainer.
921
They verify the problem and discuss the problem with the originator until they have enough information to create a working patch.
917
They verify the problem and discuss the problem with the originator until they have enough information to create a working patch.
922
This patch is then committed and the problem report is closed. 
918
This patch is then committed and the problem report is closed.
923
919
924
The roles included in this process are: 
920
The roles included in this process are:
925
921
926
. <<role-problem-originator>>
922
. <<role-problem-originator>>
927
. <<role-maintainer>>
923
. <<role-maintainer>>
928
. <<role-bugbuster>>
924
. <<role-bugbuster>>
929
925
930
[<<freebsd-handle-pr, FreeBSD, 2002C>>]. [<<freebsd-send-pr, FreeBSD, 2002D>>] 
926
[<<freebsd-handle-pr, FreeBSD, 2002C>>]. [<<freebsd-send-pr, FreeBSD, 2002D>>]
931
927
932
[[process-reactions]]
928
[[process-reactions]]
933
=== Reacting to misbehavior
929
=== Reacting to misbehavior
Lines 935-958 The roles included in this process are: Link Here
935
[<<freebsd-committer, FreeBSD, 2001>>] has a number of rules that committers should follow.
931
[<<freebsd-committer, FreeBSD, 2001>>] has a number of rules that committers should follow.
936
However, it happens that these rules are broken.
932
However, it happens that these rules are broken.
937
The following rules exist in order to be able to react to misbehavior.
933
The following rules exist in order to be able to react to misbehavior.
938
They specify what actions will result in how long a suspension of the committer's commit privileges. 
934
They specify what actions will result in how long a suspension of the committer's commit privileges.
939
935
940
* Committing during code freezes without the approval of the Release Engineering team - 2 days 
936
* Committing during code freezes without the approval of the Release Engineering team - 2 days
941
* Committing to a security branch without approval - 2 days 
937
* Committing to a security branch without approval - 2 days
942
* Commit wars - 5 days to all participating parties 
938
* Commit wars - 5 days to all participating parties
943
* Impolite or inappropriate behavior - 5 days 
939
* Impolite or inappropriate behavior - 5 days
944
940
945
[<<ref-freebsd-trenches, Lehey, 2002>>]
941
[<<ref-freebsd-trenches, Lehey, 2002>>]
946
942
947
For the suspensions to be efficient, any single core member can implement a suspension before discussing it on the "core" mailing list.
943
For the suspensions to be efficient, any single core member can implement a suspension before discussing it on the "core" mailing list.
948
Repeat offenders can, with a 2/3 vote by core, receive harsher penalties, including permanent removal of commit privileges.
944
Repeat offenders can, with a 2/3 vote by core, receive harsher penalties, including permanent removal of commit privileges.
949
(However, the latter is always viewed as a last resort, due to its inherent tendency to create controversy.)
945
(However, the latter is always viewed as a last resort, due to its inherent tendency to create controversy.)
950
All suspensions are posted to the "developers" mailing list, a list available to committers only. 
946
All suspensions are posted to the "developers" mailing list, a list available to committers only.
951
947
952
It is important that you cannot be suspended for making technical errors.
948
It is important that you cannot be suspended for making technical errors.
953
All penalties come from breaking social etiquette. 
949
All penalties come from breaking social etiquette.
954
950
955
Hats involved in this process: 
951
Hats involved in this process:
956
952
957
* <<role-core>>
953
* <<role-core>>
958
* <<role-committer>>
954
* <<role-committer>>
Lines 963-982 Hats involved in this process: Link Here
963
The FreeBSD project has a Release Engineering  team with a principal release engineer that is responsible for creating releases of FreeBSD that can be brought out to the user community via the net or sold in retail outlets.
959
The FreeBSD project has a Release Engineering  team with a principal release engineer that is responsible for creating releases of FreeBSD that can be brought out to the user community via the net or sold in retail outlets.
964
Since FreeBSD is available on multiple platforms and releases for the different architectures are made available at the same time, the team has one person in charge of each architecture.
960
Since FreeBSD is available on multiple platforms and releases for the different architectures are made available at the same time, the team has one person in charge of each architecture.
965
Also, there are roles in the team responsible for coordinating quality assurance  efforts, building a package set and for having an updated set of documents.
961
Also, there are roles in the team responsible for coordinating quality assurance  efforts, building a package set and for having an updated set of documents.
966
When referring to the release engineer, a representative for the release engineering team is meant. 
962
When referring to the release engineer, a representative for the release engineering team is meant.
967
963
968
When a release is coming, the FreeBSD project changes shape somewhat.
964
When a release is coming, the FreeBSD project changes shape somewhat.
969
A release schedule is made containing feature- and code-freezes, release of interim releases and the final release.
965
A release schedule is made containing feature- and code-freezes, release of interim releases and the final release.
970
A feature-freeze means no new features are allowed to be committed to the branch without the release engineers' explicit consent.
966
A feature-freeze means no new features are allowed to be committed to the branch without the release engineers' explicit consent.
971
Code-freeze means no changes to the code (like bugs-fixes) are allowed to be committed without the release engineers' explicit consent.
967
Code-freeze means no changes to the code (like bugs-fixes) are allowed to be committed without the release engineers' explicit consent.
972
This feature- and code-freeze is known as stabilising.
968
This feature- and code-freeze is known as stabilising.
973
During the release process, the release engineer has the full authority to revert to older versions of code and thus "back out" changes should they find that the changes are not suitable to be included in the release. 
969
During the release process, the release engineer has the full authority to revert to older versions of code and thus "back out" changes should they find that the changes are not suitable to be included in the release.
974
970
975
There are three different kinds of releases: 
971
There are three different kinds of releases:
976
972
977
. .0 releases are the first release of a major version. These are branched of the -CURRENT branch and have a significantly longer release engineering cycle due to the unstable nature of the -CURRENT branch 
973
. .0 releases are the first release of a major version. These are branched of the -CURRENT branch and have a significantly longer release engineering cycle due to the unstable nature of the -CURRENT branch
978
. .X releases are releases of the -STABLE branch. They are scheduled to come out every 4 months. 
974
. .X releases are releases of the -STABLE branch. They are scheduled to come out every 4 months.
979
. .X.Y releases are security releases that follow the .X branch. These come out only when sufficient security fixes have been merged since the last release on that branch. New features are rarely included, and the security team is far more involved in these than in regular releases. 
975
. .X.Y releases are security releases that follow the .X branch. These come out only when sufficient security fixes have been merged since the last release on that branch. New features are rarely included, and the security team is far more involved in these than in regular releases.
980
976
981
For releases of the -STABLE-branch, the release process starts 45 days before the anticipated release date.
977
For releases of the -STABLE-branch, the release process starts 45 days before the anticipated release date.
982
During the first phase, the first 15 days, the developers merge what changes they have had in -CURRENT that they want to have in the release to the release branch.
978
During the first phase, the first 15 days, the developers merge what changes they have had in -CURRENT that they want to have in the release to the release branch.
Lines 985-1031 These changes must be approved by the release engineer in advance. At the beginn Link Here
985
Updates are less likely to be allowed during this period, except for important bug fixes and security updates.
981
Updates are less likely to be allowed during this period, except for important bug fixes and security updates.
986
In this final period, all releases are considered release candidates.
982
In this final period, all releases are considered release candidates.
987
At the end of the release process, a release is created with the new version number, including binary distributions on web sites and the creation of CD-ROM images.
983
At the end of the release process, a release is created with the new version number, including binary distributions on web sites and the creation of CD-ROM images.
988
However, the release is not considered "really released" until a <<tool-pgp>>-signed message stating exactly that, is sent to the mailing list freebsd-announce; anything labelled as a "release" before that may well be in-process and subject to change before the PGP-signed message is sent. footnote:[Many commercial vendors use these images to create CD-ROMs that are sold in retail outlets.]. 
984
However, the release is not considered "really released" until a <<tool-pgp>>-signed message stating exactly that, is sent to the mailing list freebsd-announce; anything labelled as a "release" before that may well be in-process and subject to change before the PGP-signed message is sent. footnote:[Many commercial vendors use these images to create CD-ROMs that are sold in retail outlets.].
989
985
990
The releases of the -CURRENT-branch (that is, all releases that end with ".0") are very similar, but with twice as long timeframe.
986
The releases of the -CURRENT-branch (that is, all releases that end with ".0") are very similar, but with twice as long timeframe.
991
It starts 8 weeks prior to the release with announcement of the release time line.
987
It starts 8 weeks prior to the release with announcement of the release time line.
992
Two weeks into the release process, the feature freeze is initiated and performance tweaks should be kept to a minimum.
988
Two weeks into the release process, the feature freeze is initiated and performance tweaks should be kept to a minimum.
993
Four weeks prior to the release, an official beta version is made available. 
989
Four weeks prior to the release, an official beta version is made available.
994
Two weeks prior to release, the code is officially branched into a new version.
990
Two weeks prior to release, the code is officially branched into a new version.
995
This version is given release candidate status, and as with the release engineering of -STABLE, the code freeze of the release candidate is hardened. 
991
This version is given release candidate status, and as with the release engineering of -STABLE, the code freeze of the release candidate is hardened.
996
However, development on the main development branch can continue.
992
However, development on the main development branch can continue.
997
Other than these differences, the release engineering processes are alike. 
993
Other than these differences, the release engineering processes are alike.
998
994
999
*.0 releases go into their own branch and are aimed mainly at early adopters. The branch then goes through a period of stabilisation, and it is not until the <<role-releng, Release Engineering Team>> decides the demands to stability have been satisfied that the branch becomes -STABLE and -CURRENT targets the next major version. While this for the majority has been with *.1 versions, this is not a demand. 
995
*.0 releases go into their own branch and are aimed mainly at early adopters. The branch then goes through a period of stabilisation, and it is not until the <<role-releng, Release Engineering Team>> decides the demands to stability have been satisfied that the branch becomes -STABLE and -CURRENT targets the next major version. While this for the majority has been with *.1 versions, this is not a demand.
1000
996
1001
Most releases are made when a given date that has been deemed a long enough time since the previous release comes.
997
Most releases are made when a given date that has been deemed a long enough time since the previous release comes.
1002
A target is set for having major releases every 18 months and minor releases every 4 months.
998
A target is set for having major releases every 18 months and minor releases every 4 months.
1003
The user community has made it very clear that security and stability cannot be sacrificed by self-imposed deadlines and target release dates.
999
The user community has made it very clear that security and stability cannot be sacrificed by self-imposed deadlines and target release dates.
1004
For slips of time not to become too long with regards to security and stability issues, extra discipline is required when committing changes to -STABLE. 
1000
For slips of time not to become too long with regards to security and stability issues, extra discipline is required when committing changes to -STABLE.
1005
1001
1006
. Make release schedule
1002
. Make release schedule
1007
. Feature freeze
1003
. Feature freeze
1008
. Code freeze
1004
. Code freeze
1009
. Make branch
1005
. Make branch
1010
. Release candidate
1006
. Release candidate
1011
. Stabilize release (loop back to previous step as many times as necessary; when release is considered stable, proceed with next step) 
1007
. Stabilize release (loop back to previous step as many times as necessary; when release is considered stable, proceed with next step)
1012
. Build packages
1008
. Build packages
1013
. Warn mirrors
1009
. Warn mirrors
1014
. Publish release
1010
. Publish release
1015
1011
1016
[<<freebsd-releng, FreeBSD, 2002E>>] 
1012
[<<freebsd-releng, FreeBSD, 2002E>>]
1017
1013
1018
[[tools]]
1014
[[tools]]
1019
== Tools
1015
== Tools
1020
1016
1021
The major support tools for supporting the development process are Bugzilla, Mailman, and OpenSSH.
1017
The major support tools for supporting the development process are Bugzilla, Mailman, and OpenSSH.
1022
These are externally developed tools and are commonly used in the open source world. 
1018
These are externally developed tools and are commonly used in the open source world.
1023
1019
1024
[[tool-svn]]
1020
[[tool-svn]]
1025
=== Subversion (SVN)
1021
=== Subversion (SVN)
1026
1022
1027
Subversion ("SVN") is a system to handle multiple versions of text files and tracking who committed what changes and why.
1023
Subversion ("SVN") is a system to handle multiple versions of text files and tracking who committed what changes and why.
1028
A project lives within a "repository" and different versions are considered different "branches". 
1024
A project lives within a "repository" and different versions are considered different "branches".
1029
1025
1030
[[tool-bugzilla]]
1026
[[tool-bugzilla]]
1031
=== Bugzilla
1027
=== Bugzilla
Lines 1033-1039 A project lives within a "repository" and different versions are considered diff Link Here
1033
Bugzilla is a maintenance database consisting of a set of tools to track bugs at a central site.
1029
Bugzilla is a maintenance database consisting of a set of tools to track bugs at a central site.
1034
It supports the bug tracking process for sending and handling bugs as well as querying and updating the database and editing bug reports.
1030
It supports the bug tracking process for sending and handling bugs as well as querying and updating the database and editing bug reports.
1035
The project uses its web interface to send "Problem Reports" to the project's central Bugzilla server.
1031
The project uses its web interface to send "Problem Reports" to the project's central Bugzilla server.
1036
The committers also have web and command-line clients. 
1032
The committers also have web and command-line clients.
1037
1033
1038
[[model-mailman]]
1034
[[model-mailman]]
1039
=== Mailman
1035
=== Mailman
Lines 1042-1055 Mailman is a program that automates the management of mailing lists. Link Here
1042
The FreeBSD Project uses it to run 16 general lists, 60 technical lists, 4 limited lists and 5 lists with SVN commit logs.
1038
The FreeBSD Project uses it to run 16 general lists, 60 technical lists, 4 limited lists and 5 lists with SVN commit logs.
1043
It is also used for many mailing lists set up and used by other people and projects in the FreeBSD community.
1039
It is also used for many mailing lists set up and used by other people and projects in the FreeBSD community.
1044
General lists are lists for the general public, technical lists are mainly for the development of specific areas of interest, and closed lists are for internal communication not intended for the general public.
1040
General lists are lists for the general public, technical lists are mainly for the development of specific areas of interest, and closed lists are for internal communication not intended for the general public.
1045
The majority of all the communication in the project goes through these 85 lists  [<<ref-bsd-handbook, FreeBSD, 2003A>>, Appendix C]. 
1041
The majority of all the communication in the project goes through these 85 lists  [<<ref-bsd-handbook, FreeBSD, 2003A>>, Appendix C].
1046
1042
1047
[[tool-pgp]]
1043
[[tool-pgp]]
1048
=== Pretty Good Privacy
1044
=== Pretty Good Privacy
1049
1045
1050
Pretty Good Privacy, better known as PGP, is a cryptosystem using a public key architecture to allow people to digitally sign and/or encrypt information in order to ensure secure communication between two parties.
1046
Pretty Good Privacy, better known as PGP, is a cryptosystem using a public key architecture to allow people to digitally sign and/or encrypt information in order to ensure secure communication between two parties.
1051
A signature is used when sending information out to many recipients, enabling them to verify that the information has not been tampered with before they received it.
1047
A signature is used when sending information out to many recipients, enabling them to verify that the information has not been tampered with before they received it.
1052
In the FreeBSD Project this is the primary means of ensuring that information has been written by the person who claims to have written it, and not altered in transit. 
1048
In the FreeBSD Project this is the primary means of ensuring that information has been written by the person who claims to have written it, and not altered in transit.
1053
1049
1054
[[tool-ssh2]]
1050
[[tool-ssh2]]
1055
=== Secure Shell
1051
=== Secure Shell
Lines 1058-1064 Secure Shell is a standard for securely logging into a remote system and for exe Link Here
1058
It allows other connections, called tunnels, to be established and protected between the two involved systems.
1054
It allows other connections, called tunnels, to be established and protected between the two involved systems.
1059
This standard exists in two primary versions, and only version two is used for the FreeBSD Project.
1055
This standard exists in two primary versions, and only version two is used for the FreeBSD Project.
1060
The most common implementation of the standard is OpenSSH that is a part of the project's main distribution.
1056
The most common implementation of the standard is OpenSSH that is a part of the project's main distribution.
1061
Since its source is updated more often than FreeBSD releases, the latest version is also available in the ports tree. 
1057
Since its source is updated more often than FreeBSD releases, the latest version is also available in the ports tree.
1062
1058
1063
[[sub-projects]]
1059
[[sub-projects]]
1064
== Sub-projects
1060
== Sub-projects
Lines 1069-1083 When a problem area is sufficiently isolated, most communication would be within Link Here
1069
=== The Ports Subproject
1065
=== The Ports Subproject
1070
1066
1071
A "port" is a set of meta-data and patches that are needed to fetch, compile and install correctly an external piece of software on a FreeBSD system.
1067
A "port" is a set of meta-data and patches that are needed to fetch, compile and install correctly an external piece of software on a FreeBSD system.
1072
The amount of ports has grown at a tremendous rate, as shown by the following figure. 
1068
The amount of ports has grown at a tremendous rate, as shown by the following figure.
1073
1069
1074
.Number of ports added between 1996 and 2008 [[fig-ports]]
1070
.Number of ports added between 1996 and 2008 [[fig-ports]]
1075
image::portsstatus.png[Refer to tables below for a screen-reader friendly version.]
1071
image::portsstatus.png[Refer to tables below for a screen-reader friendly version.]
1076
1072
1077
<<fig-ports>> shows the number of ports available to FreeBSD in the period 1995 to 2008.
1073
<<fig-ports>> shows the number of ports available to FreeBSD in the period 1995 to 2008.
1078
It looks like the curve has first grown exponentially, and then from the middle of 2001 to the middle of 2007 grown linearly at a rate of about 2000 ports/year, before its growth rate gets lower. 
1074
It looks like the curve has first grown exponentially, and then from the middle of 2001 to the middle of 2007 grown linearly at a rate of about 2000 ports/year, before its growth rate gets lower.
1079
1075
1080
Approximate dates each multiple of 1000 ports is reached 
1076
Approximate dates each multiple of 1000 ports is reached
1081
1077
1082
[.informaltable]
1078
[.informaltable]
1083
[cols="1,1", options="header"]
1079
[cols="1,1", options="header"]
Lines 1137-1143 Approximate dates each multiple of 1000 ports is reached Link Here
1137
|2nd quarter 2007
1133
|2nd quarter 2007
1138
|===
1134
|===
1139
1135
1140
Approximate number of ports at the start of each year 
1136
Approximate number of ports at the start of each year
1141
1137
1142
[.informaltable]
1138
[.informaltable]
1143
[cols="1,1", options="header"]
1139
[cols="1,1", options="header"]
Lines 1189-1227 Approximate number of ports at the start of each year Link Here
1189
|===
1185
|===
1190
1186
1191
As the external software described by the port often is under continued development, the amount of work required to maintain the ports is already large, and increasing.
1187
As the external software described by the port often is under continued development, the amount of work required to maintain the ports is already large, and increasing.
1192
This has led to the ports part of the FreeBSD project gaining a more empowered structure, and is more and more becoming a sub-project of the FreeBSD project. 
1188
This has led to the ports part of the FreeBSD project gaining a more empowered structure, and is more and more becoming a sub-project of the FreeBSD project.
1193
1189
1194
Ports has its own core team with the <<role-ports-manager>> as its leader, and this team can appoint committers without FreeBSD Core's approval. 
1190
Ports has its own core team with the <<role-ports-manager>> as its leader, and this team can appoint committers without FreeBSD Core's approval.
1195
Unlike in the FreeBSD Project, where a lot of maintenance frequently is rewarded with a commit bit, the ports sub-project contains many active maintainers that are not committers. 
1191
Unlike in the FreeBSD Project, where a lot of maintenance frequently is rewarded with a commit bit, the ports sub-project contains many active maintainers that are not committers.
1196
1192
1197
Unlike the main project, the ports tree is not branched.
1193
Unlike the main project, the ports tree is not branched.
1198
Every release of FreeBSD follows the current ports collection and has thus available updated information on where to find programs and how to build them.
1194
Every release of FreeBSD follows the current ports collection and has thus available updated information on where to find programs and how to build them.
1199
This, however, means that a port that makes dependencies on the system may need to have variations depending on what version of FreeBSD it runs on. 
1195
This, however, means that a port that makes dependencies on the system may need to have variations depending on what version of FreeBSD it runs on.
1200
1196
1201
With an unbranched ports repository it is not possible to guarantee that any port will run on anything other than -CURRENT and -STABLE, in particular older, minor releases.
1197
With an unbranched ports repository it is not possible to guarantee that any port will run on anything other than -CURRENT and -STABLE, in particular older, minor releases.
1202
There is neither the infrastructure nor volunteer time needed to guarantee this. 
1198
There is neither the infrastructure nor volunteer time needed to guarantee this.
1203
1199
1204
For efficiency of communication, teams depending on Ports, such as the release engineering team, have their own ports liaisons. 
1200
For efficiency of communication, teams depending on Ports, such as the release engineering team, have their own ports liaisons.
1205
1201
1206
[[sub-project-documentation]]
1202
[[sub-project-documentation]]
1207
=== The FreeBSD Documentation Project
1203
=== The FreeBSD Documentation Project
1208
1204
1209
The FreeBSD Documentation project was started January 1995.
1205
The FreeBSD Documentation project was started January 1995.
1210
From the initial group of a project leader, four team leaders and 16 members, they are now a total of 44 committers.
1206
From the initial group of a project leader, four team leaders and 16 members, they are now a total of 44 committers.
1211
The documentation mailing list has just under 300 members, indicating that there is quite a large community around it. 
1207
The documentation mailing list has just under 300 members, indicating that there is quite a large community around it.
1212
1208
1213
The goal of the Documentation project is to provide good and useful documentation of the FreeBSD project, thus making it easier for new users to get familiar with the system and detailing advanced features for the users. 
1209
The goal of the Documentation project is to provide good and useful documentation of the FreeBSD project, thus making it easier for new users to get familiar with the system and detailing advanced features for the users.
1214
1210
1215
The main tasks in the Documentation project are to work on current projects in the "FreeBSD Documentation Set", and translate the documentation to other languages. 
1211
The main tasks in the Documentation project are to work on current projects in the "FreeBSD Documentation Set", and translate the documentation to other languages.
1216
1212
1217
Like the FreeBSD Project, documentation is split in the same branches.
1213
Like the FreeBSD Project, documentation is split in the same branches.
1218
This is done so that there is always an updated version of the documentation for each version.
1214
This is done so that there is always an updated version of the documentation for each version.
1219
Only documentation errors are corrected in the security branches. 
1215
Only documentation errors are corrected in the security branches.
1220
1216
1221
Like the ports sub-project, the Documentation project can appoint documentation committers without FreeBSD Core's approval. [<<freebsd-doceng-charter, FreeBSD, 2003B>>].
1217
Like the ports sub-project, the Documentation project can appoint documentation committers without FreeBSD Core's approval. [<<freebsd-doceng-charter, FreeBSD, 2003B>>].
1222
1218
1223
The Documentation project has extref:{fdp-primer}[a primer].
1219
The Documentation project has extref:{fdp-primer}[a primer].
1224
This is used both to introduce new project members to the standard tools and syntaxes and to act as a reference when working on the project. 
1220
This is used both to introduce new project members to the standard tools and syntaxes and to act as a reference when working on the project.
1225
1221
1226
:sectnums!:
1222
:sectnums!:
1227
1223

Return to bug 264771