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 FreeBSD Joseph Koshy The FreeBSD Project
jkoshy@FreeBSD.org
$FreeBSD$ &tm-attrib.freebsd; &tm-attrib.general; Abstract The 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.
Introduction FreeBSD 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 Audience This 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 Goals After 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 Structure The 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 blocks FreeBSD 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 FreeBSD Here 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. Technologies There 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 Structure FreeBSD'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 guide ComGuide documents the rules and responsibilities for committers. FreeBSD's project model is examined in detail in Nik2005.
FreeBSD Release Engineering Processes FreeBSD'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 Branches
Code 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 FreeBSD Open-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 culture To 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. Motivation Most 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 optional Nor1993. The Long Term View FreeBSD 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 Processes Computer 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 code Carp1996.
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 Channels FreeBSD'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 project We now look at a few best practices for making the best use of FreeBSD in product development. Plan for the long term Setup processes that help in tracking the development of FreeBSD. For example: Track FreeBSD source code The 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 <command>cvs annotate</command> #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 gatekeeper Appoint a gatekeeper to monitor FreeBSD development, to keep an eye out for changes that could potentially impact your products. Report bugs upstream If 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 efforts Use 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 costs A 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 effectively For 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 involvement You 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 developers Sometimes 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.
Conclusion The 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. Carp1996 The Architectural Principles of the Internet B. Carpenter The Internet Architecture Board 1996 Com2004 How is Open-Source Affecting Software Development? Diomidis Spinellis Clemens Szyperski IEEE Computer Jan/Feb 2004 IEEE Computer Society ComGuide Committer's Guide The FreeBSD Project 2005 Cov2005 Coverity study on kernel security holes in Linux and FreeBSD Coverity Inc. 2005 Hub1994 Contributing to the FreeBSD Project Jordan Hubbard 1994—2005 The FreeBSD Project McKu1999 Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem Kirk McKusick Gregory Ganger USENIX Annual Technical Conference 1999 Mon2005 Why you should use a BSD style license for your Open Source Project Bruce Montague The FreeBSD Project 2005 Nik2005 A project model for the FreeBSD Project Niklas Saers 2005 The FreeBSD Project Nor1993 Tutorial on Good Lisp Programming Style Peter Norvig Kent Pitman 1993 Nor2001 Teach Yourself Programming in Ten Years Peter Norvig 2001 Ray2004 How to ask questions the smart way Eric Steven Raymond 2004 RelEngDoc FreeBSD Release Engineering Murray Stokely 2001 The 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