aboutsummaryrefslogtreecommitdiff
path: root/en_US.ISO8859-1/books/dev-model/book.xml
blob: 607d0f2b8d79b095fd7231e697cd93b6c5d21cc2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN"
	"../../../share/xml/freebsd45.dtd" [
<!ENTITY % chapters SYSTEM "chapters.ent">
%chapters;
]>

<!--
  - Copyright (c) 2002-2005 Niklas Saers
  - All rights reserved.
  -
  - Redistribution and use in source and binary forms, with or without
  - modification, are permitted provided that the following conditions
  - are met:
  - 1. Redistributions of source code must retain the above copyright
  - notice, this list of conditions and the following disclaimer.
  - 2. Redistributions in binary form must reproduce the above copyright
  - notice, this list of conditions and the following disclaimer in the
  - documentation and/or other materials provided with the distribution.
  -
  - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  - ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - SUCH DAMAGE.
  -
  - $FreeBSD$
  -->

<book lang='en'>
     <bookinfo>
        <title>A project model for the FreeBSD Project</title>
        <author>
            <firstname>Niklas</firstname>
            <surname>Saers</surname>
        </author>
        <copyright>
            <year>2002-2005</year>
            <holder>Niklas Saers</holder>
        </copyright>
	<revhistory>
	  <revision>
	      <revnumber>1.3</revnumber>
	      <date>October, 2012</date>
	      <revremark>Remove hats held by specific people, these
		are documented elsewhere.</revremark>
	    </revision>
            <revision>
                <revnumber>1.2</revnumber>
                <date>April, 2005</date>
                <revremark>Update one year of changes, replace statistics with those of 2004</revremark>
            </revision>
            <revision>
                <revnumber>1.1</revnumber>
                <date>July, 2004</date>
                <revremark>First update within the FreeBSD tree</revremark>
            </revision>
            <revision>
                <revnumber>1.0</revnumber>
                <date>December 4th, 2003</date>
                <revremark>Ready for commit to FreeBSD Documentation</revremark>
            </revision>
            <revision>
                <revnumber>0.7</revnumber>
                <date>April 7th, 2003</date>
                <revremark>Release for review by the Documentation team</revremark>
            </revision>
            <revision>
                <revnumber>0.6</revnumber>
                <date>March 1st, 2003</date>
                <revremark>Incorporated corrections noted by
                interviewees and reviewers</revremark>
            </revision>
            <revision>
                <revnumber>0.5</revnumber>
                <date>February 1st, 2003</date>
                <revremark>Initial review by interviewees</revremark>
            </revision>
        </revhistory>

	<releaseinfo>$FreeBSD$</releaseinfo>
    </bookinfo>
    <preface id="foreword">

        <title>Foreword</title>
        <para>
            Up until now, the FreeBSD project has released a number of
            described techniques to do different parts of work. However,
            a project model summarising how the project is structured is needed
            because of the increasing amount of project members.
            <footnote>
                <para>
                    This goes hand-in-hand with Brooks' law that <quote>adding
                    another person to a late project will make it later</quote>
                    since it will increase the communication needs <xref linkend="brooks"/>.
                    A project model
                    is a tool to reduce the communication needs.
                </para>
            </footnote>
            This paper
            will provide such a project model and is donated to the
            FreeBSD Documentation project where it can evolve together with
            the project so that it can at any point in time reflect the way
            the project works. It is based on <citation><xref linkend="thesis"/></citation>.
        </para>

        <para>
            I would like to thank the following people for taking the time
            to explain things that were unclear to me and for proofreading
            the document.</para>
            <itemizedlist>
                <listitem><para>Andrey A. Chernov <email>ache@freebsd.org</email></para></listitem>
                <listitem><para>Bruce A. Mah <email>bmah@freebsd.org</email></para></listitem>
                <listitem><para>Dag-Erling Sm&oslash;rgrav <email>des@freebsd.org</email></para></listitem>
                <listitem><para>Giorgos Keramidas<email>keramida@freebsd.org</email></para></listitem>
                <listitem><para>Ingvil Hovig <email>ingvil.hovig@skatteetaten.no</email></para></listitem>
                <listitem><para>Jesper Holck<email>jeh.inf@cbs.dk</email></para></listitem>
                <listitem><para>John Baldwin <email>jhb@freebsd.org</email></para></listitem>
                <listitem><para>John Polstra <email>jdp@freebsd.org</email></para></listitem>
                <listitem><para>Kirk McKusick <email>mckusick@freebsd.org</email></para></listitem>
                <listitem><para>Mark Linimon <email>linimon@freebsd.org</email></para></listitem>
                <listitem><para>Marleen Devos</para></listitem>
                <listitem><para>Niels J&oslash;rgenssen<email>nielsj@ruc.dk</email></para></listitem>
                <listitem><para>Nik Clayton <email>nik@freebsd.org</email></para></listitem>
                <listitem><para>Poul-Henning Kamp <email>phk@freebsd.org</email></para></listitem>
                <listitem><para>Simon L. Nielsen <email>simon@freebsd.org</email></para></listitem>
            </itemizedlist>

    </preface>

    <chapter id="overview">
        <title>Overview</title>


        <para>
            A project model is a means to reduce the communications overhead in
            a project. As shown by <citation><xref linkend="brooks"/></citation>, increasing the
            number of project participants increases the communication in the
            project exponentionally. 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. This project
            model will serve to reduce this overhead by providing an up-to-date
            description of the project.
        </para>

        <para>
            During the Core elections in 2002, Mark Murray stated
            <quote>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.</quote>

            <citation><xref linkend="bsd-election2002"/></citation>.
            This project model is not meant to be a tool to
            justify creating impositions for developers, but as a tool to
            facilitate coordination.
            It is meant as a
            description of the project, with an overview of how the different
            processes are executed.
            It is an introduction to how the FreeBSD
            project works.

        </para>

        <para>
            The FreeBSD project model will be described as of
            July 1st, 2004. It is based on the Niels J&oslash;rgensen's paper
            <citation><xref linkend="jorgensen2001"/></citation>,
            FreeBSD's official documents,
            discussions on FreeBSD mailing lists and interviews with
            developers.
        </para>

        <para>
            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. Finally it will outline major sub-projects of the
            FreeBSD project.
        </para>

        <para>
            <citation><xref
            linkend="freebsd-developer-handbook"/>, Section 1.2 and 1.3</citation>
            give the vision and the architectural guidelines for the
            project. The vision is <quote>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.</quote> The architectural
            guidelines help determine whether a problem that someone wants
            to be solved is within the scope of the project
        </para>
