社区
董君的课程社区_NO_1
Exchange Online管理员
帖子详情
7.6 - 实验:Exchange Online角色组
董老师的IT小课堂
2025-04-24 10:41:56
课时名称
课时知识点
7.6 - 实验:Exchange Online角色组
实验:Exchange Online 角色组
...全文
36
回复
打赏
收藏
7.6 - 实验:Exchange Online角色组
课时名称课时知识点7.6 - 实验:Exchange Online角色组实验:Exchange Online 角色组
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
a project model for the FreeBSD Project.7z
A project model for the FreeBSD Project Niklas Saers Copyright © 2002-2005 Niklas Saers [ Split HTML / Single HTML ] Table of Contents Foreword 1 Overview 2 Definitions 2.1. Activity 2.2. Process 2.3. Hat 2.4. Outcome 2.5. FreeBSD 3 Organisational structure 4 Methodology model 4.1. Development model 4.2. Release branches 4.3. Model summary 5 Hats 5.1. Ge
ne
ral Hats 5.1.1. Contributor 5.1.2. Committer 5.1.3. Core Team 5.1.4. Maintai
ne
rship 5.2. Official Hats 5.2.1. Documentation project manager 5.2.2. CVSup Mirror Site Coordinator 5.2.3. Internationalisation 5.2.4. Postmaster 5.2.5. Quality Assurance 5.2.6. Release Coordination 5.2.7. Public Relations & Corporate Liaison 5.2.8. Security Officer 5.2.9. Source Repository Manager 5.2.10. Election Manager 5.2.11. Web site Management 5.2.12. Ports Manager 5.2.13. Standards 5.2.14. Core Secretary 5.2.15. GNATS Administrator 5.2.16. Bugmeister 5.2.17. Donations Liaison Officer 5.2.18. Admin 5.3. Process dependent hats 5.3.1. Report originator 5.3.2. Bugbuster 5.3.3. Mentor 5.3.4. Vendor 5.3.5. Reviewers 5.3.6. CVSup Mirror Site Admin 6 Processes 6.1. Adding
ne
w and removing old committers 6.2. Adding/Removing an official CVSup Mirror 6.3. Committing code 6.4. Core election 6.5. Development of
ne
w features 6.6. Maintenance 6.7. Problem reporting 6.8. Reacting to misbehaviour 6.9. Release engi
ne
ering 7 Tools 7.1. Concurrent Versions System (CVS) 7.2. CVSup 7.3. GNATS 7.4. Mailman 7.5. Perforce
7.6
. Pretty Good Privacy 7.7. Secure Shell 8 Sub-projects 8.1. The Ports Subproject 8.2. The FreeBSD Documentation Project References List of Figures 3-1. The FreeBSD Project's structure 3-2. The FreeBSD Project's structure with committers in categories 4-1. Jørgenssen's model for
change
integration 4-2. The FreeBSD release tree 4-3. The overall development model 5-1. Overview of official hats 6-1. Process summary: adding a
ne
w committer 6-2. Process summary: removing a committer 6-3. Process summary: adding a CVSup mirror 6-4. Process summary: A committer commits code 6-5. Process summary: A contributor commits code 6-6. Process summary: Core elections 6-7. Jørgenssen's model for
change
integration 6-8. Process summary: problem reporting 6-9. Process summary: release engi
ne
ering 8-1. Number of ports added between 1996 and 2005 Foreword 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
ne
eded because of the increasing amount of project members. [1] 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 [Saers, 2003]. I would like to thank the following people for taking the time to
ex
plain things that were unclear to me and for proofreading the document. Andrey A. Chernov
Bruce A. Mah
Dag-Erling Smørgrav
Giorgos Keramidas
Ingvil Hovig
Jesper Holck
John Baldwin
John Polstra
Kirk McKusick
Mark Linimon
Marleen Devos Niels Jørgenssen
Nik Clayton
Poul-Henning Kamp
Simon L. Nielsen
Chapter 1 Overview A project model is a means to reduce the communications overhead in a project. As shown by [Brooks, 1995], increasing the number of project participants increases the communication in the project
ex
po
ne
ntionally. FreeBSD has during the past few year 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. During the Core elections in 2002, Mark Murray stated “I am opposed to a long rule-book, as that satisfies lawyer-tendencies, and is counter to the technocentricity that the project so badly
ne
eds.” [FreeBSD, 2002B]. 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
ex
ecuted. It is an introduction to how the FreeBSD project works. The FreeBSD project model will be described as of July 1st, 2004. It is based on the Niels Jørgensen's paper [Jørgensen, 2001], FreeBSD's official documents, discussions on FreeBSD mailing lists and interviews with developers. After providing definitions of terms used, this document will outli
ne
the organisational structure (including role descriptions and communication li
ne
s), discuss the methodology model and after presenting the tools used for process control, it will present the defi
ne
d processes. Finally it will outli
ne
major sub-projects of the FreeBSD project. [FreeBSD, 2002A, Section 1.2 and 1.3] give the vision and the architectural guideli
ne
s for the project. The vision is “To produce the best UNIX-like operating system package possible, with due respect to the original software tools ideology as well as usability, performance and stability.” The architectural guideli
ne
s help determi
ne
whether a problem that someo
ne
wants to be solved is within the scope of the project Chapter 2 Definitions 2.1. Activity An “activity” is an element of work performed during the course of a project [PMI, 2000]. 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. 2.2. Process A “process” is a series of activities that lead towards a particular outcome. A process can consist of o
ne
or more sub-processes. An
ex
ample of a process is software design. 2.3. Hat A “hat” is synonymous with role. A hat has certain responsibilities in a process and for the process outcome. The hat
ex
ecutes activities. It is well defi
ne
d what issues the hat should be contacted about by the project members and people outside the project. 2.4. Outcome An “outcome” is the final output of the process. This is synonymous with deliverable, that is defi
ne
d as “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
ex
ternal deliverable, which is a deliverable that is subject to approval by the project sponsor or customer” by [PMI, 2000].
Ex
amples of outcomes are a piece of software, a decision made or a report written. 2.5. FreeBSD When saying “FreeBSD” we will mean the BSD derivative UNIX-like operating system FreeBSD, whereas when saying “the FreeBSD Project” we will mean the project organisation. Chapter 3 Organisational structure While no-o
ne
takes ow
ne
rship of FreeBSD, the FreeBSD organisation is divided into core, committers and contributors and is part of the FreeBSD community that lives around it. Figure 3-1. The FreeBSD Project's structure Number of committers has been determi
ne
d 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. 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. Committers are developers with the privilege of being able to commit
change
s. 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. The project can be grouped into four distinct separate parts, and most developers will focus their involvement in o
ne
part of FreeBSD. The four parts are ker
ne
l development, userland development, ports and documentation. When referring to the base system, both ker
ne
l and userland is meant. This split
change
s our triangle to look like this: Figure 3-2. The FreeBSD Project's structure with committers in categories Number of committers per area has been determi
ne
d 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. Committers fall into three groups: committers who are only concer
ne
d with o
ne
area of the project (for instance file systems), committers who are involved only with o
ne
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. The ker
ne
l is the main building block of FreeBSD. While the userland applications are protected against faults in other userland applications, the entire system is vul
ne
rable to errors in the ker
ne
l. This, combi
ne
d with the vast amount of dependencies in the ker
ne
l and that it is not easy to see all the consequences of a ker
ne
l
change
, demands developers with a relative full understanding of the ker
ne
l. Multiple development efforts in the ker
ne
l also requires a closer coordination than userland applications do. The core utilities, known as userland, provide the interface that identifies FreeBSD, both user interface, shared libraries and
ex
ternal interfaces to con
ne
cting clients. Currently, 162 people are involved in userland development and maintenance, many being maintai
ne
rs for their own part of the code. Maintai
ne
rship will be discussed in the Maintai
ne
rship section. Documentation is handled by The FreeBSD Documentation Project 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. Ports is the collection of meta-data that is
ne
eded to make software packages build correctly on FreeBSD. An
ex
ample 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. [2] , 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 The Ports Subproject. Chapter 4 Methodology model 4.1. Development model There is no defi
ne
d model for how people write code in FreeBSD. However, Niels Jørgenssen has suggested a model of how written code is integrated into the project. Figure 4-1. Jørgenssen's model for
change
integration The “development release” is the FreeBSD-CURRENT ("-CURRENT") branch and the “production release” is the FreeBSD-STABLE branch ("-STABLE") [Jørgensen, 2001]. This is a model for o
ne
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 go
ne
through enough testing, it is merged into the production release, called FreeBSD-STABLE. Unless each stage is finished successfully, the developer
ne
eds 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. Jørgensen found that most FreeBSD developers work individually, meaning that this model is used in parallel by many developers on the different ongoing development efforts. A developer can also be working on multiple
change
s, so that while he is waiting for review or people to test o
ne
or more of his
change
s, he may be writing another
change
. As each commit represents an increment, this is a massively incremental model. The commits are in fact so frequent that during o
ne
year [3] , 85427 commits were made, making a daily average of 233 commits. Within the “code” bracket in Jørgensen's figure, each programmer has his own working style and follows his own development models. The bracket could very well have been called “development” 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. 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). It is important to notice the word “
change
”. Most commits do not contain radical
ne
w features, but are maintenance updates. The only
ex
ceptions from this model are security fixes and
change
s to features that are deprecated in the -CURRENT branch. In these cases,
change
s can be committed directly to the -STABLE branch. In addition to many people working on the project, there are many related projects to the FreeBSD Project. These are either projects developing brand
ne
w features, sub-projects or projects whose outcome is incorporated into FreeBSD [4]. 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. There is no standards to how design should be do
ne
, nor is design collected in a centralised repository. The main design is that of 4.4BSD. [5] As design is a part of the “Code” bracket in Jørgenssen's model, it is up to every developer or sub-project how this should be do
ne
. 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
ne
gotiate fit interfaces between each other rather than to dictate interfacing. 4.2. Release branches 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. In the following release tree, arrows that follow o
ne
-another in a particular direction represent a branch. Boxes with full li
ne
s and diamonds represent official releases. Boxes with dotted li
ne
s 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 o
ne
of the branches becomes a sub-branch. For
ex
ample, 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. Figure 4-2. The FreeBSD release tree 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. [FreeBSD, 2002E] A “major release” is always made from the -CURRENT branch. However, the -CURRENT branch does not
ne
ed to fork at that point in time, but can focus on stabilising. An
ex
ample 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. A “minor release” is made from the -CURRENT branch following a major release, or from the -STABLE branch. Following and including, 4.3-RELEASE[6], when a minor release has been made, it becomes a “security branch”. This is meant for organisations that do not want to follow the -STABLE branch and the potential
ne
w/
change
d features it offers, but instead require an absolutely stable environment, only updating to implement security updates. [7] Each update to a security branch is called a “patchlevel”. For every security enhancement that is do
ne
, 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
ne
w release can be made from a security branch. An
ex
ample of this is 4.6.2-RELEASE. 4.3. Model summary To summarise, the development model of FreeBSD can be seen as the following tree: Figure 4-3. The overall development model The tree of the FreeBSD development with ongoing development efforts and continuous integration. The tree symbolises the release versions with major versions spawning
ne
w main branches and minor versions being versions of the main branch. The top branch is the -CURRENT branch where all
ne
w development is integrated, and the -STABLE branch is the branch directly below it. 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. Chapter 5 Hats Many committers have a special area of responsibility. These roles are called hats [Losh, 2002]. These hats can be either project roles, such as public relations officer, or maintai
ne
r for a certain area of the code. Because this is a project where people give voluntarily of their spare time, people with assig
ne
d 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. Many of these hats are not formalised. Formalised hats have a charter stating the
ex
act purpose of the hat along with its privileges and responsibilities. The writing of such charters is a
ne
w 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, 5.1. Ge
ne
ral Hats 5.1.1. Contributor 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. [FreeBSD, 2002F] 5.1.2. Committer A person who has the required privileges to add his code or documentation to the repository. A committer has made a commit within the past 12 months. [FreeBSD, 2000A] An active committer is a committer who has made an average of o
ne
commit per month during that time. It is worth noting that there are no technical barriers to prevent someo
ne
, once having gai
ne
d 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 happe
ne
d in this area before, and also read the MAINTAI
NE
R file to see if the maintai
ne
r of this part has any special requests on how
change
s in the code should be made 5.1.3. Core Team 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-defi
ne
d 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. 5.1.4. Maintai
ne
rship Maintai
ne
rship 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 involves proactive work aimed at stimulating contributions and reactive work in reviewing commits. With the FreeBSD source comes the MAINTAI
NE
RS file that contains a o
ne
-li
ne
summary of how each maintai
ne
r 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 maintai
ne
r be unavailable for some time. If the maintai
ne
r is unavailable for an unreasonably long period of time, and other people do a significant amount of work, maintai
ne
rship may be switched without the maintai
ne
r's approval. This is based on the stance that maintai
ne
rship should be demonstrated, not declared. Maintai
ne
rship of a particular piece of code is a hat that is not held as a group. 5.2. Official Hats 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 li
ne
s. After this follows a description of each hat, including who it is held by. Figure 5-1. Overview of official hats All boxes consist of groups of committers,
ex
cept for the dotted boxes where the holders are not
ne
cessarily committers. The flatte
ne
d circles are sub-projects and consist of both committers and non-committers of the main project. 5.2.1. Documentation project manager The FreeBSD Documentation Project architect is responsible for defining and following up documentation goals for the committers in the Documentation project. Hat held by: The DocEng team
. The DocEng Charter. 5.2.2. CVSup Mirror Site Coordinator The CVSup Mirror Site Coordinator coordinates all the CVSup Mirror Site Admins 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 ge
ne
ral public to find their closest CVSup mirror. Hat currently held by: John Polstra
. 5.2.3. Internationalisation The Internationalisation hat is responsible for coordinating the localisation efforts of the FreeBSD ker
ne
l and userland utilities. The translation effort are coordinated by The FreeBSD Documentation Project. The Internationalisation hat should suggest and promote standards and guideli
ne
s for writing and maintaining the software in a fashion that makes it easier to translate. Hat currently available. 5.2.4. Postmaster 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. Hat currently held by: David Wolfskill
. 5.2.5. Quality Assurance The responsibilities of this role are to manage the quality assurance measures. Hat currently held by: Robert Watson
. 5.2.6. Release Coordination The responsibilities of the Release Engi
ne
ering Team are Setting, publishing and following a release schedule for official releases Documenting and formalising release engi
ne
ering procedures Creation and maintenance of code branches Coordinating with the Ports and Documentation teams to have an updated set of packages and documentation released with the
ne
w releases Coordinating with the Security team so that pending releases are not affected by recently disclosed vul
ne
rabilities. Further information about the development process is available in the release engi
ne
ering section. Hat held by: the Release Engi
ne
ering team
, currently headed by Murray Stokely
. The Release Engi
ne
ering Charter. 5.2.7. Public Relations & Corporate Liaison The Public Relations & Corporate Liaison's responsibilities are: Making press statements when happenings that are important to the FreeBSD Project happen. Being the official contact person for corporations that are working close with the FreeBSD Project. Take steps to promote FreeBSD within both the Open Source community and the corporate world. Handle the “freebsd-advocacy” mailing list. This hat is currently not occupied. 5.2.8. Security Officer The Security Officer's main responsibility is to coordinate information
ex
change
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. Because of the fear that information about vul
ne
rabilities 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 Core team members, receive sensitive information about security issues. However, to create or implement a patch, the Security Officer has the Security Officer Team
to help do the work. Hat held by: the Security Officer
, currently headed by Colin Percival
. The Security Officer and The Security Officer Team's charter. 5.2.9. Source Repository Manager The Source Repository Manager is the only o
ne
who is allowed to directly modify the repository without using the CVS 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
ne
cessary to resolve a CVS technical problem. Hat held by: the Source Repository Manager
, currently headed by Peter Wemm
. 5.2.10. Election Manager The Election Manager is responsible for the Core election process. The manager is responsible for running and maintaining the election system, and is the final authority should minor unforseen events happen in the election process. Major unforseen events have to be discussed with the Core team Hat held only during elections. 5.2.11. Web site Management 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
ne
eds to coordinate the content with The FreeBSD Documentation Project and acts as maintai
ne
r for the “www” tree. Hat held by: the FreeBSD Webmasters
. 5.2.12. Ports Manager The Ports Manager acts as a liaison between The Ports Subproject and the core project, and all requests from the project should go to the ports manager. Hat held by: the Ports Management Team
, 5.2.13. Standards The Standards hat is responsible for ensuring that FreeBSD complies with the standards it is committed to , keeping up to date on the development of these standards and notifying FreeBSD developers of important
change
s that allows them to take a proactive role and decrease the time between a standards update and FreeBSD's compliancy. Hat currently held by: Garrett Wollman
. 5.2.14. Core Secretary 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. Hat currently held by: Joel Dahl
. 5.2.15. GNATS Administrator 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. Hat currently held by: Ceri Davies
and Mark Linimon
. 5.2.16. Bugmeister The Bugmeister is the person in charge of the problem report group. Hat currently held by: Ceri Davies
and Mark Linimon
. 5.2.17. Donations Liaison Officer The task of the donations liason officer is to match the developers with
ne
eds with people or organisations willing to make a donation. The Donations Liason Charter is available here Hat held by: the Donations Liaison Office
, currently headed by Michael W. Lucas
. 5.2.18. Admin (Also called “FreeBSD Cluster Admin”) 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. Hat held by: the Admin team
, currently headed by Mark Murray
5.3. Process dependent hats 5.3.1. Report originator The person originally responsible for filing a Problem Report. 5.3.2. Bugbuster 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 o
ne
. 5.3.3. Mentor A mentor is a committer who takes it upon him/her to introduce a
ne
w committer to the project, both in terms of ensuring the
ne
w committers setup is valid, that the
ne
w committer knows the available tools required in his/her work and that the
ne
w committer knows what is
ex
pected of him/her in terms of behaviour. 5.3.4. Vendor The person(s) or organisation whom
ex
ternal code comes from and whom patches are sent to. 5.3.5. Reviewers People on the mailing list where the request for review is posted. 5.3.6. CVSup Mirror Site Admin A CVSup Mirror Site Admin has accesses to a server that he/she uses to mirror the CVS repository. The admin works with the CVSup Mirror Site Coordinator to ensure the site remains up-to-date and is following the ge
ne
ral policy of official mirror sites. Chapter 6 Processes The following section will describe the defi
ne
d 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. 6.1. Adding
ne
w and removing old committers The Core team has the responsibility of giving and removing commit privileges to contributors. This can only be do
ne
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. 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. If the area of particular interest for the developer potentially overlaps with other committers' area of maintai
ne
rship, the opinion of those maintai
ne
rs is sought. However, it is frequently this committer that recommends the developer. When a contributor is given committer status, he is assig
ne
d a mentor. The committer who recommended the
ne
w committer will, in the ge
ne
ral case, take it upon himself to be the
ne
w committers mentor. When a contributor is given his commit bit, a PGP-sig
ne
d email is sent from either Core Secretary, Ports Manager or nik@freebsd.org to both admins@freebsd.org, the assig
ne
d mentor, the
ne
w committer and core confirming the approval of a
ne
w account. The mentor then gathers a password li
ne
, SSH 2 public key and PGP key from the
ne
w committer and sends them to Admin. When the
ne
w account is created, the mentor activates the commit bit and guides the
ne
w committer through the rest of the initial process. Figure 6-1. Process summary: adding a
ne
w committer 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 assig
ne
d the
ne
w committer and the
ne
w committer has to email his details to the administrators for an account to be created. After this, the
ne
w committer is all set to make his first commit. By tradition, this is by adding his name to the committers list. Recall that a committer is considered to be someo
ne
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. [FreeBSD, 2002H] There are, however, no automatic procedures for doing this. For reactions concerning commit privileges not triggered by time, see section 1.5.8. Figure 6-2. Process summary: removing a committer 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 do
ne
so have their commit bits revoked. 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. Roles in this process: Core team Contributor Committer Maintai
ne
rship Mentor [FreeBSD, 2000A] [FreeBSD, 2002H] [FreeBSD, 2002I] 6.2. Adding/Removing an official CVSup Mirror A 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. Adding an official CVSup mirror starts with the potential CVSup Mirror Site Admin installing the “cvsup-mirror” package. Having do
ne
this and updated the source code with a mirror site, he now runs a fairly recent unofficial CVSup mirror. Deciding he has a stable environment, the processing power, the
ne
twork capacity and the storage capacity to run an official mirror, he mails the CVSup Mirror Site Coordinator who decides whether the mirror should become an official mirror or not. In making this decision, the CVSup Mirror Site Coordinator has to determi
ne
whether that geographical area
ne
eds another mirror site, if the mirror administrator has the skills to run it reliably, if the
ne
twork bandwidth is adequate and if the master server has the capacity to server another mirror. If CVSup Mirror Site 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. Figure 6-3. Process summary: adding a CVSup mirror When a CVSup mirror administrator of an unofficial mirror offers to become an official mirror site, the CVSup coordinator decides if another mirror is
ne
eded 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. Tools used in this process: CVSup SSH 2 Hats involved in this process: CVSup Mirror Site Coordinator CVSup Mirror Site Admin 6.3. Committing code The committing of
ne
w or modified code is o
ne
of the most frequent processes in the FreeBSD project and will usually happen many times a day. Committing of code can only be do
ne
by a “committer”. Committers commit either code written by themselves, code submitted to them or code submitted through a problem report. When code is written by the developer that is non-trivial, he should seek a code review from the community. This is do
ne
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 “pre-commit test”. When contributed code is received, it should be reviewed by the committer and tested the same way. When a
change
is committed to a part of the source that has been contributed from an outside Vendor, the maintai
ne
r should ensure that the patch is contributed back to the vendor. This is in li
ne
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
ne
w release is made. After the code has been available for review and no further
change
s are
ne
cessary, the code is committed into the development branch, -CURRENT. If the
change
applies for the -STABLE branch or the other branches as well, a “Merge From Current” ("MFC") countdown is set by the committer. 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
change
s should be merged to security branches. Delaying the commit to -STABLE and other branches allows for “parallel debugging” where the committed code is tested on a wide range of configurations. This makes
change
s to -STABLE to contain fewer faults and thus giving the branch its name. Figure 6-4. Process summary: A committer commits code When a committer has written a piece of code and wants to commit it, he first
ne
eds to determi
ne
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 maintai
ne
r, he should consult the maintai
ne
r before proceeding. If the code is contributed by an outside vendor, the maintai
ne
r 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. Figure 6-5. Process summary: A contributor commits code 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 maintai
ne
r who reviews the code and commits it. Hats included in this process are: Committer Contributor Vendor Reviewer [FreeBSD, 2001] [Jørgensen, 2001] 6.4. Core election Core elections are held at least every two years. [8] Ni
ne
core members are elected.
Ne
w elections are held if the number of core members drops below seven.
Ne
w elections can also be held should at least 1/3 of the active committers demand this. 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. Only committers can be elected into core. The candidates
ne
ed to submit their candidacy at least o
ne
week before the election starts, but can refi
ne
their statements until the voting starts. They are presented in the candidates list. When writing their election statements, the candidates must answer a few standard questions submitted by the election manager. 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. When voting, the committer may vote once in support of up to ni
ne
nomi
ne
es. The voting is do
ne
over a period of four weeks with reminders being posted on “developers” mailing list that is available to all committers. The election results are released o
ne
week after the election ends, and the
ne
w core team takes office o
ne
week after the results have been posted. Should there be a voting tie, this will be resolved by the
ne
w, unambiguously elected core members. Votes and candidate statements are archived, but the archives are not publicly available. Figure 6-6. Process summary: Core elections 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
ne
w core team takes office. Hats in core elections are: Core team Committer Election Manager [FreeBSD, 2000A] [FreeBSD, 2002B] [FreeBSD, 2002G] 6.5. Development of
ne
w features Within the project there are sub-projects that are working on
ne
w features. These projects are ge
ne
rally do
ne
by o
ne
person [Jørgensen, 2001]. 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 guideli
ne
s. 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. 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 maintai
ne
d by the project. Items that do not come within someo
ne
's responsibility are collected on TODO-lists unless someo
ne
volunteers to take the responsibility. All requests, their distribution and follow-up are handled by the GNATS tool. 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 spaw
ne
d by the request. Furthermore, individual developers on the sub-project will evaluate the feasibility of the requests and determi
ne
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. As the requests are prioritised by the individual developers on the basis of doing what they find interesting,
ne
cessary 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 guideli
ne
s from the release engi
ne
ering team. 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 do
ne
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
ex
pected. 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. [9] 6.6. Maintenance It is an advantage to the project to for each area of the source have at least o
ne
person that knows this area well. Some parts of the code have designated maintai
ne
rs. Others have de-facto maintai
ne
rs, and some parts of the system do not have maintai
ne
rs. The maintai
ne
r is usually a person from the sub-project that wrote and integrated the code, or someo
ne
who has ported it from the platform it was written for. [10] The maintai
ne
r'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. The main bulk of work that is put into the FreeBSD project is maintenance. [Jørgensen, 2001] has made a figure showing the life cycle of
change
s. Figure 6-7. Jørgenssen's model for
change
integration Here “development release” refers to the -CURRENT branch while “production release” refers to the -STABLE branch. The “pre-commit test” is the functional testing by peer developers when asked to do so or trying out the code to determi
ne
the status of the sub-project. “Parallel debugging” is the functional testing that can trigger more review, and debugging when the code is included in the -CURRENT branch. As of this writing, there were 269 committers in the project. When they commit a
change
to a branch, that constitutes a
ne
w release. It is very common for users in the community to track a particular branch. The immediate
ex
istence of a
ne
w release makes the
change
s widely available right away and allows for rapid feedback from the community. This also gives the community the response time they
ex
pect 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. Before making
change
s 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. 6.7. Problem reporting FreeBSD comes with a problem reporting tool called “send-pr” 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
ne
w versions of
ex
ternal software that is included in the project. Problem reports are sent to an email address where it is inserted into the GNATS maintenance database. A Bugbuster classifies the problem and sends it to the correct group or maintai
ne
r within the project. After someo
ne
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 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. Figure 6-8. Process summary: problem reporting A problem is reported by the report originator. It is then classified by a bugbuster and handed to the correct maintai
ne
r. 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. The roles included in this process are: Report originator Maintai
ne
rship Bugbuster [FreeBSD, 2002C]. [FreeBSD, 2002D] 6.8. Reacting to misbehaviour [FreeBSD, 2001] has a number of rules that committers should follow. However, it happens that these rules are broken. The following rules
ex
ist 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. Committing during code freezes without the approval of the Release Engi
ne
ering team - 2 days Committing to a security branch without approval - 2 days Commit wars - 5 days to all participating parties Impolite or inappropriate behaviour - 5 days [Lehey, 2002] For the suspensions to be efficient, any single core member can implement a suspension before discussing it on the “core” mailing list. Repeat offenders can, with a 2/3 vote by core, receive harsher penalties, including perma
ne
nt 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 “developers” mailing list, a list available to committers only. It is important that you cannot be suspended for making technical errors. All penalties come from breaking social etiquette. Hats involved in this process: Core team Committer 6.9. Release engi
ne
ering The FreeBSD project has a Release Engi
ne
ering team with a principal release engi
ne
er that is responsible for creating releases of FreeBSD that can be brought out to the user community via the
ne
t 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 o
ne
person in charge of each architecture. Also, there are roles in the team responsible for coordinating quality assurance efforts, building a package set and for having an updated set of documents. When referring to the release engi
ne
er, a representative for the release engi
ne
ering team is meant. When a release is coming, the FreeBSD project
change
s 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
ne
w features are allowed to be committed to the branch without the release engi
ne
ers'
ex
plicit consent. Code-freeze means no
change
s to the code (like bugs-fixes) are allowed to be committed without the release engi
ne
ers
ex
plicit consent. This feature- and code-freeze is known as stabilising. During the release process, the release engi
ne
er has the full authority to revert to older versions of code and thus "back out"
change
s should he find that the
change
s are not suitable to be included in the release. There are three different kinds of releases: .0 releases are the first release of a major version. These are branched of the -CURRENT branch and have a significantly longer release engi
ne
ering cycle due to the unstable nature of the -CURRENT branch .X releases are releases of the -STABLE branch. They are scheduled to come out every 4 months. .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.
Ne
w features are rarely included, and the security team is far more involved in these than in regular releases. 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
change
s 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
change
s are allowed. These
change
s must be approved by the release engi
ne
er 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,
ex
cept 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
ne
w 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 PGP-sig
ne
d message stating
ex
actly 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-sig
ne
d message is sent. [11]. The releases of the -CURRENT-branch (that is, all releases that end with “.0”) are very similar, but with twice as long timeframe. It starts 8 weeks prior to the release with announcement of the release time li
ne
. 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
ne
w version. This version is given release candidate status, and as with the release engi
ne
ering of -STABLE, the code freeze of the release candidate is harde
ne
d. However, development on the main development branch can continue. Other than these differences, the release engi
ne
ering processes are alike. .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 Release Engi
ne
ering Team> decides the demands to stability have been satisfied that the branch becomes -STABLE and -CURRENT targets the
ne
xt major version. While this for the majority has been with .1 versions, this is not a demand. 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 deadli
ne
s and target release dates. For slips of time not to become too long with regards to security and stability issues,
ex
tra discipli
ne
is required when committing
change
s to -STABLE. Figure 6-9. Process summary: release engi
ne
ering These are the stages in the release engi
ne
ering process. Multiple release candidates may be created until the release is deemed stable enough to be released. [FreeBSD, 2002E] Chapter 7 Tools The major support tools for supporting the development process are CVS, CVSup, Perforce, GNATS, Mailman and OpenSSH.
Ex
cept for CVSup, these are
ex
ternally developed tools. These tools are commonly used in the open source world. 7.1. Concurrent Versions System (CVS) Concurrent Versions System or simply “CVS” is a system to handle multiple versions of t
ex
t files and tracking who committed what
change
s and why. A project lives within a “repository” and different versions are considered different “branches”. 7.2. CVSup CVSup is a software package for distributing and updating collections of files across a
ne
twork. 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. 7.3. GNATS 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 o
ne
of its many client interfaces, “send-pr”, to send “Problem Reports” by email to the projects central GNATS server. The committers have also web and command-li
ne
clients available. 7.4. Mailman Mailman is a program that automates the management of mailing lists. The FreeBSD Project uses it to run 16 ge
ne
ral 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. Ge
ne
ral lists are lists for the ge
ne
ral public, technical lists are mainly for the development of specific areas of interest, and closed lists are for internal communication not intended for the ge
ne
ral public. The majority of all the communication in the project goes through these 85 lists [FreeBSD, 2003A, Appendix C]. 7.5. Perforce 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 do
ne
upon it. The clients are both clients for accessing the repository and administration of its configuration.
7.6
. Pretty Good Privacy 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. 7.7. Secure Shell Secure Shell is a standard for securely logging into a remote system and for
ex
ecuting commands on the remote system. It allows other con
ne
ctions, called tun
ne
ls, to be established and protected between the two involved systems. This standard
ex
ists 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. Chapter 8 Sub-projects Sub-projects are formed to reduce the amount of communication
ne
eded 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. 8.1. The Ports Subproject A “port” is a set of meta-data and patches that are
ne
eded to fetch, compile and install correctly an
ex
ternal piece of software on a FreeBSD system. The amount of ports have grown at a tremendous rate, as shown by the following figure. Figure 8-1. Number of ports added between 1996 and 2005 Figure 8-1 is taken from the FreeBSD web site. It shows the number of ports available to FreeBSD in the period 1995 to 2005. It looks like the curve has first grown
ex
po
ne
ntionally, and then since the middle of 2001 grown li
ne
rly. As the
ex
ternal 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. Ports has its own core team with the 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 maintai
ne
rs that are not committers. 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
ne
ed to have variations depending on what version of FreeBSD it runs on. 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
ne
ither the infrastructure nor volunteer time
ne
eded to guarantee this. For efficiency of communication, teams depending on Ports, such as the release engi
ne
ering team, have their own ports liaisons. 8.2. The FreeBSD Documentation Project 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. The goal of the Documentation project is to provide good and useful documentation of the FreeBSD project, thus making it easier for
ne
w users to get familiar with the system and detailing advanced features for the users. The main tasks in the Documentation project are to work on current projects in the “FreeBSD Documentation Set”, and translate the documentation to other languages. Like the FreeBSD Project, documentation is split in the same branches. This is do
ne
so that there is always an updated version of the documentation for each version. Only documentation errors are corrected in the security branches. Like the ports sub-project, the Documentation project can appoint documentation committers without FreeBSD Core's approval. [FreeBSD, 2003B]. The Documentation project has a primer. This is used both to introduce
ne
w project members to the standard tools and syntaxes and acts as a reference when working on the project. References [Brooks, 1995] Frederick P. Brooks, 1975, 1995, 0201835959, Addison-Wesley Pub Co, The Mythical Man-Month: Essays on Software Engi
ne
ering, Anniversary Edition (2nd Edition). [Saers, 2003] Niklas Saers, 2003, A project model for the FreeBSD Project: Candidatus Scientiarum thesis. [Jørgensen, 2001] Niels Jørgensen, 2001, Putting it All in the Trunk: Incremental Software Development in the FreeBSD Open Source Project. [PMI, 2000] Project Management Institute, 1996, 2000, 1-880410-23-0, Project Management Institute, Pennsylvania, PMBOK Guide: A Guide to the Project Management Body of Knowledge, 2000 Edition. [FreeBSD, 2000A] 2002, Core Bylaws. [FreeBSD, 2002A] 2002, FreeBSD Developer's Handbook. [FreeBSD, 2002B] 2002, Core team election 2002. [Losh, 2002] War
ne
r Losh, 2002, Working with Hats. [FreeBSD, 2002C] Dag-Erling Smørgrav and Hiten Pandya, 2002, The FreeBSD Documentation Project, Problem Report Handling Guideli
ne
s. [FreeBSD, 2002D] Dag-Erling Smørgrav, 2002, The FreeBSD Documentation Project, Writing FreeBSD Problem Reports. [FreeBSD, 2001] 2001, The FreeBSD Documentation Project, Committers Guide. [FreeBSD, 2002E] Murray Stokely, 2002, The FreeBSD Documentation Project, FreeBSD Release Engi
ne
ering. [FreeBSD, 2003A] The FreeBSD Documentation Project, FreeBSD Handbook. [FreeBSD, 2002F] 2002, The FreeBSD Documentation Project, Contributors to FreeBSD. [FreeBSD, 2002G] 2002, The FreeBSD Project, Core team elections 2002. [FreeBSD, 2002H] 2002, The FreeBSD Project, Commit Bit
Ex
piration Policy: 2002/04/06 15:35:30. [FreeBSD, 2002I] 2002, The FreeBSD Project,
Ne
w Account Creation Procedure: 2002/08/19 17:11:27. [FreeBSD, 2003B] 2002, The FreeBSD Documentation Project, FreeBSD DocEng Team Charter: 2003/03/16 12:17. [Lehey, 2002] Greg Lehey, 2002, Greg Lehey, Two years in the trenches: The evolution of a software project. Notes [1] This goes hand-in-hand with Brooks' law that “adding another person to a late project will make it later” since it will increase the communication
ne
eds Brooks, 1995. A project model is a tool to reduce the communication
ne
eds. [2] Statistics are ge
ne
rated 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. [3] The period from January 1st, 2004 to December 31st, 2004 was
ex
ami
ne
d to find this number. [4] 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. [5] 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
ne
ed for much design. However,
ne
w applications of the system and
ne
w hardware leads to some implementations being more be
ne
ficial than those that used to be preferred. O
ne
ex
ample is the introduction of web browsing that made the normal TCP/IP con
ne
ction a short burst of data rather than a steady stream over a longer period of time. [6] The first release this actually happe
ne
d for was 4.5-RELEASE, but security branches were at the same time created for 4.3-RELEASE and 4.4-RELEASE. [7] 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
ne
ver acceptable for a system to get
change
s that are not announced at the time it is deployed, that system should run a security branch. [8] The first Core election was held September 2000 [9] More and more tests are however performed when building the system &
Printed Circuits Handbook
印刷电路板手册第六版 Part 1 Lead-Free Legislation Chapter 1. Legislation and Impact on Printed Circuits 1.3 1.1 Legislation Overview / 1.3 1.2 Waste Electrical and Electronic Equipment (WEEE) / 1.3 1.3 Restriction of Hazardous Substances (RoHS) / 1.3 1.4 RoHS’ Impact on the Printed Circuit Industry / 1.6 1.5 Lead-Free perspecives / 1.10 1.6 Other Legislative Initiatives / 1.10 Part 2 Printed Circuit Technology Drivers Chapter 2. ELECTRONIC PACKAGING AND HIGH-DENSITY INTERCON
NE
CTIVITY 2.3 2.1 Introduction / 2.3 2.2 Measuring the Intercon
ne
ctivity Revolution (HDI) / 2.3 2.3 Hierarchy of Intercon
ne
ctions / 2.6 2.4 Factors Affecting Selection of Intercon
ne
ctions / 2.7 2.5 ICS and Packages / 2.10 2.6 Density Evaluations / 2.14 2.7 Methods to Increase PWB Density / 2.16 References / 2.21 Chapter 3. Semiconductor Packaging Technology 3.1 3.1 Introduction / 3.1 3.2 Single-Chip Packaging / 3.5 3.3 Multichip Packages / 3.15 3.4 Optical Intercon
ne
cts / 3.18 3.5 High-Density/High-Performance Packaging Summary / 3.21 3.6 Roadmap Information / 3.21 References / 3.21 Chapter 4. Advanced Compo
ne
nt Packaging 4.1 4.1 Introduction / 4.1 4.2 Lead-Free / 4.2 4.3 System-on-a-Chip (SOC) versus System-on-a-Package (SOP) / 4.3 v For more information about this title, click here 4.4 Multichip Modules / 4.5 4.5 Multichip Packaging / 4.6 4.6 Enabling Technologies / 4.10 4.7 Acknowledgment / 4.18 References / 4.18 Chapter 5. Types of Printed Wiring Boards 5.1 5.1 Introduction / 5.1 5.2 Classification of Printed Wiring Boards / 5.1 5.3 Organic and Nonorganic Substrates / 5.3 5.4 Graphical and Discrete-Wire Boards / 5.3 5.5 Rigid and Fl
ex
ible Boards / 5.5 5.6 Graphically Produced Boards / 5.6 5.7 Molded Intercon
ne
ction Devices / 5.10 5.8 Plated-Through-Hole (PTH) Technologies / 5.10 5.9 Summary / 5.13 References / 5.14 Part 3 Materials Chapter 6. Introduction to Base Materials 6.3 6.1 Introduction / 6.1 6.2 Grades and Specifications / 6.3 6.3 Properties Used to Classify Base Materials / 6.9 6.4 Types of FR-4 / 6.13 6.5 Laminate Identification Scheme / 6.14 6.6 Prepreg Identification Scheme / 6.18 6.7 Laminate and Prepreg Manufacturing Processes / 6.18 References / 6.24 Chapter 7. Base Material Compo
ne
nts 7.1 7.1 Introduction / 7.1 7.2 Epoxy Resin Systems / 7.1 7.3 Other Resin Systems / 7.5 7.4 Additives / 7.7 7.5 Reinforcements / 7.12
7.6
Conductive Materials / 7.18 References / 7.25 Chapter 8. Properties of Base Materials 8.1 8.1 Introduction / 8.1 8.2 Thermal, Physical, and Mechanical Properties / 8.1 8.3 Electrical Properties / 8.13 References / 8.16 Chapter 9. Base Materials Performance Issues 9.1 9.1 Introduction / 9.1 9.2 Methods of Increasing Circuit Density / 9.2 9.3 Copper foil / 9.2 9.4 Laminate Constructions / 9.7 9.5 Prepreg Options and Yield-Per-Ply Values / 9.9 vi CONTENTS 9.6 Dimensional Stability / 9.10 9.7 High-Density Intercon
ne
ct/Microvia Materials / 9.13 9.8 CAF Growth / 9.15 9.9 Electrical Performance / 9.22 References / 9.33 Chapter 10. The Impact of Lead-Free Assembly on Base Materials 10.1 10.1 Introduction / 10.1 10.2 RoHS Basics / 10.1 10.3 Base Material Compatibility Issues / 10.2 10.4 The Impact of Lead-Free Assembly on Base Material Compo
ne
nts / 10.4 10.5 Critical Base Material Properties / 10.4 10.6 Impact on Printed Circuit Reliability and Material Selection / 10.18 10.7 Summary / 10.21 References / 10.22 Chapter 11. Selecting Base Materials for Lead-Free Assembly Applications 11.1 11.1 Introduction / 11.1 11.2 Pcb fabrication and Assembly Interactions / 11.1 11.3 Selecting the Right Base Material for Specific Application / 11.6 11.4
Ex
ample Application of this Tool / 11.14 11.5 Discussion of the Range of Peak Temperatures for Lead-Free Assembly / 11.15 11.6 Lead-Free Applications and Ipc-4101 Specification Sheets / 11.15 11.7 Additional Base material Options for Lead-Free Applications / 11.16 11.8 Summary / 11.17 References / 11.18 Chapter 12. Laminate Qualification and Testing 12.1 12.1 Introduction / 12.1 12.2 Industry Standards / 12.2 12.3 Laminate Test Strategy / 12.4 12.4 Initial Tests / 12.5 12.5 Full Material Characterization / 12.9 12.6 Characterization Test Plan / 12.22 12.7 Manufacturability in the Shop / 12.23 Part 4 Engi
ne
ering and Design Chapter 13. Physical Characteristics of the PCB 13.3 13.1 Classes of PCB Designs / 13.3 13.2 Types of PCBs or Packages for Electronic Circuits / 13.9 13.3 Methods of Attaching Compo
ne
nts / 13.14 13.4 Compo
ne
nt Package Types / 13.15 13.5 Materials Choices / 13.18 13.6 Fabrication Methods / 13.22 13.7 Choosing a Package Type and Fabrication Vendor / 13.24 Chapter 14. The PCB Design Process 14.1 14.1 Objective of the PCB Design Process / 14.1 14.2 Design Processes / 14.1 CONTENTS vii 14.3 Design Tools / 14.6 14.4 Selecting a Set of Design Tools / 14.10 14.5 Interfacing Cae, Cad, and CAMTools to Each Other / 14.11 14.6 Inputs to the Design Process / 14.11 Chapter 15. Electrical and Mechanical Design Parameters 15.1 15.1 Printed Circuit Design Requirements / 15.1 15.2 Introduction to Electrical Signal Integrity / 15.1 15.3 Introduction to Electromag
ne
tic Compatibility / 15.3 15.4 Noise Budget / 15.4 15.5 Designing for Signal Integrity and Electromag
ne
tic Compatibility / 15.4 15.6 Mechanical Design Requirements / 15.9 References / 15.17 Chapter 16. Current Carrying Capacity in Printed Circuits 16.1 16.1 Introduction / 16.1 16.2 Conductor (Trace) Sizing Charts / 16.1 16.3 Current Carrying Capacity / 16.2 16.4 Charts / 16.6 16.5 Baseli
ne
Charts / 16.10 16.6 Odd-Shaped Geometries and the “Swiss Cheese” Effect / 16.19 16.7 Copper Thick
ne
ss / 16.20 References / 16.21 Chapter 17. PCB Design for Thermal Performance 17.1 17.1 Introduction / 17.1 17.2 The PCB as a Heat Sink Soldered to the Compo
ne
nt / 17.2 17.3 Optimizing the PCB for Thermal Performance / 17.3 17.4 Conducting Heat to the Chassis / 17.12 17.5 PCB Requirements for High-Power Heat Sink Attach / 17.14 1
7.6
Modeling the Thermal Performance of the PCB / 17.15 References / 17.18 Chapter 18. Information Formating and
Ex
change
18.1 18.1 Introduction to Data
Ex
change
/ 18.1 18.2 The Data
Ex
change
Process / 18.3 18.3 Data
Ex
change
Formats / 18.9 18.4 Drivers for Evolution / 18.22 18.5 Acknowledgment / 18.23 References / 18.23 Chapter 19. Planning for Design, Fabrication, and Assembly 19.1 19.1 Introduction / 19.1 19.2 Ge
ne
ral Considerations / 19.3 19.3
Ne
w Product Design / 19.4 19.4 Layout Trade-off Planning / 19.10 19.5 PWB Fabrication Trade-off Planning / 19.17 19.6 Assembly Trade-Off Planning / 19.24 References / 19.27 viii CONTENTS Chapter 20. Manufacturing Information, Documentation, and Transfer Including CAM Tooling for Fab and Assembly 20.1 20.1 Introduction / 20.1 20.2 Manufacturing Information / 20.2 20.3 Initial Design Review / 20.7 20.4 Design Input / 20.15 20.5 Design Analysis and Review / 20.19 20.6 The CAM-Tooling Process / 20.19 20.7 Additional Processes / 20.31 20.8 Acknowledgment / 20.32 Chapter 21. Embedded Compo
ne
nts 21.1 21.1 Introduction / 21.1 21.2 Definitions and
Ex
ample / 21.1 21.3 Applications and Trade-Offs / 21.2 21.4 Designing for Embedded Compo
ne
nt Applications / 21.3 21.5 Materials / 21.6 21.6 Material Supply Types / 21.9 Part 5 High Density Intercon
ne
ction Chapter 22. Introduction to High-Density Intercon
ne
ction (HDI) Technology 22.3 22.1 Introduction / 22.3 22.2 Definitions / 22.3 22.3 HDI Structures / 22.7 22.4 Design / 22.11 22.5 Dielectric Materials and Coating Methods / 22.13 22.6 HDI Manufacturing Processes / 22.26 References / 22.34 Bibliography-Additional Reading / 22.35 Chapter 23. Advanced High-Density Intercon
ne
ction (HDI) Technologies 23.1 23.1 Introduction / 23.1 23.2 Definitions of HDI Process Factors / 23.1 23.3 HDI Fabrication Processes / 23.3 23.4
Ne
xt-Ge
ne
ration HDI Processes / 23.33 References 23.37 Part 6 Fabrication Chapter 24. Drilling Processes 24.3 24.1 Introduction / 24.3 24.2 Materials / 24.4 24.3 Machi
ne
s / 24.11 24.4 Methods / 24.15 24.5 Hole Quality / 24.18 24.6 Postdrilling Inspection / 24.20 24.7 Drilling Cost Per Hole / 24.20 CONTENTS ix Chapter 25. Precision Intercon
ne
ct Drilling 25.1 25.1 Introduction / 25.1 25.2 Factors Affecting High-Density Drilling / 25.1 25.3 Laser versus Mechanical / 25.2 25.4 Factors Affecting High-Density Drilling / 25.5 25.5 Depth-Controlled Drilling Methods / 25.10 25.6 High-Aspect-Ratio Drilling / 25.10 25.7 In
ne
rlayer Inspection of Multilayer Boards / 25.13 Chapter 26. Imaging 26.1 26.1 Introduction / 26.1 26.2 Photosensitive Materials / 26.2 26.3 Dry-Film Resists / 26.4 26.4 Liquid Photoresists / 26.7 26.5 Electrophoretic Depositable Photoresists / 26.8 26.6 Resist Processing / 26.8 26.7 Design for Manufacturing / 26.27 References / 26.29 Chapter 27. Multilayer Materials and Processing 27.1 27.1 Introduction / 27.1 27.2 Printed Wiring Board Materials / 27.2 27.3 Multilayer Construction Types / 27.16 27.4 ML-PWB Processing and Flows / 27.37 27.5 Lamination Process / 27.51 2
7.6
Lamination Process Control and Troubleshooting / 27.59 27.7 Lamination Overview / 2
7.6
3 27.8 ML-PWB Summary / 2
7.6
3 References / 2
7.6
3 Chapter 28. Preparing Boards for Plating 28.1 28.1 Introduction / 28.1 28.2 Process Decisions / 28.1 28.3 Process Feedwater / 28.3 28.4 Multilayer PTH Preprocessing / 28.4 28.5 Electroless Copper / 28.8 28.6 Acknowledgment / 28.11 References / 28.11 Chapter 29. Electroplating 29.1 29.1 Introduction / 29.1 29.2 Electroplating Basics / 29.1 29.3 High-Aspect Ratio Hole and Microvia Plating / 29.2 29.4 Horizontal Electroplating / 29.4 29.5 Copper Electroplating Ge
ne
ral Issues / 29.6 29.6 Acid Copper Sulfate Solutions and Operation / 29.14 29.7 Solder (Tin-Lead) Electroplating / 29.19 29.8 Tin Electroplating / 29.21 29.9 Nickel Electroplating / 29.23 29.10 Gold Electroplating / 29.25 29.11 Platinum Metals / 29.28 29.12 Silver Electroplating / 29.29 x CONTENTS 29.13 Laboratory Process control / 29.29 29.14 Acknowledgment / 29.31 References / 29.31 Chapter 30. Direct Plating 30.1 30.1 Direct Metallization Technology / 30.1 References / 30.11 Chapter 31. PWB Manufacture Using Fully Electroless Copper 31.1 31.1 Fully Electroless Plating / 31.1 31.2 The Additive Process and its Variations / 31.2 31.3 Pattern-Plating Additive / 31.2 31.4 Pa
ne
l-Plate Additive / 31.7 31.5 Partly Additive / 31.8 31.6 Chemistry of Electroless Plating / 31.9 31.7 Fully Electroless Plating Issues / 31.12 References / 31.14 Chapter 32. Printed Circuit Board Surface Finishes 32.1 32.1 Introduction / 32.1 32.2 Alternative Finishes / 32.3 32.3 Hot Air Solder Level (Hasl or Hal) / 32.4 32.4 Electroless Nickel Immersion Gold (ENIG) / 32.6 32.5 Organic Solderability Preservative (OSP) / 32.8 32.6 Immersion Silver / 32.10 32.7 Immersion Tin / 32.11 32.8 Other Surface Finishes / 32.13 32.9 Assembly Compatibility / 32.14 32.10 Reliability Test Methods / 32.17 32.11 Special Topics / 32.18 32.12 Failure Modes / 32.19 32.13 Comparing Surface Finish Properties / 32.23 References / 32.23 Chapter 33. Solder Mask 33.1 33.1 Introduction / 33.1 33.2 Trends and Challenges for Solder Mask / 33.2 33.3 Types of Solder Mask / 33.3 33.4 Solder Mask Selection / 33.4 33.5 Solder Mask Application and Processing / 33.9 33.6 VIA Protection / 33.18 33.7 Solder Mask Final Properties / 33.19 33.8 Legend and Marking (Nomenclature) / 33.19 Chapter 34. Etching Process and Technologies 34.1 34.1 Introduction / 34.1 34.2 Ge
ne
ral Etching Considerations and Procedures / 34.2 34.3 Resist Removal / 34.4 34.4 Etching Solutions / 34.6 34.5 Other Materials for Board Construction / 34.18 34.6 Metals Other than Copper / 34.19 34.7 Basics of Etched Li
ne
Formation / 34.20 CONTENTS xi 34.8 Equipment and Techniques / 34.26 References / 34.29 Chapter 35. Machining and Routing 35.1 35.1 Introduction / 35.1 35.2 Punching Holes (Piercing) / 35.1 35.3 Blanking, Shearing, and Cutting of Copper-Clad Laminates / 35.3 35.4 Routing / 35.6 35.5 Scoring / 35.13 35.6 Acknowledgment / 35.15 Part 7 Bare Board Test Chapter 36. Bare Board Test Objectives and Definitions 36.3 36.1 Introduction / 36.3 36.2 The Impact of HDI / 36.3 36.3 Why Test? / 36.4 36.4 Circuit Board Faults / 36.6 Chapter 37. Bare Board Test Methods 37.1 37.1 Introduction / 37.1 37.2 No
ne
lectrical Testing Methods / 37.1 37.3 Basic Electrical Testing Methods / 37.2 37.4 Specialized Electrical Testing Methods / 37.9 37.5 Data and Fixture Preparation / 37.13 3
7.6
Combi
ne
d Testing Methods / 37.20 Chapter 38. Bare Board Test Equipment 38.1 38.1 Introduction / 38.1 38.2 System Alternatives / 38.1 38.3 Universal Grid Systems / 38.3 38.4 Flying-Probe/Moving-Probe Test Systems / 38.17 38.5 Verification and Repair / 38.21 38.6 Test Department Planning and Management / 38.22 Chapter 39. HDI Bare Board Special Testing Methods 39.1 39.1 Introduction / 39.1 39.2 Fi
ne
-Pitch Tilt-Pin Fixtures / 39.2 39.3 Bending Beam Fixtures / 39.3 39.4 Flying Probe / 39.3 39.5 Coupled Plate / 39.3 39.6 Shorting Plate / 39.4 39.7 Conductive Rubber Fixtures / 39.5 39.8 Optical Inspection / 39.5 39.9 Noncontact Test Methods / 39.5 39.10 Combinational Test Methods / 39.7 xii CONTENTS Part 8 Assembly Chapter 40. Assembly Processes 40.3 40.1 Introduction / 40.3 40.2 Through-Hole Technology / 40.5 40.3 Surface-Mount Technology / 40.16 40.4 Odd-Form Compo
ne
nt Assembly / 40.42 40.5 Process Control / 40.48 40.6 Process Equipment Selection / 40.54 40.7 Repair and Rework / 40.57 40.8 Conformal Coating, Encapsulation, and Underfill Materials / 40.64 40.9 Acknowledgment / 40.66 Chapter 41. Conformal Coating 41.1 41.1 Introduction / 41.1 41.2 Types of Conformal Coatings / 41.3 41.3 Product Preparation / 41.6 41.4 Application Processes / 41.7 41.5 Cure, Inspection, and Finishing / 41.11 41.6 Repair Methods / 41.13 41.7 Design for Conformal Coating / 41.14 References / 41.17 Part 9 Solderability Technology Chapter 42. Solderability: Incoming Inspection and Wet Balance Technique 42.3 42.1 Introduction / 42.3 42.2 Solderability / 42.4 42.3 Solderability Testing—a Scientific Approach / 42.8 42.4 The Influence of Temperature on Test Results / 42.13 42.5 Interpreting the Results:Wetting Balance Solderability Testing / 42.14 42.6 Globule Testing / 42.15 42.7 PCB Surface Finishes and Solderability Testing / 42.16 42.8 Compo
ne
nt Solderability / 42.22 Chapter 43. Fluxes and Cleaning 43.1 43.1 Introduction / 43.1 43.2 Assembly Process / 43.2 43.3 Surface Finishes / 43.3 43.4 Soldering Flux / 43.5 43.5 Flux Form Versus Soldering Process / 43.6 43.6 Rosin Flux / 43.7 43.7 Water-Soluble Flux / 43.8 43.8 Low Solids Flux / 43.9 43.9 Cleaning Issues / 43.10 43.10 Summary / 43.12 References / 43.12 CONTENTS xiii Part 10 Solder Materials and Processes Chapter 44. Soldering Fundamentals 44.3 44.1 Introduction / 44.3 44.2 Elements of a Solder Joint / 44.4 44.3 The Solder Con
ne
ction to the Circuit Board / 44.4 44.4 The solder Con
ne
ction to the Electrical Compo
ne
nt / 44.5 44.5 Common Metal-Joining Methods / 44.5 44.6 Solder Overview / 44.9 44.7 Soldering Basics / 44.9 Chapter 45. Soldering Materials and Metallurgy 45.1 45.1 Introduction / 45.1 45.2 Solders / 45.2 45.3 Solder Alloys and Corrosion / 45.4 45.4 PB-Free Solders: Search for Alternatives and Implications / 45.5 45.5 PB-Free Elemental Alloy Candidates / 45.5 45.6 Board Surface Finishes / 45.11 References / 45.19 Chapter 46. Solder Fluxes 46.1 46.1 Introduction to Fluxes / 46.1 46.2 Flux Activity and Attributes / 46.2 46.3 Flux: Ideal Versus Reality / 46.3 46.4 Flux Types / 46.4 46.5 Water-Clean (Aqueous) Fluxes / 46.4 46.6 No-Clean Flux / 46.7 46.7 Other Fluxing Caveats / 46.9 46.8 Soldering Atmospheres / 46.12 References / 46.15 Chapter 47. Soldering Techniques 47.1 47.1 Introduction / 47.1 47.2 Mass Soldering Methods / 47.1 47.3 Oven Reflow Soldering / 47.1 47.4 Wave Soldering / 47.28 47.5 Wave Solder Defects / 47.39 4
7.6
Vapor-Phase Reflow Soldering / 47.42 47.7 Laser Reflow Soldering / 47.43 47.8 Tooling and the
Ne
ed for Coplanarity and Intimate Contact / 47.50 47.9 Additional Information Sources / 47.53 47.10 Hot-Bar Soldering / 47.53 47.11 Hot-Gas Soldering / 47.58 47.12 Ultrasonic Soldering / 47.59 References / 4
7.6
1 Chapter 48. Soldering Repair and Rework 48.1 48.1 Introduction / 48.1 48.2 Hot-Gas Repair / 48.1 xiv CONTENTS 48.3 Manual Solder Fountain / 48.5 48.4 Automated Solder Fountain / 48.6 48.5 Laser / 48.6 48.6 Considerations for Repair / 48.6 Reference / 48.7 Part 11 Nonsolder Intercon
ne
ction Chapter 49. Press-Fit Intercon
ne
ction 49.3 49.1 Introduction / 49.3 49.2 The Rise of Press-Fit Technology / 49.3 49.3 Compliant Pin Configurations / 49.4 49.4 Press-Fit Considerations / 49.6 49.5 Press-Fit Pin Materials / 49.7 49.6 Surface Finishes and Effects / 49.8 49.7 Equipment / 49.10 49.8 Assembly Process / 49.11 49.9 Press Routi
ne
s / 49.12 49.10 PWB Design and Board Procurement Tips / 49.14 49.11 Press-Fit Process Tips / 49.15 49.12 Inspection and Testing / 49.16 49.13 Soldering and Press-Fit Pins / 49.17 References / 49.17 Chapter 50. Land Grid Array Intercon
ne
ct 50.1 50.1 Introduction / 50.1 50.2 LGA and the Environment / 50.1 50.3 Elements of the LGA System / 50.2 50.4 Assembly / 50.5 50.5 Printed Circuit Assembly (PCA) Rework / 50.7 50.6 Design Guideli
ne
s / 50.8 Reference / 50.8 Part 12 Quality Chapter 51. Acceptability and Quality of Fabricated Boards 51.3 51.1 Introduction / 51.3 51.2 Specific Quality and Acceptability Criteria by PCB Type / 51.4 51.3 Methods for Verification of Acceptability / 51.6 51.4 Inspection Lot Formation / 51.7 51.5 Inspections Categories / 51.8 51.6 Acceptability and Quality After Simulated Solder Cycle(s) / 51.8 51.7 Nonconforming PCBS and Material Review Board (MRB) Function / 51.10 51.8 The Cost of the Assembled PCB / 51.11 51.9 How to Develop Acceptability and Quality Criteria / 51.11 51.10 Class of Service / 51.13 51.11 Inspection Criteria / 51.13 51.12 Reliability Inspection Using Accelerated Environmental
Ex
posure / 51.32 CONTENTS xv Chapter 52. Acceptability of Printed Circuit Board Assemblies 52.1 52.1 Understanding Customer Requirements / 52.1 52.2 Handling to Protect the PCBA / 52.7 52.3 PCBA Hardware Acceptability Considerations / 52.10 52.4 Compo
ne
nt Installation or Placement Requirements / 52.15 52.5 Compo
ne
nt and PCB Solderability Requirements / 52.25 52.6 Solder-Related Defects / 52.25 52.7 PCBA Laminate Condition, Cleanli
ne
ss, and Marking Requirements / 52.32 52.8 PCBA Coatings / 52.34 52.9 Solderless Wrapping of Wire to Posts (Wire Wrap) / 52.35 52.10 PCBA Modifications / 52.37 References / 52.39 Chapter 53. Assembly Inspection 53.1 53.1 Introduction / 53.1 53.2 Definition of Defects, Faults, Process Indicators, and Potential Defects / 53.3 53.3 Reasons for Inspection / 53.4 53.4 Lead-Free Impact on Inspection / 53.6 53.5 Miniaturization and Higher Compl
ex
ity / 53.8 53.6 Visual Inspection / 53.8 53.7 Automated Inspection / 53.12 53.8 Three-Dimensional Automated Solder Paste Inspection / 53.14 53.9 PRE-Reflow Aoi / 53.16 53.10 Post-Reflow Automated Inspection / 53.17 53.11 Implementation of Inspection Systems / 53.23 53.12 Design Implications of Inspection Systems / 53.24 References / 53.25 Chapter 54. Design for Testing 54.1 54.1 Introduction / 54.1 54.2 Definitions / 54.2 54.3 AD HOC Design for Testability / 54.2 54.4 Structured Design for Testability / 54.4 54.5 Standards-Based Testing / 54.5 References / 54.12 Chapter 55. Loaded Board Testing 55.1 55.1 Introduction / 55.1 55.2 The process of Test / 55.1 55.3 Definitions / 55.4 55.4 Testing Approaches / 55.7 55.5 In-Circuit Test Techniques / 55.11 55.6 Alternatives to Conventional Electrical Tests / 55.17 55.7 Tester Comparison / 55.19 References / 55.20 Part 13 Reliability Chapter 56. Conductive Anodic Filament Formation 56.3 56.1 Introduction / 56.3 56.2 Understanding CAF Formation / 56.3 xvi CONTENTS 56.3 Electrochemical Migration and Formation of CAF / 56.7 56.4 Factors that Affect CAF Formation / 56.10 56.5 Test Method for CAF-Resistant Materials / 56.14 56.6 Manufacturing Tolerance Considerations / 56.14 References / 56.15 Chapter 57. Reliability of Printed Circuit Assemblies 57.1 57.1 Fundamentals of Reliability / 57.2 57.2 Failure Mechanisms of PCBS and Their Intercon
ne
cts / 57.4 57.3 Influence of Design on Reliability / 57.19 57.4 Impact of PCB Fabrication and Assembly on Reliability / 57.20 57.5 Influence of Materials Selection on Reliability / 57.27 5
7.6
Burn-in, Acceptance Testing, and Accelerated Reliability Testing / 57.36 57.7 Summary / 57.45 References / 57.45 Further Reading / 57.47 Chapter 58. Compo
ne
nt-to-PWB Reliability: The Impact of Design Variables and Lead Free 58.1 58.1 Introduction / 58.1 58.2 Packaging Challenges / 58.2 58.3 Variables that Impact Reliability / 58.5 References / 58.30 Chapter 59. Compo
ne
nt-to-PWB Reliability: Estimating Solder-Joint Reliability and the Impact of Lead-Free Solders 59.1 59.1 Introduction / 59.1 59.2 Thermomechanical Reliability / 59.3 59.3 Mechanical Reliability / 59.20 59.4 Finite Element Analysis (FEA) / 59.27 References / 59.35 Part 14 Environmental Issues Chapter 60. Process Waste Minimization and Treatment 60.3 60.1 Introduction / 60.3 60.2 Regulatory Compliance / 60.3 60.3 Major Sources and Amounts of Wastewater in a Printed Circuit Board Fabrication Facility / 60.5 60.4 Waste Minimization / 60.6 60.5 Pollution Prevention Techniques / 60.8 60.6 Recycling and Recovery Techniques / 60.15 60.7 Alternative Treatments / 60.18 60.8 Chemical Treatment Systems / 60.21 60.9 Advantages and Disadvantages of Various Treatment Alternatives / 60.26 CONTENTS xvii Part 15 Fl
ex
ible Circuits Chapter 61. Fl
ex
ible Circuit Applications and Materials 61.3 61.1 Introduction to Fl
ex
ible Circuits / 61.3 61.2 Applications of Fl
ex
ible Circuits / 61.6 61.3 High-Density Fl
ex
ible Circuits / 61.6 61.4 Materials for Fl
ex
ible Circuits / 61.8 61.5 Substrate Material Properties / 61.9 61.6 Conductor Materials / 61.13 61.7 Copper-Clad Laminates / 61.14 61.8 Coverlay Material / 61.19 61.9 Stiffe
ne
r Materials / 61.22 61.10 Adhesive materials / 61.22 61.11 Restriction of Hazardous Substances (RoHS) Issues / 61.23 Chapter 62. Design of Fl
ex
ible Circuits 62.1 62.1 Introduction / 62.1 62.2 Design Procedure / 62.1 62.3 Types of Fl
ex
ible Circuits / 62.2 62.4 Circuit Designs for Fl
ex
ibility / 62.12 62.5 Electrical Design of the Circuits / 62.15 62.6 Circuit Designs for Higher Reliability / 62.16 62.7 Circuit Designs for RoHS Compliance / 62.17 Chapter 63. Manufacturing of Fl
ex
ible Circuits 63.1 63.1 Introduction / 63.1 63.2 Special Issues with HDI Fl
ex
ible Circuits / 63.1 63.3 Basic Process Elements / 63.3 63.4
Ne
w Processes for Fi
ne
Traces / 63.14 63.5 Coverlay Processes / 63.24 63.6 Surface Treatment / 63.30 63.7 Blanking / 63.31 63.8 Stiffe
ne
r Processes / 63.33 63.9 Packaging / 63.33 63.10 Roll-to-Roll Manufacturing / 63.34 63.11 Dimension Control / 63.36 Chapter 64. Termination of Fl
ex
ible Circuits 64.1 64.1 Introduction / 64.1 64.2 Selection of Termination Technologies / 64.1 64.3 Perma
ne
nt Con
ne
ctions / 64.4 64.4 Semiperma
ne
nt Con
ne
ctions / 64.11 64.5 Nonperma
ne
nt Con
ne
ctions / 64.13 64.6 High-Density Fl
ex
ible Circuit Termination / 64.20 Chapter 65. Multilayer Fl
ex
and Rigid/Fl
ex
65.1 65.1 Introduction / 65.1 65.2 Multilayer Rigid/fl
ex
/ 65.1 xviii CONTENTS Chapter 66. Special Constructions of Fl
ex
ible Circuits 66.1 66.1 Introduction / 66.1 66.2 Flying-Lead Construction / 66.1 66.3 Tape Automated Bonding / 66.8 66.4 Microbump Arrays / 66.10 66.5 Thick-Film Conductor Fl
ex
Circuits / 66.12 66.6 Shielding of the Fl
ex
ible Cables / 66.13 66.7 Functional Fl
ex
ible Circuits / 66.14 Chapter 67. Quality Assurance of Fl
ex
ible Circuits 67.1 67.1 Introduction / 67.1 67.2 Basic Concepts in Fl
ex
ible Circuit Quality Assurance / 67.1 67.3 Automatic Optical Inspection Systems / 67.2 67.4 Dimensional Measurements / 67.3 67.5 Electrical Tests / 67.3 6
7.6
Inspection Sequence / 67.3 67.7 Raw Materials / 6
7.6
67.8 Fl
ex
ible Circuit Feature Inspection / 6
7.6
67.9 Standards and Specifications for Fl
ex
ible Circuits / 67.8 Appendix A.1 Glossary G.1 Ind
ex
I.1
Microsoft Library MSDN4DOS.zip
MSL 即 Microsoft Library 是 DOS 版的 "WinHelp",也就是现代版 Help Viewer 的始祖。 安装目录下有个 ini 文件,用来指定图书的路径,它即是目录。 文件来源自 http://wdl2.winworldpc.com/Abandonware%20SDKs/Microsoft Programmer's Library 1.3.7z Microsoft Programmer's Library 1.3.iso 这就是 DOS 版的 MSDN!使用 DOSBOX 就可以运行此库。此库含一大古董级MS官方编程参考材料,主要针对 Windows 3.0 平台,真可谓之应用尽有: MS Windows 3.0 SDK Guide to Programming MS Windows 3.0 SDK Install. & Update Guide MS Windows 3.0 SDK Programmer's Reference Vol. 1 MS Windows 3.0 SDK Programmer's Reference Vol. 2 MS Windows 3.0 SDK Tools MS Windows 3.0 SDK Articles All MS Windows 3.0 SDK Manuals MS Windows 3.0 DDK Install. & Update Guide MS Windows 3.0 DDK Adaptation Guide MS Windows 3.0 DDK Virtual Device Adapt. Guide MS Windows 3.0 DDK Printer & Font Kit All MS Windows 3.0 DDK Manuals MS
Onli
ne
User's Guide Programming MS Windows MS Windows Sample Code MS KnowledgeBase - MS Windows 以及 Options => Library 菜单下提供的 9 个重要的参考资料,其中就有 C 和 MASM 这些重要的参考资料。这些是已安装的目录部分,鉴于 MASM 的重要性,特将其添加到压缩包内,免CD运行: Windows References OS/S References
Ne
twork References MS-DOS References MS Systems Journal Hardware References C References MASM References BASIC References Pascal References FORTUAN References 其中 C References 和 MASM References 包含: Installing and Using MS MASM 6.0 MS MASM 6.0 Reference MS MASM 6.0 Programmer's Guide MS MASM 6.0 White Paper QuickAssembler 2.01 Programmer's Guide MS Mixed-Language Programming Guide CodeView & Utilities User's Guide MS Editor User's Guide MS
OnLi
ne
User's Guide MASM Sample Code MS KnowledgeBase - MASM MS C 6.0 Advanced Programming Techniques MS C 6.0 Installing and Using the P.D.S. MS C 6.0 Reference MS C 6.0 Run-Time Library Reference MS C 6.0 Developer's Toolkit Reference QuickC 2.5 Tool Kit QuickC 2.5 C for Yourself QuickC 2.5 Up and Running QuickC 2.5 Update MS Professional
Vagaa哇嘎画时代--体验群体智慧的力量!
You agree not to use the Software to: 2.1 Transmit or communicate any data that is unlawful, harmful, threatening, abusive, harassing, defamatory, vulgar, obsce
ne
, invasive of another's privacy, hateful, or racially, ethnically or otherwise objectionable; 2.2 Harm minors in any way; 2.3 Impersonate any person or entity or falsely state or otherwise misrepresent your affiliation with a person or entity; 2.4 Forge headers or otherwise manipulate identifiers in order to disguise the origin of any data transmitted to other users; 2.5 Transmit, access or communicate any data that you do not have a right to transmit under any law or under contractual or fiduciary relationships (such as inside information, proprietary and confidential information lear
ne
d or disclosed as part of employment relationships or under non-disclosure agreements); 2.6 Transmit, access or communicate any data that infringes any patent, trademark, trade secret, copyright or other proprietary rights of any party; 2.7 Transmit or communicate any data that contains software viruses or any other computer code, files or programs desig
ne
d to interrupt, destroy or limit the functionality of any computer software or hardware or telecommunications equipment; 2.8 Disrupt the normal flow of dialogue, cause a screen to "scroll" faster than other users are able to type, or otherwise act in a man
ne
r that
ne
gatively affects other users' ability to engage in real time
ex
change
s; 2.9 Interfere with or disrupt the Software; 2.10 Intentionally or unintentionally violate any applicable local, state, national or international law, including securities
ex
change
and any regulations requirements, procedures or policies in force from time to time relating to the Software; 2.11 Monitor traffic or make search requests in order to accumulate information about individual users; 2.12 "Stalk" or otherwise harass another; 2.13 Modify, delete or damage any information contai
ne
d on the personal computer of any Va
Python Cookbook, 2nd Edition
• Table of Contents • Ind
ex
• Reviews • Reader Reviews • Errata • Academic Python Cookbook, 2nd Edition By David Ascher, Al
ex
Martelli, Anna Ravenscroft Publisher : O'Reilly Pub Date : March 2005 ISBN : 0-596-00797-3 Pages : 844 Copyright Preface The Design of the Book The Implementation of the Book Using the Code from This Book Audience Organization Further Reading Conventions Used in This Book How to Contact Us Safari® Enabled Acknowledgments Chapter 1. T
ex
t Introduction Recipe 1.1. Processing a String O
ne
Character at a Time Recipe 1.2. Converting Between Characters and Numeric Codes Recipe 1.3. Testing Whether an Object Is String-like Recipe 1.4. Aligning Strings Recipe 1.5. Trimming Space from the Ends of a String Recipe 1.6. Combining Strings Recipe 1.7. Reversing a String by Words or Characters Recipe 1.8. Checking Whether a String Contains a Set of Characters Recipe 1.9. Simplifying Usage of Strings' translate Method Recipe 1.10. Filtering a String for a Set of Characters Recipe 1.11. Checking Whether a String Is T
ex
t or Binary Recipe 1.12. Controlling Case Recipe 1.13. Accessing Substrings Recipe 1.14. Changing the Indentation of a Multili
ne
String Recipe 1.15.
Ex
panding and Compressing Tabs Recipe 1.16. Interpolating Variables in a String Recipe 1.17. Interpolating Variables in a Stringin Python 2.4 Recipe 1.18. Replacing Multiple Patterns in a Single Pass Recipe 1.19. Checking a String for Any of Multiple Endings Recipe 1.20. Handling International T
ex
t with Unicode Recipe 1.21. Converting Between Unicode and Plain Strings Recipe 1.22. Printing Unicode Charactersto Standard Output
董君的课程社区_NO_1
1
社区成员
202
社区内容
发帖
与我相关
我的任务
董君的课程社区_NO_1
Microsoft MVP/MCT/Udemy 讲师/51CTO 讲师
复制链接
扫一扫
分享
社区描述
Microsoft MVP/MCT/Udemy 讲师/51CTO 讲师
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章