diff --git a/en_US.ISO8859-1/articles/building-products/Makefile b/en_US.ISO8859-1/articles/building-products/Makefile
index beae7b5352..7ca6b11b43 100644
--- a/en_US.ISO8859-1/articles/building-products/Makefile
+++ b/en_US.ISO8859-1/articles/building-products/Makefile
@@ -1,20 +1,20 @@
#
# $FreeBSD$
#
# Article: Building products using FreeBSD
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.sgml
-IMAGES_EN= freebsd-branches.eps
+IMAGES_EN= freebsd-branches.pic freebsd-organization.pic
URL_RELPREFIX?= ../../../..
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/en_US.ISO8859-1/articles/building-products/article.sgml b/en_US.ISO8859-1/articles/building-products/article.sgml
index b7c0b13f35..6db6b84c53 100644
--- a/en_US.ISO8859-1/articles/building-products/article.sgml
+++ b/en_US.ISO8859-1/articles/building-products/article.sgml
@@ -1,997 +1,1006 @@
%articles.ent;
]>
Building Products with FreeBSDJosephKoshyThe FreeBSD Projectjkoshy@FreeBSD.org$FreeBSD$
&tm-attrib.freebsd;
&tm-attrib.general;
AbstractThe FreeBSD project is a worldwide, voluntary, and
collaborative project developing a portable and high-quality
operating system. The FreeBSD project distributes the source
code for its product under a liberal license, with the
intention of encouraging the use of its code. Collaborating
with the FreeBSD project can help organizations reduce their
time to market, reduce engineering costs and improve their
product quality.This article examines the issues in using FreeBSD code in
appliances and software products. It highlights the
characteristics of FreeBSD that make it an excellent substrate
for product development. The article concludes by suggesting a
few best practices for organizations
collaborating with the FreeBSD project.IntroductionFreeBSD today is well-known as a high-performance server
operating system. It is deployed on millions of web servers and
internet-facing hosts worldwide. FreeBSD code also forms an
integral part of many products, ranging from appliances such as
network routers, firewalls, and storage devices, to personal
computers. Portions of FreeBSD have also been used in
commercial shrink-wrapped software (see
).In this article we look at the FreeBSD project as a software
engineering resource—as a collection of building blocks
and processes which you can use to build products.While FreeBSD's source is distributed freely to the public,
to fully enjoy the benefits of the project's work, organizations
need to collaborate with the project. In
subsequent sections of this article we discuss effective means
of collaboration with the project and the pitfalls that need to
be avoided while doing so.Target AudienceThis document would be of interest to the following broad
groups of people:Decision makers in product companies looking at
ways to improve their product quality, reduce their time
to market and lower engineering costs in the long
term.Technology consultants looking for best-practices
in leveraging open-source.Industry observers interested in understanding the
dynamics of open-source projects.Software developers seeking to use FreeBSD and
looking for ways to contribute back.Article GoalsAfter reading this article you should have:An understanding of the goals of the FreeBSD
Project and its organizational structure.An overview of the available technology in the
project.An understanding of its development model and
release engineering processes.An understanding of how conventional corporate
software development processes differ from that used in
the FreeBSD project.Awareness of the communication channels used by the
project and the level of transparency you can
expect.Awareness of optimal ways of working with the
project—how best to reduce engineering costs,
improve time to market, manage security vulnerabilities,
and preserve future compatibility with your product as the
FreeBSD project evolves.Article StructureThe rest of the article is structured as follows: introduces the
FreeBSD project, explores its organizational structure,
key technologies and release engineering
processes. describes
ways to collaborate with the FreeBSD project. It examines
common pitfalls encountered by corporates working with
voluntary projects like FreeBSD. concludes.FreeBSD as a set of building blocksFreeBSD makes an excellent foundation on which to build
products:FreeBSD source code is distributed under a liberal
BSD license facilitating its adoption in commercial products
Mon2005 with the minimum of hassle.The FreeBSD project has excellent engineering
practices that can be leveraged.The project offers exceptional transparency into its
workings, allowing organizations using its code to plan
effectively for the future.The culture of the FreeBSD project, carried over from
the Computer Science Research Group at The University of
California, Berkeley, fosters high-quality work. Some
features in FreeBSD define the state of the art.For organizations, the benefits of using FreeBSD
components in their products include a shorter time to market,
lower development costs and lower development risks. Building with FreeBSDHere are a few ways organizations have used
FreeBSD:As an upstream source for tested code for libraries
and utilities.By being downstream of the project,
organizations leverage the new features, bug fixes and
testing that the upstream code receives.As an embedded OS (for example, for an OEM router
and firewall device). In this model, organizations use a
customized FreeBSD kernel and application program set
along with a proprietary management layer for their
device. OEMs benefit from new hardware support being added
by the FreeBSD project upstream, and from the testing that
the base system receives.FreeBSD ships with a self-hosting development
environment that allows easy creation of such
configurations.As a Unix compatible environment for the management
functions of high-end storage and networking devices,
running on a separate processor 'blade'.FreeBSD provides the tools for creating dedicated
OS and application program images. Its implementation of
a BSD unix API is mature and tested. FreeBSD can also
provide a stable cross-development environment for the
other components of the high-end device.As a vehicle to get widespread testing and support
from a worldwide team of developers for non-critical
intellectual property.In this model, organizations contribute useful
infrastructural frameworks to the FreeBSD project (for
example, see &man.netgraph.3;). The widespread
exposure that the code gets helps to quickly identify
performance issues and bugs. The involvement of
top-notch developers also leads to useful extensions to
the infrastructure that the contributing organization also
benefits from.As a development environment supporting
cross-development for embedded OSes like RTEMS and eCOS.There are many full-fledged development environments
in the 13,000-strong collection of applications ported and
packaged with FreeBSD.As a way to support a Unix-like API in an otherwise
proprietary OS, increasing its palatability for
application developers.Here parts of FreeBSD's kernel and application
programs are ported to run alongside
other tasks in the proprietary OS. The availability of a
stable and well tested Unix API
implementation can reduce the effort needed to port
popular applications to the proprietary OS. As FreeBSD
ships with high-quality documentation for its internals
and has effective vulnerability management and release
engineering processes, the costs of keeping upto-date are
kept low.TechnologiesThere are a large number of technologies supported by the
FreeBSD project. A selection of these are listed
below:A complete system that can cross-host itself for
the following architectures: alpha, amd64, ia64, i386,
sparc64, powerpc (see &man.build.7;).Support for the following technologies, protocols
and standards:
ATA, ATAPI,
ATM, Bluetooth,
CAM, CardBus,
DHCP, DNS,
EISA,
Ethernet, FDDI,
Fibre Channel, GPIB, IEEE 1394, IPv4,
IPv6, IPSEC,
IPX, ISDN,
MAC, NIS,
NFS, OpenSSH, OPIE,
PAM, PCI,
PCMCIA, POSIX,
PnP, RAID,
RPC, SATA,
SCSI, SMB,
TCP, USB,
VESA, VLAN,
VLB,
WebNFS.A modular symmetric multiprocessing capable kernel,
with loadable kernel modules and a flexible and easy to
use configuration system.Support for emulation of
Linux and SVR4 binaries at near
machine speeds. Support for binary
Windows (NDIS)
network drivers.Libraries for many programming tasks: archivers,
FTP and HTTP support, thread support, in addition to a
full POSIX like programming
environment.Advanced security features: Mandatory Access
Control (&man.mac.9;), jails (&man.jail.2;),
ACLs, and in-kernel
cryptographic device support.Advanced networking features: firewall-ing, QoS
management, high-performance TCP/IP networking with
support for many advanced features.FreeBSD's in-kernel Netgraph (&man.netgraph.4;)
framework allows kernel networking modules to be connected
together in flexible ways.Support for advanced storage technologies: Fibre
Channel, SCSI, software and hardware
RAID, ATA and
SATA.FreeBSD supports a number of filesystems, and its
native UFS2 filesystem supports soft updates, snapshots and
very large filesystem sizes (16TB per filesystem)
McKu1999.FreeBSD's in-kernel GEOM (&man.geom.4;)
framework allows kernel storage modules to be
composed in flexible ways.Over 13,000 ported applications, both commercial
and open-source, managed via the FreeBSD ports
collection.Organizational StructureFreeBSD's organizational structure is
non-hierarchical.There are essentially two kinds of contributors to
FreeBSD, general users of FreeBSD, and developers with write
access (known as committers in the
jargon) to the source base.There are many thousands of contributors in the first
group; the vast majority of contributions to FreeBSD come from
individuals in this group. Commit rights (write access) to
the repository are granted to individuals who contribute
consistently to the project. Commit rights come with
additional responsibilities, and new committers are assigned
mentors to help them learn the ropes.
+
+ FreeBSD Organization
+
+
+
+
+
+
+
Conflict resolution is performed by a nine member
Core Team that is elected from the group of
committers.FreeBSD does not have corporate committers.
Individual committers are required to take responsibility for
the changes they introduce to the code. The FreeBSD Committer's
guideComGuide documents the
rules and responsibilities for committers.FreeBSD's project model is examined in detail in
Nik2005.FreeBSD Release Engineering ProcessesFreeBSD's release engineering processes play a major role
in ensuring that its released versions are of a high quality.
At any point of time, FreeBSD's volunteers support multiple
code lines ():New features and disruptive code enters on the
development branch, also known as the
-CURRENT branch.-STABLE branches are code
lines that are branched from HEAD at regular intervals.
Only tested code is allowed onto a -STABLE branch. New
features are allowed once they have been tested and
stabilized in the -CURRENT branch.-RELEASE branches are
maintained by the FreeBSD security team. Only bug fixes
for critical issues are permitted onto -RELEASE
branches.FreeBSD Release BranchesCode lines are kept alive for as long as there is user and
developer interest in them.Machine architectures are grouped into
tiers; Tier 1
architectures are fully supported by the project's release
engineering and security teams, Tier 2
architectures are supported on a best effort basis, and
experimental architectures comprise Tier
3. The list of supported
architectures is part of the FreeBSD documentation
collection.The release engineering team publishes a road map for future
releases of FreeBSD on the project's web site. The dates laid
down in the road map are not deadlines; FreeBSD is released
when its code and documentation are ready.FreeBSD's release engineering processes are described in
RelEngDoc.Collaborating with FreeBSDOpen-source projects like FreeBSD offer finished code of a
very high quality Cov2005. Previous
studies have examined the effect of source code availability on
software development Com2004.While access to quality source code can reduce the cost of
initial development, in the long-term the costs of managing
change begin to dominate. As computing environments change over
the years and new security vulnerabilities are discovered, your
product too needs to change and adapt. Using open-source code is
best viewed not as a one-off activity, but as an
ongoing process. The best projects to
collaborate with are the ones that are
live; i.e., with an active community, clear
goals and a transparent working style.FreeBSD has an active developer community around it.
At the time of writing there are many thousands of
contributors from every populated continent in the world and
over 300 individuals with write access to the project's
source repositories.The goals of the FreeBSD project are
Hub1994:
To develop a high-quality operating system for
popular computer hardware, and,To make our work available to all under a liberal
license.FreeBSD enjoys an open and transparent working
culture. Nearly all discussion in the project happens by
email, on public mailing
lists that are also archived for posterity. The
project's policies are documented
and maintained under revision control. Participation in the
project is open to all.Understanding FreeBSD cultureTo be able to work effectively with the FreeBSD project,
you need to understand the project's culture.Volunteer driven projects operate under different rules
than for-profit corporates. A common mistake that companies
make when venturing into the open-source world is that of
underplaying these differences.MotivationMost contributions to FreeBSD are done voluntarily
without monetary rewards entering the picture. The factors
that motivate individuals are complex, ranging from
altruism, to an interest in solving the kinds of problems
that FreeBSD attempts to solve. In this environment,
elegance is never optionalNor1993.The Long Term ViewFreeBSD traces its roots back nearly twenty years to the
work of the Computer Science Research Group at the
University of California Berkeley.FreeBSD's source
repository contains a history of the project
since its inception, and there are CDROMs
available that contain earlier code from the
CSRG. A number of the original CSRG developers remain
associated with the project.The project values long-term perspectives
Nor2001. A frequent acronym encountered
in the project is DTRT, which stands for
Do The Right Thing.Development ProcessesComputer programs are tools for communication: at one
level programmers communicate their intentions using a
precise notation to a tool (a compiler) that translates
their instructions to executable code. At another level,
the same notation is used for communication of intent
between two programmers.Formal specifications and design documents are seldom used
in the project. Clear and well-written code and well-written
change logs () are used in
their place. FreeBSD development happens by rough
consensus and running codeCarp1996.A sample change log entry
bde 2005-10-29 16:34:50 UTC
FreeBSD src repository
Modified files:
lib/msun/src e_rem_pio2f.c
Log:
Use double precision to simplify and optimize arg reduction for small
and medium size args too: instead of conditionally subtracting a float
17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always
subtract a double 33+53 bit one. The float version is now closer to
the double version than to old versions of itself — it uses the same
33+53 bit approximation as the simplest cases in the double version,
and where the float version had to switch to the slow general case at
|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the
double version.
This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and
2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.
Revision Changes Path
1.14 +22 -97 src/lib/msun/src/e_rem_pio2f.c
Communication between programmers is enhanced by the
use of a common coding standard &man.style.9;.Communication ChannelsFreeBSD's contributors are spread across the world.
Email (and to a lesser extent, IRC) is the preferred means
of communication in the project.Best Practices for collaborating with the FreeBSD
projectWe now look at a few best practices for making the best
use of FreeBSD in product development.Plan for the long termSetup processes that help in tracking the development of
FreeBSD. For example:Track FreeBSD source codeThe project makes it easy to mirror its CVS
repository using CVSup. Having
the complete history of the source is useful when
debugging complex problems and offers valuable insight
into the intentions of the original developers. Use a
capable source control system that allows you to
easily merge changes between the upstream FreeBSD code
base and your own in-house code. shows a portion of
an annotated listing of the file referenced by the
change log in . The
ancestry of each line of the source is clearly visible.
Annotated listings showing the history of every file
that is part of FreeBSD are available on the
web.An annotated source listing generated using cvs annotate
#LINE #REV #WHO #DATE #TEXT
62 1.1 (jkh 19-Aug-94): int32_t __ieee754_rem_pio2f(float x, float *y)
63 1.1 (jkh 19-Aug-94): {
64 1.14 (bde 29-Oct-05): double z,w,t,r,fn;
65 1.13 (bde 29-Oct-05): double tx[3];
66 1.14 (bde 29-Oct-05): int32_t e0,i,nx,n,ix,hx;
67 1.1 (jkh 19-Aug-94):
68 1.1 (jkh 19-Aug-94): GET_FLOAT_WORD(hx,x);
69 1.1 (jkh 19-Aug-94): ix = hx&0x7fffffff;
70 1.1 (jkh 19-Aug-94): if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */
71 1.1 (jkh 19-Aug-94): {y[0] = x; y[1] = 0; return 0;}
72 1.14 (bde 29-Oct-05): /* 33+53 bit pi is good enough for special and medium size cases */
73 1.2 (bde 07-Apr-95): if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */
74 1.14 (bde 29-Oct-05): if(hx>0) {
75 1.15 (bde 06-Nov-05): z = x - pio2;
76 1.15 (bde 06-Nov-05): n = 1;
77 1.15 (bde 06-Nov-05): } else {
78 1.15 (bde 06-Nov-05): z = x + pio2;
79 1.15 (bde 06-Nov-05): n = 3;
80 1.9 (bde 08-Oct-05): }
81 1.15 (bde 06-Nov-05): y[0] = z;
82 1.15 (bde 06-Nov-05): y[1] = z - y[0];
83 1.15 (bde 06-Nov-05): return n;
84 1.15 (bde 06-Nov-05): }
85 1.15 (bde 06-Nov-05): if(ix<0x407b53d1) { /* |x| < 5*pi/4, special case with n=+-2 */
Use a gatekeeperAppoint a gatekeeper to
monitor FreeBSD development, to keep an eye out for
changes that could potentially impact your
products.Report bugs upstreamIf you notice bug in the FreeBSD code that you are
using, file a bug
report. This step helps ensure that you do
not have to fix the bug the next time you take a code
drop from upstream.Leverage FreeBSD's release engineering effortsUse code from a -STABLE development branch of
FreeBSD. These development branches are formally
supported by FreeBSD's release engineering and security
teams and comprise of tested code.
Donate code to reduce costsA major proportion of the costs associated with
developing products is that of doing maintenance. By
donating non-critical code to the project, you benefit
by having your code see much wider exposure than it
would otherwise get. This in turn leads to more bugs
and security vulnerabilities being flushed out and
performance anomalies being identified and fixed.
Get support effectivelyFor products with tight deadlines, it is
recommended that you hire or enter into a consulting
agreement with a developer or firm with FreeBSD
experience. The &a.jobs; is a useful communication
channel to find talent. The FreeBSD project maintains a
gallery
of consultants and consulting firms
undertaking FreeBSD work. The BSD
Certification Group offers certification for
all the major BSD derived OSes.For less critical needs, you can ask for help on
the project
mailing lists. A useful guide to follow when
asking for help is given in
Ray2004.
Publicize your involvementYou are not required to publicize your use of
FreeBSD, but doing so helps both your effort as well as
that of the project.Letting the FreeBSD community know that your
company uses FreeBSD helps improve your chances of
attracting high quality talent. A large roster of
support for FreeBSD also means more mind share for it
among developers. This in turn yields a healthier
foundation for your future.Support FreeBSD developersSometimes the most direct way to get a desired
feature into FreeBSD is to support a developer who is
already looking at a related problem. Help can range
from hardware donations to direct financial assistance.
In some countries, donations to the FreeBSD project
enjoy tax benefits. The project has a dedicated donations liaison
to assist donors. The project also maintains a web page
where developers list their
needs.
As a policy the FreeBSD project acknowledges
all contributions received on its web site.ConclusionThe FreeBSD project's goals are to create and give away the
source code for a high-quality operating system. By working
with the FreeBSD project you can reduce development costs and
improve your time to market in a number of product development
scenarios.We examined the characteristics of the FreeBSD project that
make it an excellent choice for being part of an organization's
product strategy. We then looked at the prevailing culture of
the project and examined effective ways of interacting with its
developers. The article concluded with a list of best-practices
that could help organizations collaborating with the
project.Carp1996The
Architectural Principles of the InternetB.CarpenterThe Internet Architecture Board1996Com2004How
is Open-Source Affecting Software
Development?DiomidisSpinellisClemensSzyperskiIEEE ComputerJan/Feb 2004IEEE Computer SocietyComGuideCommitter's
GuideThe FreeBSD Project2005Cov2005Coverity
study on kernel security holes in Linux and FreeBSDCoverity Inc.2005Hub1994Contributing
to the FreeBSD ProjectJordanHubbard1994—2005The FreeBSD ProjectMcKu1999Soft
Updates: A Technique for Eliminating Most Synchronous Writes
in the Fast FilesystemKirkMcKusickGregoryGangerUSENIX Annual Technical Conference1999Mon2005Why you should
use a BSD style license for your Open Source
ProjectBruceMontagueThe FreeBSD Project2005Nik2005A
project model for the FreeBSD ProjectNiklasSaers2005The FreeBSD ProjectNor1993Tutorial
on Good Lisp Programming StylePeterNorvigKentPitman1993Nor2001Teach
Yourself Programming in Ten YearsPeterNorvig2001Ray2004How
to ask questions the smart wayEric StevenRaymond2004RelEngDocFreeBSD Release
EngineeringMurrayStokely2001The FreeBSD Project
diff --git a/share/images/articles/building-products/freebsd-branches.eps b/share/images/articles/building-products/freebsd-branches.eps
deleted file mode 100644
index 73e02ec415..0000000000
--- a/share/images/articles/building-products/freebsd-branches.eps
+++ /dev/null
@@ -1,262 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: freebsd-branches.fig
-%%Creator: fig2dev Version 3.2 Patchlevel 4
-%%CreationDate: Wed Nov 9 20:55:25 2005
-%%For: koshy@orthanc (Joseph Koshy)
-%%BoundingBox: 0 0 351 169
-%%Magnification: 1.0000
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-
-end
-save
-newpath 0 169 moveto 0 0 lineto 351 0 lineto 351 169 lineto closepath clip newpath
--13.5 183.6 translate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
- bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
- 4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Bold /Times-Bold-iso isovec ReEncode
-/Helvetica-Oblique /Helvetica-Oblique-iso isovec ReEncode
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-
-$F2psBegin
-10 setmiterlimit
-0 slj 0 slc
- 0.06000 0.06000 sc
-%
-% Fig objects follow
-%
-%
-% here starts figure with depth 50
-/Times-Roman-iso ff 180.00 scf sf
-3690 1860 m
-gs 1 -1 sc (6.0-REL) col13 sh gr
-% Polyline
-7.500 slw
-gs clippath
-2460 1807 m 2507 1845 l 2601 1727 l 2503 1802 l 2554 1689 l cp
-eoclip
-n 2793 1440 m
- 2493 1815 l gs col0 s gr gr
-
-% arrowhead
-n 2554 1689 m 2503 1802 l 2601 1727 l 2554 1689 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-5161 2055 m 5207 2017 l 5112 1899 l 5165 2012 l 5066 1937 l cp
-eoclip
-n 4387 1050 m
- 5175 2025 l gs col0 s gr gr
-
-% arrowhead
-n 5066 1937 m 5165 2012 l 5112 1899 l 5066 1937 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-5715 1080 m 5715 1020 l 5564 1020 l 5684 1050 l 5564 1080 l cp
-eoclip
-n 300 1050 m
- 5700 1050 l gs col0 s gr gr
-
-% arrowhead
-n 5564 1080 m 5684 1050 l 5564 1020 l 5564 1080 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-1936 3030 m 1982 2992 l 1887 2874 l 1940 2987 l 1841 2912 l cp
-eoclip
-n 375 1050 m
- 1950 3000 l gs col0 s gr gr
-
-% arrowhead
-n 1841 2912 m 1940 2987 l 1887 2874 l 1841 2912 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-951 2550 m 998 2588 l 1092 2470 l 994 2545 l 1045 2432 l cp
-eoclip
-n 1284 2183 m
- 984 2558 l gs col0 s gr gr
-
-% arrowhead
-n 1045 2432 m 994 2545 l 1092 2470 l 1045 2432 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-417 1867 m 464 1905 l 558 1787 l 460 1862 l 511 1749 l cp
-eoclip
-n 750 1500 m
- 450 1875 l gs col0 s gr gr
-
-% arrowhead
-n 511 1749 m 460 1862 l 558 1787 l 511 1749 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-3285 2857 m 3332 2895 l 3426 2777 l 3328 2852 l 3379 2739 l cp
-eoclip
-n 3618 2490 m
- 3318 2865 l gs col0 s gr gr
-
-% arrowhead
-n 3379 2739 m 3328 2852 l 3426 2777 l 3379 2739 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-1326 2996 m 1373 3034 l 1467 2916 l 1369 2991 l 1420 2878 l cp
-eoclip
-n 1659 2629 m
- 1359 3004 l gs col0 s gr gr
-
-% arrowhead
-n 1420 2878 m 1369 2991 l 1467 2916 l 1420 2878 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-4304 1718 m 4351 1756 l 4445 1638 l 4347 1713 l 4398 1600 l cp
-eoclip
-n 4637 1351 m
- 4337 1726 l gs col0 s gr gr
-
-% arrowhead
-n 4398 1600 m 4347 1713 l 4445 1638 l 4398 1600 l cp gs 0.00 setgray ef gr col0 s
-/Times-Bold-iso ff 270.00 scf sf
-300 450 m
-gs 1 -1 sc (FreeBSD Release Branches) col12 sh gr
-/Helvetica-Oblique-iso ff 180.00 scf sf
-5100 1800 m
-gs 1 -1 sc (6-STABLE) col1 sh gr
-/Helvetica-Oblique-iso ff 180.00 scf sf
-5100 975 m
-gs 1 -1 sc (-CURRENT) col1 sh gr
-/Helvetica-Oblique-iso ff 180.00 scf sf
-3975 2700 m
-gs 1 -1 sc (5-STABLE) col1 sh gr
-/Helvetica-Oblique-iso ff 180.00 scf sf
-1725 2550 m
-gs 1 -1 sc (4-STABLE) col1 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-570 3060 m
-gs 1 -1 sc (4.11-REL) col13 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-225 2625 m
-gs 1 -1 sc (4.10-REL) col13 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-285 1695 m
-gs 1 -1 sc (4.0) col13 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-1815 1905 m
-gs 1 -1 sc (5.3-REL) col13 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-2640 2880 m
-gs 1 -1 sc (5.4-REL) col13 sh gr
-% Polyline
-gs clippath
-4036 3030 m 4082 2992 l 3987 2874 l 4040 2987 l 3941 2912 l cp
-eoclip
-n 2475 1050 m
- 4050 3000 l gs col0 s gr gr
-
-% arrowhead
-n 3941 2912 m 4040 2987 l 3987 2874 l 3941 2912 l cp gs 0.00 setgray ef gr col0 s
-% here ends figure;
-$F2psEnd
-rs
-showpage
diff --git a/share/images/articles/building-products/freebsd-branches.fig b/share/images/articles/building-products/freebsd-branches.fig
deleted file mode 100644
index 0d65883282..0000000000
--- a/share/images/articles/building-products/freebsd-branches.fig
+++ /dev/null
@@ -1,51 +0,0 @@
-#FIG 3.2
-# $FreeBSD$
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 2475 1050 4050 3000
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 2793 1440 2493 1815
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 4387 1050 5175 2025
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 300 1050 5700 1050
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 375 1050 1950 3000
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 1284 2183 984 2558
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 750 1500 450 1875
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 3618 2490 3318 2865
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 1659 2629 1359 3004
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 0 2
- 1 1 1.00 60.00 120.00
- 4637 1351 4337 1726
-4 0 12 50 -1 2 18 0.0000 4 195 3195 300 450 FreeBSD Release Branches\001
-4 0 1 50 -1 17 12 0.0000 4 135 885 5100 1800 6-STABLE\001
-4 0 1 50 -1 17 12 0.0000 4 135 945 5100 975 -CURRENT\001
-4 0 1 50 -1 17 12 0.0000 4 135 885 3975 2700 5-STABLE\001
-4 0 1 50 -1 17 12 0.0000 4 135 885 1725 2550 4-STABLE\001
-4 0 13 50 -1 0 12 0.0000 4 135 720 570 3060 4.11-REL\001
-4 0 13 50 -1 0 12 0.0000 4 135 720 225 2625 4.10-REL\001
-4 0 13 50 -1 0 12 0.0000 4 135 225 285 1695 4.0\001
-4 0 13 50 -1 0 12 0.0000 4 135 630 1815 1905 5.3-REL\001
-4 0 13 50 -1 0 12 0.0000 4 135 630 2640 2880 5.4-REL\001
-4 0 13 50 -1 0 12 0.0000 4 135 630 3690 1860 6.0-REL\001
diff --git a/share/images/articles/building-products/freebsd-branches.pic b/share/images/articles/building-products/freebsd-branches.pic
new file mode 100644
index 0000000000..eb56b4e79b
--- /dev/null
+++ b/share/images/articles/building-products/freebsd-branches.pic
@@ -0,0 +1,36 @@
+.\"
+.\" $FreeBSD$
+.\"
+.\" Release branch structure
+.\"
+.PS
+define majorrelarrow { arrow down .75 right .75 }
+define majorrelname { box invisible "\f(HO$1\fP" outline "blue" with .c \
+ at last arrow .end + (.3,.15) }
+define minorrelarrow { arrow down .25 left .25 with .start at $2 \
+ <$1.start,$1.end>; box invisible "\fB$3\fP" outline "green4" with .c \
+ at last arrow .end + (-.15,.02) }
+right
+
+# Arrow for CVS HEAD
+H: arrow 4.5
+ box invisible "\f(HO-CURRENT\fP" outline "blue" with .c at last arrow .end + (0,.1)
+
+# Releng 4
+R4: majorrelarrow with .start at H .start + (.1,0)
+ majorrelname(4-STABLE)
+ minorrelarrow(R4,.1,4.0)
+ minorrelarrow(R4,.3,4.1)
+ minorrelarrow(R4,.66,4.11)
+ box invisible "..." at .45 + (-.125,-.125)
+# Releng 5
+R5: majorrelarrow with .start at R4 .start + (1.75,0)
+ majorrelname(5-STABLE)
+ minorrelarrow(R5,.25,5.3)
+ minorrelarrow(R5,.66,5.4)
+
+# Releng 6
+R6: majorrelarrow with .start at R5 .start + (1.75,0)
+ majorrelname(6-STABLE)
+ minorrelarrow(R6,.25,6.0)
+.PE
\ No newline at end of file
diff --git a/share/images/articles/building-products/freebsd-organization.pic b/share/images/articles/building-products/freebsd-organization.pic
new file mode 100644
index 0000000000..c60dc8a0e1
--- /dev/null
+++ b/share/images/articles/building-products/freebsd-organization.pic
@@ -0,0 +1,36 @@
+.\"
+.\" $FreeBSD$
+.\"
+.\" A representation of the organizational structure of the FreeBSD project.
+.\"
+.PS
+define bold { "\fB\s+1$1\s0\fP" }
+define italic { "\fI\s+1$1\s0\fP" }
+define fixed { "\f(CW$1\fP" }
+# users
+U: ellipse width 4.5 height 2.75 shaded "pink"
+
+# committers
+C: ellipse width 3.75 height 1.80 shaded "sienna" with .c at U.c + \
+ (-.1,-.25)
+
+# core
+O: ellipse width .85 height .65 shaded "gold" with .c at C.c + (-1,-.15) \
+ bold(Core Team) bold( (9) );
+
+# "sources" box
+S: box width 1.1 height .9 shaded "green4" with .c at C.c + (.75,-.15);
+box same invisible bold(Source Trees) ljust fixed(src/ ports/) ljust \
+ fixed(doc/ www/) ljust with .c at S.w + (.1,0);
+
+# label the "user" and "committer" ellipses
+box invisible bold(FreeBSD Users) bold( (many) ) with .n at U .n + \
+ (-0.2,-.2);
+box invisible bold(FreeBSD Committers) bold( (340+) ) with .n at C .n + \
+ (-.4,-0.2);
+
+# draw the arrow representing 'contributions' to the source base
+down
+arrow 1 thickness 1.5 color "forestgreen" with .start at S.n + (0,1.05);
+box invisible with .w at last arrow .center + (.1,.1) italic(contributions);
+.PE
\ No newline at end of file