</chapter>

        <chapter id="definitions">
            <title>Definitions</title>

            <section id="ref-activity" xreflabel="">
                <title>Activity</title>

                <para>
                    An <quote>activity</quote> is an element of work performed
                    during the course of a project <citation><xref linkend="ref-pmbok"/></citation>.
                    It has an output and
                    leads towards an outcome.
                    Such an output can either be an input to another
                    activity or a part of the process' delivery.
                </para>


            </section>

            <section id="def-process" xreflabel="">
                <title>Process</title>

                <para>
                    A <quote>process</quote> is a series of activities
                    that lead towards a particular outcome. A process can
                    consist of one or more sub-processes. An example of a process is software
                    design.
                </para>

            </section>

            <section id="ref-hat" xreflabel="Hat">
                <title>Hat</title>

                <para>
                    A <quote>hat</quote> is synonymous with role. A hat has
                    certain responsibilities in a process and for the process
                    outcome. The hat executes activities. It is well defined what
                    issues the hat should be contacted about by the project
                    members and people outside the project.
                </para>

            </section>

            <section id="ref-outcome" xreflabel="Outcome">
                <title>Outcome</title>

                <para>
                    An <quote>outcome</quote> is the final output of the process.
                    This is synonymous with deliverable, that is defined as
                    <quote>any measurable, tangible, verifiable outcome, result or
                        item that must be produced to complete a project or part of a
                        project. 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</quote> by <citation><xref
                    linkend="ref-pmbok"/></citation>.
                    Examples of
                    outcomes are a piece of software, a decision made or a
                    report written.
                </para>

            </section>


            <section id="ref-freebsd" xreflabel="">
                <title>FreeBSD</title>

                <para>
                    When saying <quote>FreeBSD</quote> we will mean the BSD
                    derivative UNIX-like operating system
                    FreeBSD, whereas when saying <quote>the FreeBSD
                    Project</quote> we will mean the project organisation.
                </para>
            </section>
        </chapter>

        <chapter id="model-orgstruct">
            <title>Organisational structure</title>

            <para>
                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.

            </para>
            <para>
                <figure>
                    <title>The FreeBSD Project's structure</title>
                    <graphic fileref="orghierarchy"/>
                </figure>
            </para>

            <para>
                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.
            </para>

            <para>
                The main resource in the FreeBSD community is its developers: the
                committers and contributors. It is with their contributions that the
                project can move forward. Regular developers are referred to as contributors.
                As by January 1st, 2003, there are an estimated 5500
                contributors on the project.
		<!--
		  Contributors = people submitting PRs + people submitting code - overlap.
		  Lost the script, TODO: recompute the estimate
		-->

            </para>

            <para>
                Committers are developers with the privilege of being able to
                commit changes. 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. They are also the developers who elect
                the core team, and they have access to closed discussions.
            </para>

            <para>
	        <!-- 96 developers commit in one part only,
		     91 developers commit in two parts,
		     48 developers commit in three parts,
		     29 developers commit in all parts
		         Data from the entire year 2004 -->

                The project can be grouped into four distinct separate parts,
                and most developers will focus their involvement in one
		part of FreeBSD. <!-- 91.3% had 50% or more of their commits
		in one part during 2004 -->

		The four parts
                are kernel development, userland development, ports and
                documentation. When referring to the base system, both
                kernel and userland is meant.
            </para>

            <para>
                This split changes our triangle to look like this:
            </para>
            <para>
                <figure>
                    <title>The FreeBSD Project's structure with committers in categories</title>
                    <graphic fileref="orghierarchy2"/>
                </figure>
            </para>
            <para>
                Number of committers per area has been determined by going through
                CVS logs from January 1st, 2004 to December 31st, 2004.
                Note that many committers work in multiple
                areas, making the total number higher than the real number
                of committers. The total number of committers at that
                time was 269. <!-- Down from 275 in 2001 -->
            </para>

            <para>
                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.
                Because some committers work on different parts, the total
                number in the committers section of the triangle is higher than
                in the above triangle.
            </para>

            <para>
                The kernel is the main building block of FreeBSD. While
                the userland applications are protected against faults in
                other userland applications, the entire system is
                vulnerable to errors in the kernel. 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. Multiple development efforts in the kernel also
                requires a closer coordination than userland applications do.
            </para>

            <para>
                The core utilities, known as userland, provide the interface that identifies
                FreeBSD, both user interface, shared libraries and external interfaces to
                connecting clients. Currently, 162 people are involved in userland
                development and maintenance, many being maintainers for
                their own part of the code.
                Maintainership will
                be discussed in the <xref linkend="role-maintainer"/> section.
            </para>

            <para>
                Documentation is handled by <xref linkend="sub-project-documentation"/>
                and includes all documents surrounding the
                FreeBSD project, including the web pages. There were during 2004 101
		people making commits to the FreeBSD Documentation Project.
            </para>

            <para>
                Ports is the collection of meta-data that is needed to make
                software packages build correctly on FreeBSD. An example of a port
                is the port for the web-browser Mozilla. 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. This allows automated tools to fetch, build and
                install the package. As of this writing, there are more than
                12600 ports available.
                <footnote>
                    <para>
                        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.
                    </para>
                </footnote>
                , ranging
                from web servers to games, programming languages and most of the
                application types that are in use on modern computers.

                Ports will be discussed further in the section
                <xref linkend="sub-project-ports"/>.

            </para>

        </chapter>

        <chapter id="methodology-model">
            <title>Methodology model</title>

            <section id="development-model"><title>Development model</title>

                <para>
                    There is no defined model for how people write code in
                    FreeBSD. However, Niels J&oslash;rgenssen has suggested a model of
                    how written code is integrated into the project.
                </para>

                <para>
                    <figure>
                        <title>J&oslash;rgenssen's model for change integration</title>
                        <graphic fileref="maintenance"/>
                    </figure>
                </para>

                <para>
                    The <quote>development release</quote> is the FreeBSD-CURRENT
                    ("-CURRENT") branch and the <quote>production release</quote>
                    is the FreeBSD-STABLE branch ("-STABLE")
                    <citation><xref linkend="jorgensen2001"/></citation>.
                </para>

                <para>
                    This is a model for one change, and shows that after
                    coding, developers seek community review and
                    try integrating it with their own systems. After integrating the change
                    into the development release, called FreeBSD-CURRENT, it is tested
                    by many users and developers in the FreeBSD community. After it
                    has gone through enough testing, it is merged into the production
                    release, called FreeBSD-STABLE. Unless each stage is finished
                    successfully, the developer needs to go back and make
                    modifications in the code and restart the process. To integrate a
                    change with either -CURRENT or -STABLE is called making a commit.
                </para>

                <para>
                    J&oslash;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. A
                    developer can also be working on multiple changes, so that while
                    he is waiting for review or people to test one or more of his
                    changes, he may be writing another change.
                </para>

                <para>
                    As each commit represents an increment, this is a massively
                    incremental model. The commits are in fact so frequent that
                    during one year
                    <footnote>
                        <para>
                            The period from January 1st, 2004 to December 31st, 2004 was
                            examined to find this number.
                        </para>
                    </footnote>
                    , 85427 commits were made, making a daily average of 233
                    commits.
                </para>

                <para>
                    Within the <quote>code</quote> bracket in J&oslash;rgensen's
                    figure, each programmer has his own working style and follows his
                    own development models. The bracket could very well have been
                    called <quote>development</quote> as it includes requirements
                    gathering and analysis, system and detailed design,
                    implementation and verification. However, the only
                    output from these stages is the source code or system documentation.
                </para>


                <para>
                    From a stepwise model's perspective (such as the waterfall
                    model), the other brackets can be seen as further verification
                    and system integration. This system integration is also important
                    to see if a change is accepted by the community. Up until the
                    code is committed, the developer is free to choose how much to
                    communicate about it to the rest of the project. 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. Such a merge is referred to as an MFC (Merge From Current).
                </para>

                <para>
                    It is important to notice the word <quote>change</quote>. Most
                    commits do not contain radical new features, but are maintenance
                    updates.
                </para>

                <para>
                    The only exceptions from this model are security fixes and
                    changes to features that are deprecated in the -CURRENT branch.
                    In these cases, changes can be committed directly to the -STABLE branch.
                </para>

                <para>
                    In addition to many people working on the project, there are
                    many related projects to the FreeBSD Project. These are either
                    projects developing brand new features,
                    sub-projects or projects whose outcome is incorporated into
                    FreeBSD
                    <footnote>
                        <para>
                            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.
                        </para>
                    </footnote>.
                    These projects fit into the FreeBSD Project just like regular
                    development efforts: they produce code that is integrated with
                    the FreeBSD Project. 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.
                </para>

                <para>
                    There is no standards to how design should be done, nor is
                    design collected in a centralised repository.
                    The main design is that of 4.4BSD.
                    <footnote>
                        <para>
                            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.
                        </para>
                    </footnote>

                    As design is a part of the <quote>Code</quote> bracket in
                    J&oslash;rgenssen's model, it is up to every developer or
                    sub-project how this should be done.


                    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. 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.
                </para>

            </section>

            <section id="release-branches">
                <title>Release branches</title>

                <para>
                    The releases of FreeBSD is best illustrated by a tree with many
                    branches where each major branch represents a major
                    version. Minor versions are represented by branches of the
                    major branches.
                </para>

                <para>
                    In the following release tree, arrows that follow one-another
                    in a particular direction
                    represent a branch. Boxes with full lines and diamonds represent official
                    releases. Boxes with dotted lines represent the development
                    branch at that time. Security branches are represented by ovals.
                    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.
                    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.
                </para>

                <para>
                    <figure>
                        <title>The FreeBSD release tree</title>
                        <graphic fileref="branches"/>
                    </figure>
                </para>
                <para>
                    The latest -CURRENT version
                    is always referred to as -CURRENT, while the latest -STABLE
                    release is always referred to as -STABLE. In this figure,
                    -STABLE refers to 4-STABLE while -CURRENT refers to
                    5.0-CURRENT following 5.0-RELEASE.
                    <citation><xref linkend="freebsd-releng"/></citation>
                </para>

                <para>
                    A <quote>major release</quote> is always made from the -CURRENT branch.
                    However, the -CURRENT branch does not need to fork at that point in time,
                    but can focus on stabilising. 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. When
                    -CURRENT returns to becoming a development branch, it can only be
                    followed by a major release. 5-STABLE is predicted to be forked
                    off 5.0-CURRENT at around 5.3-RELEASE. It is not until
                    5-STABLE is forked that the development branch will be branded 6.0-CURRENT.
                </para>

                <para>
                    A <quote>minor release</quote> is made from the -CURRENT branch
                    following a major release, or from the -STABLE branch.
                </para>

                <para>
                    Following and including, 4.3-RELEASE<footnote>
                        <para>
                            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.
                        </para>
                    </footnote>, when a minor release has been made, it becomes a <quote>security
                    branch</quote>. 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>
                        <para>
                            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.
                        </para>
                    </footnote>
                </para>

                <para>
                    Each update to a security branch
                    is called a <quote>patchlevel</quote>. 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. In cases where there
                    have been especially serious security flaws, an entire new release
                    can be made from a security branch. An example of this is
                    4.6.2-RELEASE.
                </para>

            </section>

            <section id="model-summary">
                <title>Model summary</title>

                <para>
                    To summarise, the development model of FreeBSD can be seen as
                    the following tree:
                </para>

                <para>
                    <figure>
                        <title>The overall development model</title>
                        <graphic fileref="freebsd-code-model"/>
                    </figure>
                </para>
                <para>
                    The tree of the FreeBSD development with ongoing development
                    efforts and continuous integration.
                </para>


                <para>
                    The tree symbolises the release versions with major versions
                    spawning new main branches and minor versions being versions of
                    the main branch. The top branch is the -CURRENT branch where all
                    new development is integrated, and the -STABLE branch is the
                    branch directly below it.
                </para>

                <para>
                    Clouds of development efforts hang over the project
                    where developers use the development models they see fit. The
                    product of their work is then integrated into -CURRENT where it
                    undergoes parallel debugging and is finally merged from -CURRENT into
                    -STABLE. Security fixes are merged from -STABLE to the security branches.
                </para>

            </section>

        </chapter>

        <chapter id="sect-hats">
            <title>Hats</title>

            <para>
                Many committers have a special area of responsibility. These
                roles are called hats.
                These hats can
                be either project roles, such as public relations officer, or
                maintainer for a certain area of the
                code. Because this is a project where people give voluntarily of
                their spare time, people with assigned hats are not always
                available. They must therefore appoint a deputy that can perform
                the hat's role in his or her absence. The other option is to have
                the role held by a group.
            </para>

            <para>
                Many of these hats are not formalised. Formalised hats have a
                charter stating the exact purpose of the hat along with its
                privileges and responsibilities. The writing of such charters is
                a new part of the project, and has thus yet to be completed for
                all hats. These hat descriptions are not such a formalisation,
                rather a summary of the role with links to the charter where
                available and contact addresses.

            </para>


            <section id="general-hats">
                <title>General Hats</title>

                <section id="role-contributor" xreflabel="Contributor">
                    <title>Contributor</title>
                    <para>
                        A Contributor contributes to the FreeBSD project either as a
                        developer, as an author, by sending problem reports, or in
                        other ways contributing to the progress of the project. A
                        contributor has no special privileges in the FreeBSD project.
                        <citation><xref linkend="freebsd-contributors"/></citation>
                    </para>
                </section>

                <section id="role-committer" xreflabel="Committer">
                    <title>Committer</title>
                    <para>
                        A person who has the required privileges to add his code or documentation to the
                        repository.
                        <!--
                        Note that there are people with commit privileges that used
                        to be committers but have not done any commits the last
                        twelve months. These are not referred to as committers. -->

                        A committer has made a commit within the past 12 months.
                        <citation><xref linkend="freebsd-bylaws"/></citation>
                        An active committer is a committer
                        who has made an average of one commit per month during that time.
                    </para>

                    <para>
                        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. However, when wanting to make
                        modifications to parts a committer has not been involved in
                        before, he/she should read the logs to see what has happened
                        in this area before, and also read the MAINTAINER file to see if
                        the maintainer of this part has any special requests on how
                        changes in the code should be made
                        <!--
                        Also, since
                        <xref linkend="sub-project-ports"/> is allowed to give commit
                        privileges without approval from core, a committer who has
                        gained his privileges through contributing to the ports
                        sub-project should be careful and
                        have his changes approved before committing anything outside
                        the ports tree.
                        -->
                    </para>
                </section>

                <section id="role-core" xreflabel="Core team">
                    <title>Core Team</title>


                    <para>
                        The core team is elected by the committers from the pool of committers
                        and serves as the board of directors of the FreeBSD project. 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.

                        As by July 1st, 2004, core consisted of 9 members.
                        Elections are held every two years.
                    </para>

                </section>

                <section id="role-maintainer" xreflabel="Maintainership">
                    <title>Maintainership</title>

                    <para>
                        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. This
                        involves proactive work aimed at stimulating
                        contributions and reactive work in reviewing commits.
                    </para>

                    <para>
                        With the FreeBSD
                        source comes the MAINTAINERS file that contains a one-line
                        summary of how each maintainer would like contributions to be
                        made. 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.
                    </para>

                    <para>
                        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.
                        This is based on the stance that maintainership should be
                        demonstrated, not declared.
                    </para>

                    <para>
                        Maintainership of a particular piece of code is a hat that
                        is not held as a group.
                    </para>



                </section>

            </section>

            <section id="official-hats">
                <title>Official Hats</title>

                <para>
                    The official hats in the FreeBSD Project are hats that are more
                    or less formalised and mainly administrative roles. They have
                    the authority and responsibility for their area. The following
                    illustration shows the responsibility lines. After this follows
                    a description of each hat, including who it is held by.
                </para>

                <para>
                    <figure>
                        <title>Overview of official hats</title>
                        <graphic fileref="hats-overview"/>
                    </figure>
                </para>

                <para>
                    All boxes consist of groups of committers, except for the
                    dotted boxes where the holders are not necessarily committers. The
                    flattened circles are sub-projects and consist of both
                    committers and non-committers of the main project.
                </para>



                <section id="role-doc-manager" xreflabel="Documentation
                    project architect">
                    <title>Documentation project manager</title>
                    <para>
                        <xref linkend="sub-project-documentation"/>
                        architect is responsible for
                        defining and following up documentation goals for the
                        committers in the Documentation project.
                    </para>

                    <para>
                        Hat held by:
                        The DocEng team <email>doceng@FreeBSD.org</email>.
                        The
                        <ulink url="http://www.freebsd.org/internal/doceng.html">
                        DocEng Charter</ulink>.
                    </para>
                </section>

                <section id="role-cvsup-coordinator" xreflabel="CVSup Mirror Site Coordinator">
                    <title>CVSup Mirror Site Coordinator</title>
                    <para>
                        The CVSup Mirror Site Coordinator coordinates all the
                        <xref linkend="role-cvsup-sitemaint"/>s to ensure that they
                        are distributing current versions of the software, that they
                        have the capacity to update themselves when major updates
                        are in progress, and making it easy for the general public
                        to find their closest CVSup mirror.
                    </para>
                    <para>
                        Hat currently held by:
                        The CVSup-master team <email>cvsup-master@FreeBSD.org</email>.
                    </para>
                </section>

                <section id="role-postmaster" xreflabel="Postmaster">
                    <title>Postmaster</title>
                    <para>
                        The Postmaster is responsible for mail being correctly
                        delivered to the committers' email address. He is 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.
                    </para>
                    <para>
                        Hat currently held by:
                        the Postmaster Team <email>postmaster@FreeBSD.org</email>.
                    </para>
                </section>

                <section id="role-release-coordination" xreflabel="Release Coordination">
                    <title>Release Coordination</title>

                    <para>
                        The responsibilities of the Release Engineering Team are
                        <itemizedlist>
                            <listitem><para>
                                    Setting, publishing and following a release schedule for
                                    official releases
                            </para></listitem>
                            <listitem><para>
                                    Documenting and formalising release engineering procedures
                            </para></listitem>
                            <listitem><para>
                                    Creation and maintenance of code branches
                            </para></listitem>
                            <listitem><para>
                                    Coordinating with the Ports and Documentation teams
                                    to have an updated set of packages and documentation
                                    released with the new releases
                            </para></listitem>
                            <listitem><para>
                                    Coordinating with the Security team so that pending
                                    releases are not affected by recently disclosed vulnerabilities.
                            </para></listitem>
                        </itemizedlist>

                        Further information about the development process is
                        available in the <xref linkend="process-release-engineering"/> section.
                    </para>

                    <para id="role-releng" xreflabel="Release Engineering Team">
                        Hat held by:
                        the Release Engineering team <email>re@FreeBSD.org</email>.
                        The
                        <ulink url="http://www.freebsd.org/releng/charter.html">
                        Release Engineering Charter</ulink>.
                    </para>
                </section>

                <section id="role-pr-cr" xreflabel="Public Relations &amp; Corporate Liaison">
                    <title>Public Relations &amp; Corporate Liaison</title>
                    <para>
                        The Public Relations &amp; Corporate Liaison's
                        responsibilities are:
                        <itemizedlist>
                            <listitem><para>
                                    Making press statements when happenings that are
                                    important to the FreeBSD Project happen.
                            </para></listitem>
                            <listitem><para>
                                    Being the official contact person for corporations that
                                    are working close with the FreeBSD Project.
                            </para></listitem>
                            <listitem><para>
                                    Take steps to promote FreeBSD within both the Open Source
                                    community and the corporate world.
                            </para></listitem>
                            <listitem><para>
                                    Handle the <quote>freebsd-advocacy</quote> mailing list.
                            </para></listitem>
                        </itemizedlist>
                    </para>

                    <para>
                        This hat is currently not occupied.
                    </para>
                </section>

                <section id="role-security-officer" xreflabel="Security Officer">
                    <title>Security Officer</title>
                    <para>
                        The Security Officer's main responsibility is to
                        coordinate information exchange with others in the
                        security community and in the FreeBSD project.

                        The Security Officer is also responsible for taking action
                        when security problems are reported and promoting proactive
                        development behaviour when it comes to security.
                    </para>
                    <para>
                        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
                        <xref linkend="role-core"/> members, receive sensitive
                        information about security issues. However, to create or
                        implement a patch, the Security Officer has the Security
                        Officer Team <email>security-team@FreeBSD.org</email> to
                        help do the work.
                    </para>
                </section>

                <section id="role-repo-manager" xreflabel="Source Repository Manager">
                    <title>Source Repository Manager</title>
                    <para>
                        The Source Repository Manager is the only one who is allowed
                        to directly modify the repository without using the
                        <xref linkend="tool-svn"/> tool.
                        It is his/her
                        responsibility to ensure that technical problems that arise in the
                        repository are resolved quickly. The source repository
                        manager has the authority to back out commits if this is
                        necessary to resolve a CVS technical problem.
                    </para>
                    <para>
                        Hat held by:
			the Source Repository Manager <email>cvs@FreeBSD.org</email>.
                    </para>
                </section>

                <section id="role-election-manager" xreflabel="Election Manager">
                    <title>Election Manager</title>
                    <para>
                        The Election Manager is responsible for the
                        <xref linkend="process-core-election"/> process. 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. Major unforeseen
                        events have to be discussed with the <xref linkend="role-core"/>
                    </para>
                    <para>
                        Hat held only during elections.
                    </para>
                </section>

                <section id="role-webmaster" xreflabel="Web site Management">
                    <title>Web site Management</title>
                    <para>
                        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. The management needs to
                        coordinate the content with
                        <xref linkend="sub-project-documentation"/> and acts as
                        maintainer for the <quote>www</quote> tree.

                    </para>
                    <para>
                        Hat held by:
                        the FreeBSD Webmasters <email>www@FreeBSD.org</email>.
                    </para>
                </section>

                <section id="role-ports-manager" xreflabel="Ports Manager">
                    <title>Ports Manager</title>
                    <para>
                        The Ports Manager acts as a liaison between
                        <xref linkend="sub-project-ports"/>
                        and the core project, and
                        all requests from the project should go to the ports manager.

                    </para>

                    <para>
                        Hat held by:
                        the Ports Management Team <email>portmgr@FreeBSD.org</email>.
                        The
                        <ulink url="http://www.freebsd.org/portmgr/charter.html">
                            Portmgr charter</ulink>.
                    </para>
                </section>

                <section id="role-standards" xreflabel="Standards">
                    <title>Standards</title>
                    <para>
                        The Standards hat is responsible for ensuring that FreeBSD
                        complies with the standards it is committed to <!-- (covered in
                        <xref linkend="standardsguidelines"/>) -->, 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.
                    </para>

                    <para>
                        Hat currently held by:
                        Garrett Wollman <email>wollman@FreeBSD.org</email>.
                    </para>
                </section>

                <section id="role-core-secretary" xreflabel="Core Secretary">
                    <title>Core Secretary</title>
                    <para>
                        The Core Secretary's main responsibility is to write drafts to
                        and publish the final Core Reports. The secretary also keeps
                        the core agenda, thus ensuring that no balls are dropped
                        unresolved.
                    </para>
                    <para>
                        Hat currently held by: &a.pgj.email;.
                    </para>
                </section>

                <section id="role-gnats" xreflabel="GNATS Administrator">
                    <title>GNATS Administrator</title>
                    <para>
                        The GNATS Administrator 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.
                    </para>
                    <para>
                        Hat currently held by:
                        the Bugmeister Team <email>bugmeister@FreeBSD.org</email>.
                    </para>
                </section>

                <section id="role-bugmeister" xreflabel="Bugmeister">
                    <title>Bugmeister</title>
                    <para>
                        The Bugmeister is the person in charge of the problem report
                        group.

                    </para>
                    <para>
                        Hat currently held by:
                        the Bugmeister Team <email>bugmeister@FreeBSD.org</email>,
                    </para>
                </section>

                <section id="role-donations" xreflabel="Donations Liaison Officer">
                    <title>Donations Liaison Officer</title>
                    <para>
                        The task of
                        the donations liaison officer is to match
                        the developers with needs with people or
                        organisations willing to make a
                        donation. The Donations Liaison Charter is
                        available
                        <ulink url="http://www.freebsd.org/donations/">here</ulink>
                    </para>
                    <para>
                        Hat held by:
                        the Donations Liaison Office <email>donations@FreeBSD.org</email>.
                    </para>
                </section>

                <section id="role-admin" xreflabel="Admin">
                    <title>Admin</title>
                    <para>
                        (Also called <quote>FreeBSD Cluster Admin</quote>)
                    </para>

                    <para>
                        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. It consists mainly of those
                        people who have physical access to the
                        servers.
                    </para>

                    <para>
                        Hat held by:
                        the Admin team <email>admin@FreeBSD.org</email>.
                    </para>

                </section>



            </section>

            <section id="proc-depend-hats">
                <title>Process dependent hats</title>

                <section id="role-problem-originator" xreflabel="Report originator">
                    <title>Report originator</title>
                    <para>
                        The person originally responsible for
                        filing a Problem Report.
                    </para>
                </section>


                <section id="role-bugbuster" xreflabel="Bugbuster">
                    <title>Bugbuster</title>
                    <para>
                        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.
                    </para>
                </section>

                <section id="role-mentor" xreflabel="Mentor">
                    <title>Mentor</title>
                    <para>
                        A mentor is a committer who takes it upon him/her to
                        introduce a new committer to the project, both in terms of
                        ensuring the new committers setup is valid,
                        that the new committer knows the available tools required in
                        his/her work and that the
                        new committer knows what is expected of him/her in terms of
                        behaviour.
                    </para>
                </section>
                <section id="role-vendor" xreflabel="Vendor">
                    <title>Vendor</title>
                    <para>
                        The person(s) or organisation whom
                        external code comes from and whom patches are sent to.
                    </para>
                </section>

                <section id="role-reviewer" xreflabel="Reviewer">
                    <title>Reviewers</title>
                    <para>
                        People on the mailing list where the request
                        for review is posted.
                    </para>
                </section>

                <section id="role-cvsup-sitemaint" xreflabel="CVSup Mirror Site
                    Admin">
                    <title>CVSup Mirror Site Admin</title>
                    <para>
                        A CVSup Mirror Site Admin has accesses to a server that he/she
                        uses to mirror the CVS repository. The admin works with the
                        <xref linkend="role-cvsup-coordinator"/> to ensure the site
                        remains up-to-date and is following the general policy of
                        official mirror sites.
                    </para>
                </section>


            </section>


        </chapter>

        <chapter id="model-processes" xreflabel="processes">
            <title>Processes</title>

            <para>
                The following section will describe the defined project
                processes. 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.
            </para>

            <section id="proc-addrem-committer">
                <title>Adding new and removing old committers</title>

                <para>
                    The Core team has the responsibility of giving and removing
                    commit privileges to contributors. This can only be done
                    through a vote on the core mailing list.

                    The ports and documentation sub-projects can give commit
                    privileges to people working on these projects, but have to
                    date not removed such privileges. <!-- ref Bruce <bmah@> -->
                </para>

                <para>
                    Normally a contributor is recommended to core by a
                    committer. For contributors or outsiders to contact
                    core asking to be a committer is not well thought of
                    and is usually rejected.

                </para>

                <para>
                    If the area of particular interest for the developer
                    potentially overlaps with other committers' area of
                    maintainership, the opinion of those maintainers is
                    sought. However, it is frequently this committer that
                    recommends the developer.
                </para>

                <para>
                    When a contributor is given committer status, he is
                    assigned a mentor. The committer who recommended the
                    new committer will, in the general case, take it upon
                    himself to be the new committers mentor.

                </para>

                <para>
                    When a contributor is given his commit bit, a <xref linkend="tool-pgp"/>-signed email is sent
                    from either <xref linkend="role-core-secretary"/>,
                    <xref linkend="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. The mentor then
                    gathers a password line, <xref linkend="tool-ssh2"/> public key and PGP key from the
                    new committer and sends them to <xref
                    linkend="role-admin"/>. When the new account is created, the
                    mentor activates the commit bit and guides the new committer
                    through the rest of the initial process.
                </para>

                <para>
                    <figure>
                        <title>Process summary: adding a new committer</title>
                        <graphic fileref="proc-add-committer"/>
                    </figure>
                </para>

                <para>
                    When a contributor sends a piece of code, the receiving
                    committer may choose to recommend that the contributor is
                    given commit privileges. If he recommends this to core,
                    they will vote on this recommendation. If they vote in
                    favour, a mentor is assigned the new committer and the new
                    committer has to email his details to the administrators
                    for an account to be created. After this, the new
                    committer is all set to make his first commit.  By
                    tradition, this is by adding his name to the committers list.
                </para>

                <para>
                    Recall that a committer is considered to be someone who
                    has committed code during the past 12
                    months. However, it is not until after 18 months of inactivity
                    have passed
                    that commit privileges are eligible to be revoked.
                    <citation><xref linkend="freebsd-expiration-policy"/></citation>
                    There are, however, no
                    automatic procedures for doing this.
                    For reactions concerning commit privileges not triggered by
                    time, see <link linkend="process-reactions">section 1.5.8</link>.
                </para>

                <para>
                    <figure>
                        <title>Process summary: removing a committer</title>
                        <graphic fileref="proc-rm-committer"/>
                    </figure>
                </para>

                <para>
                    When Core decides to clean up the committers list, they
                    check who has not made a commit for the past 18 months.
                    Committers who have not done so have their commit
                    bits revoked.
                </para>

                <para>
                    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.  In this case, it can also
                    be restored at a later time by core, should the committer ask.
                </para>

                <para>
                    Roles in this process:

                    <orderedlist>
                        <listitem><para>
                                <xref linkend="role-core"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-contributor"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-committer"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-maintainer"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-mentor"/>
                        </para></listitem>
                    </orderedlist>
                </para>

                <para>
                    <citation><xref linkend="freebsd-bylaws"/></citation>
                    <citation><xref linkend="freebsd-expiration-policy"/></citation>
                    <citation><xref linkend="freebsd-new-account"/></citation>
                </para>

            </section>

            <section id="process-cvsupmirror" xreflabel="Adding an official
                CVSup Mirror">
                <title>Adding/Removing an official CVSup Mirror</title>

                <para>
                    A <xref linkend="tool-cvsup"/> mirror is a replica of the
                    official CVSup master that contains all the up-to-date source
                    code for all the branches in the FreeBSD project, ports and
                    documentation.
                </para>

                <para>
                    Adding an official CVSup mirror starts with the potential
                    <xref linkend="role-cvsup-sitemaint"/> installing the
                    <quote>cvsup-mirror</quote> package. Having done this and
                    updated the source code with a mirror site, he now runs a
                    fairly recent unofficial CVSup mirror.
                </para>

                <para>
                    Deciding he has a stable environment, the processing
                    power, the network capacity and the
                    storage capacity to run an official mirror, he mails the
                    <xref linkend="role-cvsup-coordinator"/> who decides whether
                    the mirror should become an official mirror or not.
                </para>

                <para>
                    In making this decision, the <xref linkend="role-cvsup-coordinator"/>
                    has to determine whether that geographical area needs
                    another mirror site, if the mirror administrator has the
                    skills to run it reliably, if the network bandwidth is
                    adequate and if the master server has the capacity to server
                    another mirror.
                </para>

                <para>
                    If <xref linkend="role-cvsup-coordinator"/> decides that the
                    mirror should become an official mirror, he obtains an
                    authentication key from the mirror admin that he installs so
                    the mirror admin can update the mirror from the master server.
                </para>

                <para>
                    <figure>
                        <title>Process summary: adding a CVSup mirror</title>
                        <graphic fileref="proc-add-cvsup"/>
                    </figure>
                </para>

                <para>
                    When a CVSup mirror administrator of an unofficial mirror
                    offers to become an official mirror site, the CVSup
                    coordinator decides if another mirror is needed and if
                    there is sufficient capacity to accommodate it. If so,
                    an authorisation key is requested and the mirror is given
                    access to the main distribution site and added to the
                    list of official mirrors.
                </para>


                <para>
                    Tools used in this process:
                    <itemizedlist>
                        <listitem><para>
                                <xref linkend="tool-cvsup"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="tool-ssh2"/>
                        </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    Hats involved in this process:
                    <itemizedlist>
                        <listitem><para>
                                <xref linkend="role-cvsup-coordinator"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-cvsup-sitemaint"/>
                        </para></listitem>
                    </itemizedlist>
                </para>

            </section>

            <section id="committing">
                <title>Committing code</title>

                <para>
                    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. Committing of code can only be done
                    by a <quote>committer</quote>. Committers commit either code
                    written by themselves, code submitted to them or code
                    submitted through a <link linkend="model-pr">problem
                    report</link>.
                </para>

                <para>
                    When code is written by the developer that is non-trivial, he
                    should seek a code review from the community. This
                    is done by sending mail to the relevant list asking for
                    review. Before submitting the code for review, he should
                    ensure it compiles correctly with the entire tree and that all
                    relevant tests run. This is called <quote>pre-commit
                    test</quote>. When contributed code is received, it should be
                    reviewed by the committer and tested the same way.
                </para>

                <para>
                    When a change is committed to a part of the source that
                    has been contributed from an outside
                    <xref linkend="role-vendor"/>,
                    the maintainer should
                    ensure that the patch is contributed back to the
                    vendor. 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.
                </para>

                <para>
                    After the code has been available for review and no further
                    changes are necessary, the code is committed into the
                    development branch, -CURRENT.
                    If the change applies for
                    the -STABLE branch or the other branches as well, a
                    <quote>Merge From Current</quote> ("MFC") countdown is
                    set by the committer. After the number of days the
                    committer chose when setting the MFC have passed, an email
                    will automatically be
                    sent to the committer reminding him to commit it to the -STABLE
                    branch (and possibly security branches as well). Only security
                    critical changes should be merged to security branches.
                </para>

                <para>
                    Delaying the commit to -STABLE and other branches allows for
                    <quote>parallel debugging</quote> where the committed code is
                    tested on a wide range of configurations. This makes changes
                    to -STABLE to contain fewer faults and thus giving the branch
                    its name.
                </para>

                <para>
                    <figure>
                        <title>Process summary: A committer commits code</title>
                        <graphic fileref="proc-commit"/>
                    </figure>
                </para>

                <para>
                    When a committer has written a piece of code and
                    wants to commit it, he first needs to determine if it is
                    trivial enough to go in without prior review or if it should
                    first be reviewed by the developer community. If the code is
                    trivial or has been reviewed and the committer is not the
                    maintainer, he should consult the maintainer before
                    proceeding.
                    If the code is contributed by an outside vendor, the
                    maintainer should create a patch that is sent back to the
                    vendor. The code is then committed and the deployed by
                    the users. Should they find problems with the code, this
                    will be reported and the committer can go back to writing
                    a patch. If a vendor is affected, he can choose to
                    implement or ignore the patch.
                </para>

                <para>
                    <figure>
                        <title>Process summary: A contributor commits code</title>
                        <graphic fileref="proc-contrib"/>
                    </figure>
                </para>

                <para>
                    The difference when a contributor makes a code contribution is
                    that he submits the code through the send-pr
                    program. This report is picked up by the maintainer who
                    reviews the code and commits it.
                </para>

                <para>
                    Hats included in this process are:
                    <orderedlist>
                        <listitem><para>
                                <xref linkend="role-committer"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-contributor"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-vendor"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-reviewer"/>
                        </para></listitem>
                    </orderedlist>
                </para>

                <para>
                    <citation><xref linkend="freebsd-committer"/></citation>
                    <citation><xref linkend="jorgensen2001"/></citation>
                </para>

            </section>

            <section id="process-core-election" xreflabel="Core election">
                <title>Core election</title>

                <para>
                    Core elections are held at least every two years.
                    <footnote>
                        <para>The first Core election was held September 2000</para>
                    </footnote>
                    Nine core members are elected.  New elections are held if
                    the number of core members drops below seven. New elections can
                    also be held should at least 1/3 of the active committers demand this.
                </para>

                <para>
                    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.

                </para>

                <para>
                    Only committers can be elected into core. The candidates need
                    to submit their candidacy at least one week before the
                    election starts, but can refine their statements until the
                    voting starts. They are
                    presented in the <ulink
                        url="http://election.uk.freebsd.org/candidates.html">candidates
                    list</ulink>. When writing their election statements, the candidates
                    must answer a few standard questions submitted by the election manager.
                </para>

                <para>
                    During elections, the rule that a committer must have
                    committed during the 12 past months is followed strictly.
                    Only these committers are eligible to vote.

                </para>

                <para>
                    When voting, the committer may vote once in support of up to
                    nine nominees. The voting is done over a period of four weeks
                    with reminders being posted on <quote>developers</quote>
                    mailing list that is available to all committers.
                </para>

                <para>
                    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.
                </para>

                <para>
                    Should there be a voting tie, this will be resolved by
                    the new, unambiguously elected core members.
                </para>

                <para>
                    Votes and candidate statements are archived, but the archives
                    are not publicly available.
                </para>

                <para>
                    <figure>
                        <title>Process summary: Core elections</title>
                        <graphic fileref="proc-elections"/>
                    </figure>
                </para>

                <para>
                    Core announces the election and selects an election
                    manager. He prepares the elections, and when ready,
                    candidates can announce their candidacies through
                    submitting their statements. The committers then vote.
                    After the vote is over, the election results are
                    announced and the new core team takes office.
                </para>

                <para>
                    Hats in core elections are:
                    <itemizedlist>
                        <listitem><para>
                                <xref linkend="role-core"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-committer"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-election-manager"/>
                        </para></listitem>

                    </itemizedlist>

                </para>


                <para>
                    <citation><xref linkend="freebsd-bylaws"/></citation>
                    <citation><xref linkend="bsd-election2002"/></citation>
                    <citation><xref linkend="freebsd-election"/></citation>
                </para>
            </section>

            <section id="new-features">
                <title>Development of new features</title>

                <para>
                    Within the project there are sub-projects that are working on
                    new features. These projects are generally done by one person
                    <citation><xref linkend="jorgensen2001"/></citation>.
                    Every project is free to
                    organise development as it sees fit. However, when the project
                    is merged to the -CURRENT branch it must follow the project
                    guidelines. 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.
                </para>

                <para>
                    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.
                    The wishes that come within the responsibility of a developer
                    are given to that developer who prioritises his time between
                    the request and his wishes. A common way to do this is maintain
                    a TODO-list maintained by the project. Items that do not come within
                    someone's responsibility are collected on TODO-lists unless someone
                    volunteers to take the responsibility. All
                    requests, their distribution and follow-up are
                    handled by the <xref linkend="tool-gnats"/> tool.
                </para>

                <para>
                    Requirements analysis happens in two ways. 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. Furthermore, individual developers on
                    the sub-project will evaluate the feasibility of the requests
                    and determine the prioritisation between them. Other than archives
                    of the discussions that have taken place, no outcome is created
                    by this phase that is merged into the main project.
                </para>

                <para>
                    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 priorisation of
                    what requests to regard as requirements and following up their
                    correct implementation. However, most developers have some
                    shared vision of what issues are more important, and they can
                    ask for guidelines from the release engineering team.
                    <!-- and
                    technical review board.
   					[TODO] TRB is undefined at the moment -->
                </para>

                <para>
                    The verification phase of the project is two-fold. Before
                    committing code to the current-branch, developers request their
                    code to be reviewed by their peers. This review is for the most
                    part done by functional testing, but also code review is
                    important. When the code is committed to the branch, a broader
                    functional testing will happen, that may trigger further code
                    review and debugging should the code not behave as
                    expected. This second verification form may be regarded as
                    structural verification.
                    Although the sub-projects themselves may write formal
                    tests such as unit tests, these are usually not collected by the main
                    project and are usually removed before the code is committed to
                    the current branch.
                    <footnote>
                        <para>
                            More and more tests are however performed when
                            building the system (<quote>make
                            world</quote>). These tests are however a very new
                            addition and no systematic framework for these
                            tests have yet been created.
                        </para>

                    </footnote>
                </para>

            </section>


            <section id="model-maintenance" xreflabel="maintenance">
                <title>Maintenance</title>

                <para>

                    It is an advantage to the project to for each area of the source
                    have at least one person that knows this area well.

                    Some parts of the code have designated
                    maintainers. Others have de-facto maintainers, and some
                    parts of the system do not have
                    maintainers.

                    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.
                    <footnote>
                        <para>
                            sendmail and named are examples of code that has been merged
                            from other platforms.
                        </para>
                    </footnote>

                    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.

                </para>

                <para>
                    The main bulk of work that is put into the FreeBSD project is
                    maintenance. <citation><xref
                    linkend="jorgensen2001"/></citation>
                    has made a figure
                    showing the life cycle of changes.
                </para>

                <para>
                    <figure>
                        <title>J&oslash;rgenssen's model for change integration</title>
                        <graphic fileref="maintenance"/>
                    </figure>
                </para>

                <para>

                    Here <quote>development release</quote> refers to the -CURRENT
                    branch while <quote>production release</quote> refers to the
                    -STABLE branch. The <quote>pre-commit test</quote> 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.
                    <quote>Parallel debugging</quote> is the functional testing
                    that can trigger more review, and debugging when the code is
                    included in the -CURRENT branch.
                </para>


                <para>
                    As of this writing, there were 269 committers in the
                    project. When they commit a change to a branch, that constitutes
                    a new release. It is very common for users in the community to
                    track a particular branch. The immediate existence of a new
                    release makes the changes widely available right away and allows
                    for rapid feedback from the community. This also gives the
                    community the response time they expect on issues that are of
                    importance to them. 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.
                </para>

                <para>
                    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.

                </para>

            </section>

            <section id="model-pr">
                <title>Problem reporting</title>

                <para>
                    FreeBSD comes with a problem reporting tool called
                    <quote>send-pr</quote> that is a part of the GNATS package.
                    All users and developers are encouraged to use this tool for
                    reporting problems in software they do not maintain. Problems
                    include bug reports, feature requests, features that should be enhanced
                    and notices of new versions of external software that is included
                    in the project.
                </para>

                <para>
                    Problem reports are sent to an email address where it
                    is inserted into the GNATS maintenance database. A
                    <xref linkend="role-bugbuster"/>
                    classifies the problem and sends it to the
                    correct group or maintainer within the project. After someone
                    has taken responsibility for the report, the report is being
                    analysed. This analysis includes verifying the problem and
                    thinking out a solution for the problem. Often feedback is
                    required from the report originator or even from the FreeBSD
                    community. Once a patch for the problem is made, the
                    originator may be asked to try it out. Finally, the working patch
                    is integrated into the project, and documented if
                    applicable. It there goes through the regular maintenance
                    cycle as described in section <xref linkend="model-maintenance"/>.
                    These are the states a problem report can be in:
                    open, analyzed, feedback, patched, suspended and closed. 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.
                </para>

                <para>
                    <figure>
                        <title>Process summary: problem reporting</title>
                        <graphic fileref="proc-pr"/>
                    </figure>
                </para>

                <para>
                    A problem is reported by the report originator. It is
                    then classified by a bugbuster and handed to the correct
                    maintainer. He verifies the problem and discusses the
                    problem with the originator until he has enough
                    information to create a working patch. This patch is then
                    committed and the problem report is closed.
                </para>


                <para>
                    The roles included in this process are:
                    <orderedlist>
                        <listitem><para>
                                <xref linkend="role-problem-originator"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-maintainer"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-bugbuster"/>
                        </para></listitem>
                    </orderedlist>
                </para>

                <para>
                    <citation><xref linkend="freebsd-handle-pr"/></citation>.
                    <citation><xref linkend="freebsd-send-pr"/></citation>
                </para>

            </section>

            <section id="process-reactions" xreflabel="Reacting to misbehaviour">
                <title>Reacting to misbehaviour</title>

                <para>
                    <citation><xref linkend="freebsd-committer"/></citation> has a
                    number of rules that committers should follow. However, it
                    happens that these rules are broken. The following rules exist
                    in order to be able to react to misbehaviour. They specify what
                    actions will result in how long a suspension the committer's
                    commit privileges.

                    <itemizedlist>
                        <listitem><para>
                                Committing during code freezes without the approval of the
                                Release Engineering team - 2 days
                        </para></listitem>
                        <listitem><para>
                                Committing to a security branch without approval - 2 days
                        </para></listitem>
                        <listitem><para>
                                Commit wars - 5 days to all participating parties
                        </para></listitem>
                        <listitem><para>
                                Impolite or inappropriate behaviour - 5 days
                        </para></listitem>
                    </itemizedlist>

                    <citation><xref linkend="ref-freebsd-trenches"/></citation>
                </para>

                <para>
                    For the suspensions to be efficient, any single core member can
                    implement a suspension before discussing it on the <quote>core</quote>
                    mailing list. Repeat offenders can, with a 2/3 vote by core,
                    receive harsher penalties, including permanent removal of
                    commit privileges. (However, the latter is always viewed as a last
                    resort, due to its inherent tendency to create controversy).  All
                    suspensions are posted to the
                    <quote>developers</quote>
                    mailing list, a list available to committers only.
                </para>

                <para>
                    It is important that you cannot be suspended for making
                    technical errors. All penalties come from breaking social etiquette.
                </para>

                <para>
                    Hats involved in this process:
                    <itemizedlist>
                        <listitem><para>
                                <xref linkend="role-core"/>
                        </para></listitem>
                        <listitem><para>
                                <xref linkend="role-committer"/>
                        </para></listitem>
                    </itemizedlist>
                </para>
            </section>


            <section id="process-release-engineering" xreflabel="release engineering">
                <title>Release engineering</title>

                <para>
                    The FreeBSD project has a Release Engineering <!-- ("RE") --> 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. 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. Also, there are roles in the team responsible
                    for coordinating quality assurance <!-- ("QA") --> efforts, building a package
                    set and for having an updated set of documents.
                    When referring to the release engineer,
                    a representative for the release engineering team is
                    meant.
                </para>

                <para>
                    When a release is coming, the FreeBSD project changes shape
                    somewhat. A release schedule is made containing feature- and
                    code-freezes, release of interim releases and the final
                    release. A feature-freeze means no new features are allowed to
                    be committed to the branch without the release engineers'
                    explicit consent. Code-freeze means no changes to the code (like
                    bugs-fixes) are allowed to be committed without the release
                    engineers explicit consent. This feature- and code-freeze is
                    known as stabilising. During the release process, the release
                    engineer has the full authority to revert to older versions of
                    code and thus "back out" changes should he find that the changes
                    are not suitable to be included in the release.
                </para>

                <para>
                    There are three different kinds of releases:
                    <orderedlist>
                        <listitem><para>
                                .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
                        </para></listitem>
                        <listitem><para>
                                .X releases are releases of the -STABLE
                                branch. They are scheduled to come out every 4 months.
                        </para></listitem>
                        <listitem><para>
                                .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.

                        </para></listitem>
                    </orderedlist>

                </para>

                <para>
                    For releases of the -STABLE-branch, the release process starts 45
                    days before the anticipated
                    release date. 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. When this period is over, the code enters a 15
                    day code freeze in which only bug fixes, documentation updates,
                    security-related fixes and minor device driver changes are
                    allowed. These changes must be approved by the release engineer
                    in advance. At the beginning of the last 15 day period a release
                    candidate is created for widespread testing. Updates are less
                    likely to be allowed during this period, except for important
                    bug fixes and security updates. In this final period, all
                    releases are considered release candidates. 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 a CD-ROM images.  However, the release is not
                    considered "really released" until a <xref linkend="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>
                        <para>
                            Many commercial vendors use these images to create
                            CD-ROMs that are sold in retail outlets.
                        </para>
                    </footnote>.


                </para>

                <para>
                    The releases of the -CURRENT-branch (that is, all releases that
                    end with <quote>.0</quote>) are very similar, but with twice as
                    long timeframe. It starts 8 weeks prior to the release with
                    announcement of the release time line. Two weeks into the
                    release process, the feature freeze is initiated and performance
                    tweaks should be kept to a minimum. Four weeks prior to the
                    release, an official beta version is made available. Two weeks
                    prior to release, the code is officially branched into a new
                    version. This version is given release candidate status, and as
                    with the release engineering of -STABLE, the code freeze of the
                    release candidate is
                    hardened. However, development on the main development branch
                    can continue. Other than these differences, the release
                    engineering processes are alike.

                </para>

                <para>
                    .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 <xref linkend="role-releng"/>
                    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.
                </para>

                <para>
                    Most releases are made when a given date that has been deemed a
                    long enough time since the previous release comes. A target is
                    set for having major releases every 18 months and minor
                    releases every 4 months.

                    The user community has made it very clear that security and
                    stability cannot be sacrificed by self-imposed deadlines and
                    target release dates.

                    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.

                </para>


                <para>
                    <figure>
                        <title>Process summary: release engineering</title>
                        <graphic fileref="proc-releng"/>
                    </figure>
                </para>

                <para>
                    These are the stages in the release engineering
                    process. Multiple release candidates may be created until
                    the release is deemed stable enough to be released.
                </para>


                <para>
                    <citation><xref linkend="freebsd-releng"/></citation>
                </para>

            </section>


        </chapter>




        <chapter id="tools">
            <title>Tools</title>

            <para>
                The major support tools for supporting the development process are
                CVS, CVSup, Perforce, GNATS, Mailman and OpenSSH. Except for
                CVSup, these are externally
                developed tools. These tools are commonly used in the open source world.
            </para>

            <section id="tool-svn" xreflabel="SVN">
                <title>Subversion (SVN)</title>
                <para>Subversion (<quote>SVN</quote>)
                    is a system to handle multiple versions of text files and
                    tracking who committed what changes and why. A project lives
                    within a <quote>repository</quote> and different versions are
                    considered different <quote>branches</quote>.
                </para>
            </section>

            <section id="tool-cvsup" xreflabel="CVSup">
                <title>CVSup</title>
                <para>
                    CVSup is a software package for distributing and updating
                    collections of files across a network. It consists of a
                    client program, cvsup, and a server program, cvsupd. The
                    package is tailored specifically for distributing CVS
                    repositories, and by taking advantage of CVS' properties, it
                    performs updates much faster than traditional systems.
                </para>
            </section>

            <section id="tool-gnats" xreflabel="GNATS">
                <title>GNATS</title>
                <para>
                    GNATS is a maintenance database consisting of a set of tools to track bugs at a
                    central site. It supports the bug tracking process for sending
                    and handling bugs as well as querying and updating the database
                    and editing bug reports. The project uses one of its many client
                    interfaces, <quote>send-pr</quote>, to send
                    <quote>Problem Reports</quote> by email to the
                    projects central GNATS server. The committers have also web and
                    command-line clients available.
                </para>
            </section>

            <section id="model-mailman" xreflabel="[model, Mailman]">
                <title>Mailman</title>
                <para>
                    Mailman is a program that automates the
                    management of mailing lists. The FreeBSD Project uses it to run
                    16 general lists, 60 technical lists, 4 limited lists and 5 lists
		    with CVS commit logs. It is
                    also used for many mailing lists set up and used by other people
                    and projects in the FreeBSD community. 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. The majority of all the communication in the project goes
                    through these 85 lists
                    <citation><xref linkend="ref-bsd-handbook"/>, Appendix C</citation>.

                </para>
            </section>

            <section id="tool-perforce" xreflabel="Perforce">
                <title>Perforce</title>
                <para>
                    Perforce is a commercial software configuration management
                    system developed by Perforce
                    Systems that is available on over 50 operating systems. It
                    is a collection of clients built around the Perforce server
                    that contains the central file repository and
                    tracks the operations done upon it. The clients are both
                    clients for accessing the repository and administration of
                    its configuration.

                    <!-- REF: http://www.perforce.com/perforce/products.html  -->

                </para>
            </section>


            <section id="tool-pgp" xreflabel="PGP">
                <title>Pretty Good Privacy</title>
                <para>
                    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. A signature is used when
                    sending information out many recipients, enabling them to verify
                    that the information has not been tampered with before they
                    received it. 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.
                </para>
            </section>

            <section id="tool-ssh2" xreflabel="SSH 2">
                <title>Secure Shell</title>
                <para>
                    Secure Shell is a standard for securely logging into a remote system
                    and for executing commands on the remote system. It allows
                    other connections, called tunnels, to be established and
                    protected between the two involved systems. This standard
                    exists in two primary versions, and only version two is used
                    for the FreeBSD Project. The most common implementation of the
                    standard is OpenSSH that is a part of the project's main distribution.
                    Since its source is updated more often than FreeBSD releases,
                    the latest version is also available in the ports tree.
                </para>
            </section>

        </chapter>

        <chapter id="sub-projects">
            <title>Sub-projects</title>

            <para>
                Sub-projects are formed to reduce the amount of communication
                needed to coordinate the group of developers. When a problem
                area is sufficiently isolated, most communication would be
                within the group focusing on the problem, requiring less
                communication with the groups they communicate with than were
                the group not isolated.

            </para>

            <section id="sub-project-ports" xreflabel="The Ports Subproject">
                <title>The Ports Subproject</title>

                <para>
                    A <quote>port</quote> 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. The amount of ports have grown
                    at a tremendous rate, as shown by the following figure.
                </para>

                <para>
                    <figure id="fig-ports">
                        <title>Number of ports added between 1996 and 2005</title>
                        <graphic fileref="portsstatus"/>
                    </figure>
                </para>

                <para>
                    <xref linkend="fig-ports"/> is taken from
                    <ulink url="http://www.freebsd.org/ports/growth/status.png">
                    the FreeBSD web site</ulink>. It shows the number of ports
                    available to FreeBSD in the period 1995 to 2005. It looks
                    like the curve has first grown exponentionally, and then
                    since the middle of 2001 grown linearly.
                </para>

                <para>
                    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. 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.
                </para>

                <para>
                    Ports has its own core team with the
                    <xref linkend="role-ports-manager"/> as its leader, and this
                    team can appoint committers without FreeBSD Core's
                    approval. 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.
                </para>

                <para>
                    Unlike the main project, the ports tree is not branched. 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. 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.
                </para>

                <para>
                    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. There is neither the infrastructure
                    nor volunteer time needed to guarantee this.
                </para>

                <para>
                    For efficiency of communication, teams depending on Ports,
                    such as the release engineering team, have their own ports liaisons.
                </para>


            </section>


            <section id="sub-project-documentation" xreflabel="The FreeBSD
                Documentation Project">
                <title>The FreeBSD Documentation Project</title>

                <para>
		<!-- [TODO] - Recount, according to the statistics there were only
		              9 mainly Doc-committers in 2004. Get mailinglist data  -->
                    The FreeBSD Documentation project was started January 1995. From
                    the initial group of a project leader, four team leaders and 16
                    members, they are now a total of 44 committers. The
                    documentation mailing list has just under 300 members,
                    indicating that there is quite a large community around it.
                </para>

                <para>
                    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.
                </para>

                <para>
                    The main tasks in the Documentation project are to work on
                    current projects in the <quote>FreeBSD Documentation Set</quote>,
                    and translate the documentation to other languages.
                </para>

                <para>
                    Like the FreeBSD Project, documentation is split in the same
                    branches. This is done so that there is always an updated
                    version of the documentation for each version. Only
                    documentation errors are corrected in the security branches.
                </para>

                <para>
                    Like the ports sub-project, the Documentation project can
                    appoint documentation committers without FreeBSD Core's approval.
                    <citation><xref linkend="freebsd-doceng-charter"/></citation>.
                </para>

                <para>
                    The Documentation project has a primer. This is used both to
                    introduce new project members to the standard tools and
                    syntaxes and acts as a reference when working on the project.
                </para>

            </section>


    </chapter>

<bibliography id="bibliography">
        <title>References</title>

  <biblioentry id="brooks" xreflabel="Brooks, 1995">
    <authorgroup>
      <author><firstname>Frederick P.</firstname><surname>Brooks</surname></author>
    </authorgroup>
    <copyright><year>1975</year><year>1995</year>
      <holder>Pearson Education Limited</holder>
    </copyright>
    <isbn>0201835959</isbn>
    <publisher>
      <publishername>Addison-Wesley Pub Co</publishername>
    </publisher>
    <title>The Mythical Man-Month</title>
    <subtitle>Essays on Software Engineering, Anniversary Edition (2nd Edition)</subtitle>
  </biblioentry>

        <biblioentry id="thesis" xreflabel="Saers, 2003">
            <authorgroup>
                <author><firstname>Niklas</firstname><surname>Saers</surname></author>
            </authorgroup>
            <copyright>
                <year>2003</year>
            </copyright>
            <title>A project model for the FreeBSD Project</title>
            <subtitle>Candidatus Scientiarum thesis</subtitle>
            <bibliomisc role="url"><ulink url="http://niklas.saers.com/thesis"></ulink></bibliomisc>
        </biblioentry>


        <biblioentry id="jorgensen2001" xreflabel="J&oslash;rgensen, 2001">
            <authorgroup>
                <author><firstname>Niels</firstname><surname>J&oslash;rgensen</surname></author>
            </authorgroup>
            <copyright>
                <year>2001</year>
            </copyright>
            <title>Putting it All in the Trunk</title>
            <subtitle>Incremental Software Development in the FreeBSD Open Source Project</subtitle>
            <bibliomisc role="url"><ulink url="http://www.dat.ruc.dk/~nielsj/research/papers/freebsd.pdf"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="ref-pmbok" xreflabel="PMI, 2000">
            <authorgroup>
                <author><surname>Project Management Institute</surname></author>
            </authorgroup>
            <copyright><year>1996</year><year>2000</year>
                <holder>Project Management Institute</holder>
            </copyright>
            <isbn>1-880410-23-0</isbn>
            <publisher>
                <publishername>Project Management Institute</publishername>
                <address>
                    <street>Newtown Square</street>
                    <city>Pennsylvania</city>
                    <country>USA</country>
                </address>
            </publisher>
            <title>PMBOK Guide</title>
            <subtitle>A Guide to the Project Management Body of Knowledge,
            2000 Edition</subtitle>
        </biblioentry>



        <biblioentry id="freebsd-bylaws" xreflabel="FreeBSD, 2000A">
            <copyright><year>2002</year>
                <holder>The FreeBSD Project</holder>
            </copyright>
            <title>Core Bylaws</title>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/internal/bylaws.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-developer-handbook" xreflabel="FreeBSD, 2002A">
            <copyright><year>2002</year>
                <holder>The FreeBSD Documentation Project</holder>
            </copyright>
            <title>FreeBSD Developer's Handbook</title>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="bsd-election2002" xreflabel="FreeBSD, 2002B">
            <copyright><year>2002</year>
                <holder>The FreeBSD Project</holder>
            </copyright>
            <title>Core team election 2002</title>
            <bibliomisc role="url"><ulink url="http://election.uk.freebsd.org/candidates.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-handle-pr" xreflabel="FreeBSD, 2002C">
            <authorgroup>
                <author><firstname>Dag-Erling</firstname><surname>Sm&oslash;rgrav</surname></author>
                <author><firstname>Hiten</firstname><surname>Pandya</surname></author>
            </authorgroup>
            <copyright><year>2002</year>
                <holder>The FreeBSD Documentation Project</holder>
            </copyright>
            <publisher>
                <publishername>The FreeBSD Documentation Project</publishername>
            </publisher>
            <title>Problem Report Handling Guidelines</title>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/doc/en/articles/pr-guidelines/article.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-send-pr" xreflabel="FreeBSD, 2002D">
            <authorgroup>
                <author><firstname>Dag-Erling</firstname><surname>Sm&oslash;rgrav</surname></author>
            </authorgroup>
            <copyright><year>2002</year>
                <holder>The FreeBSD Documentation Project</holder>
            </copyright>
            <publisher>
                <publishername>The FreeBSD Documentation Project</publishername>
            </publisher>
            <title>Writing FreeBSD Problem Reports</title>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/doc/en/articles/problem-reports/article.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-committer" xreflabel="FreeBSD, 2001">
            <copyright><year>2001</year>
                <holder>The FreeBSD Documentation Project</holder>
            </copyright>
            <publisher>
                <publishername>The FreeBSD Documentation Project</publishername>
            </publisher>
            <!-- Version 1.146 -->
            <title>Committers Guide</title>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/doc/en/articles/committers-guide/article.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-releng" xreflabel="FreeBSD, 2002E">
            <authorgroup>
                <author><firstname>Murray</firstname><surname>Stokely</surname></author>
            </authorgroup>
            <copyright><year>2002</year>
                <holder>The FreeBSD Documentation Project</holder>
            </copyright>
            <!-- Version 1.42 -->
            <publisher>
                <publishername>The FreeBSD Documentation Project</publishername>
            </publisher>
            <title>FreeBSD Release Engineering</title>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/doc/en_US.ISO8859-1/articles/releng/article.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="ref-bsd-handbook" xreflabel="FreeBSD, 2003A">
            <authorgroup>
                <author><surname>The FreeBSD Documentation Project</surname></author>
            </authorgroup>
            <title>FreeBSD Handbook</title>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-contributors" xreflabel="FreeBSD, 2002F">
            <copyright><year>2002</year>
                <holder>The FreeBSD Documentation Project</holder>
            </copyright>
            <publisher>
                <publishername>The FreeBSD Documentation Project</publishername>
            </publisher>
            <title>Contributors to FreeBSD</title>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/doc/en_US.ISO8859-1/articles/contributors/article.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-election" xreflabel="FreeBSD, 2002G">
            <copyright><year>2002</year>
                <holder>The FreeBSD Project</holder>
            </copyright>
            <publisher>
                <publishername>The FreeBSD Project</publishername>
            </publisher>
            <title>Core team elections 2002</title>
            <bibliomisc role="url"><ulink url="http://election.uk.freebsd.org"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-expiration-policy" xreflabel="FreeBSD, 2002H">
            <copyright><year>2002</year>
                <holder>The FreeBSD Project</holder>
            </copyright>
            <publisher>
                <publishername>The FreeBSD Project</publishername>
            </publisher>
            <title>Commit Bit Expiration Policy</title>
            <subtitle>2002/04/06 15:35:30</subtitle>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/internal/expire-bits.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-new-account" xreflabel="FreeBSD, 2002I">
            <copyright><year>2002</year>
                <holder>The FreeBSD Project</holder>
            </copyright>
            <publisher>
                <publishername>The FreeBSD Project</publishername>
            </publisher>
            <title>New Account Creation Procedure</title>
            <subtitle>2002/08/19 17:11:27</subtitle>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/internal/new-account.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="freebsd-doceng-charter" xreflabel="FreeBSD, 2003B">
            <copyright><year>2002</year>
                <holder>The FreeBSD Documentation Project</holder>
            </copyright>
            <publisher>
                <publishername>The FreeBSD Documentation Project</publishername>
            </publisher>
            <title>FreeBSD DocEng Team Charter</title>
            <subtitle>2003/03/16 12:17</subtitle>
            <bibliomisc role="url"><ulink url="http://www.freebsd.org/internal/doceng.html"></ulink></bibliomisc>
        </biblioentry>

        <biblioentry id="ref-freebsd-trenches" xreflabel="Lehey, 2002">
            <authorgroup>
                <author><firstname>Greg</firstname><surname>Lehey</surname></author>
            </authorgroup>
            <copyright><year>2002</year>
                <holder>Greg Lehey</holder>
            </copyright>
            <publisher>
                <publishername>Greg Lehey</publishername>
            </publisher>
            <title>Two years in the trenches</title>
            <subtitle>The evolution of a software project</subtitle>
            <bibliomisc role="url"><ulink url="http://www.lemis.com/grog/In-the-trenches.pdf"></ulink></bibliomisc>
        </biblioentry>
    </bibliography>

</book>