CONTRIBUTING.md revision 1.1 1 <!--
2 - Copyright (C) Internet Systems Consortium, Inc. ("ISC")
3 -
4 - This Source Code Form is subject to the terms of the Mozilla Public
5 - License, v. 2.0. If a copy of the MPL was not distributed with this
6 - file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 -
8 - See the COPYRIGHT file distributed with this work for additional
9 - information regarding copyright ownership.
10 -->
11 ## BIND Source Access and Contributor Guidelines
12 *Feb 22, 2018*
13
14 ### Contents
15
16 1. [Access to source code](#access)
17 1. [Reporting bugs](#bugs)
18 1. [Contributing code](#contrib)
19
20 ### Introduction
21
22 Thank you for using BIND!
23
24 BIND is open source software that implements the Domain Name System (DNS)
25 protocols for the Internet. It is a reference implementation of those
26 protocols, but it is also production-grade software, suitable for use in
27 high-volume and high-reliability applications. It is by far the most
28 widely used DNS software, providing a robust and stable platform on top of
29 which organizations can build distributed computing systems with the
30 knowledge that those systems are fully compliant with published DNS
31 standards.
32
33 BIND is and will always remain free and openly available. It can be
34 used and modified in any way by anyone.
35
36 BIND is maintained by the [Internet Systems Consortium](https://www.isc.org),
37 a public-benefit 501(c)(3) nonprofit, using a "managed open source" approach:
38 anyone can see the source, but only ISC employees have commit access.
39 Until recently, the source could only be seen once ISC had published
40 a release: read access to the source repository was restricted just
41 as commit access was. That's now changing, with the opening of a
42 public git mirror to the BIND source tree (see below).
43
44 ### <a name="access"></a>Access to source code
45
46 Public BIND releases are always available from the
47 [ISC FTP site](ftp://ftp.isc.org/isc/bind9).
48
49 A public-access GIT repository is also available at
50 [https://gitlab.isc.org](https://gitlab.isc.org).
51 This repository is a mirror, updated several times per day, of the
52 source repository maintained by ISC. It contains all the public release
53 branches; upcoming releases can be viewed in their current state at any
54 time. It does *not* contain development branches or unreviewed work in
55 progress. Commits which address security vulnerablilities are withheld
56 until after public disclosure.
57
58 You can browse the source online via
59 [https://gitlab.isc.org/isc-projects/bind9](https://gitlab.isc.org/isc-projects/bind9)
60
61 To clone the repository, use:
62
63 > $ git clone https://gitlab.isc.org/isc-projects/bind9.git
64
65 Release branch names are of the form `v9_X`, where X represents the second
66 number in the BIND 9 version number. So, to check out the BIND 9.12
67 branch, use:
68
69 > $ git checkout v9_12
70
71 Whenever a branch is ready for publication, a tag will be placed of the
72 form `v9_X_Y`. The 9.12.0 release, for instance, is tagged as `v9_12_0`.
73
74 The branch in which the next major release is being developed is called
75 `master`.
76
77 ### <a name="bugs"></a>Reporting bugs
78
79 Reports of flaws in the BIND package, including software bugs, errors
80 in the documentation, missing files in the tarball, suggested changes
81 or requests for new features, etc, can be filed using
82 [https://gitlab.isc.org/isc-projects/bind9/issues](https://gitlab.isc.org/isc-projects/bind9/issues).
83
84 Due to a large ticket backlog, we are sometimes slow to respond,
85 especially if a bug is cosmetic or if a feature request is vague or
86 low in priority, but we will try at least to acknowledge legitimate
87 bug reports within a week.
88
89 ISC's ticketing system is publicly readable; however, you must have
90 an account to file a new issue. You can either register locally or
91 use credentials from an existing account at GitHub, GitLab, Google,
92 Twitter, or Facebook.
93
94 ### Reporting possible security issues
95 If you think you may be seeing a potential security vulnerability in BIND
96 (for example, a crash with REQUIRE, INSIST, or ASSERT failure), please
97 report it immediately by emailing to security-officer (a] isc.org. Plain-text
98 e-mail is not a secure choice for communications concerning undisclosed
99 security issues so please encrypt your communications to us if possible,
100 using the [ISC Security Officer public key](https://www.isc.org/downloads/software-support-policy/openpgp-key/).
101
102 Do not discuss undisclosed security vulnerabilites on any public mailing list.
103 ISC has a long history of handling reported vulnerabilities promptly and
104 effectively and we respect and acknowledge responsible reporters.
105
106 ISC's Security Vulnerability Disclosure Policy is documented at [https://kb.isc.org/article/AA-00861/0](https://kb.isc.org/article/AA-00861/0).
107
108 If you have a crash, you may want to consult
109 [What to do if your BIND or DHCP server has crashed.](https://kb.isc.org/article/AA-00340/89/What-to-do-if-your-BIND-or-DHCP-server-has-crashed.html)
110
111 ### <a name="bugs"></a>Contributing code
112
113 BIND is licensed under the
114 [Mozilla Public License 2.0](http://www.isc.org/downloads/software-support-policy/isc-license/).
115 Earier versions (BIND 9.10 and earlier) were licensed under the [ISC License](http://www.isc.org/downloads/software-support-policy/isc-license/)
116
117 ISC does not require an explicit copyright assignment for patch
118 contributions. However, by submitting a patch to ISC, you implicitly
119 certify that you are the author of the code, that you intend to reliquish
120 exclusive copyright, and that you grant permission to publish your work
121 under the open source license used for the BIND version(s) to which your
122 patch will be applied.
123
124 #### <a name="bind"></a>BIND code
125
126 Patches for BIND may be submitted directly via merge requests in
127 [ISC's Gitlab](https://gitlab.isc.org/isc-projects/bind9/) source
128 repository for BIND.
129
130 Patches can also be submitted as diffs against a specific version of
131 BIND -- preferably the current top of the `master` branch. Diffs may
132 be generated using either `git format-patch` or `git diff`.
133
134 Those wanting to write code for BIND may be interested in the
135 [developer information](doc/dev/dev.md) page, which includes information
136 about BIND design and coding practices, including discussion of internal
137 APIs and overall system architecture. (This is a work in progress, and
138 still quite preliminary.)
139
140 Every patch submitted will be reviewed by ISC engineers following our
141 [code review process](doc/dev/dev.md#reviews) before it is merged.
142
143 It may take considerable time to review patch submissions, especially if
144 they don't meet ISC style and quality guidelines. If a patch is a good
145 idea, we can and will do additional work to bring it up to par, but if
146 we're busy with other work, it may take us a long time to get to it.
147
148 To ensure your patch is acted on as promptly as possible, please:
149
150 * Try to adhere to the [BIND 9 coding style](doc/dev/style.md).
151 * Run `make` `check` to ensure your change hasn't caused any
152 functional regressions.
153 * Document your work, both in the patch itself and in the
154 accompanying email.
155 * In patches that make non-trivial functional changes, include system
156 tests if possible; when introducing or substantially altering a
157 library API, include unit tests. See [Testing](doc/dev/dev.md#testing)
158 for more information.
159
160 ##### Changes to `configure`
161
162 If you need to make changes to `configure`, you should not edit it
163 directly; instead, edit `configure.in`, then run `autoconf`. Similarly,
164 instead of editing `config.h.in` directly, edit `configure.in` and run
165 `autoheader`.
166
167 When submitting a patch as a diff, it's fine to omit the `configure`
168 diffs to save space. Just send the `configure.in` diffs and we'll
169 generate the new `configure` during the review process.
170
171 ##### Documentation
172
173 All functional changes should be documented. There are three types
174 of documentation in the BIND source tree:
175
176 * Man pages are kept alongside the source code for the commands
177 they document, in files ending in `.docbook`; for example, the
178 `named` man page is `bin/named/named.docbook`.
179 * The *BIND 9 Administrator Reference Manual* is mostly in
180 `doc/arm/Bv9ARM-book.xml`, plus a few other XML files that are included
181 in it.
182 * API documentation is in the header file describing the API, in
183 Doxygen-formatted comments.
184
185 It is not necessary to edit any documentation files other than these;
186 all PDF, HTML, and `nroff`-format man page files will be updated
187 automatically from the `docbook` and `XML` files after merging.
188
189 Patches to improve existing documentation are also very welcome!
190
191 ##### Tests
192
193 BIND is a large and complex project. We rely heavily on continuous
194 automated testing and cannot merge new code without adequate test coverage.
195 Please see [the 'Testing' section of doc/dev/dev.md](doc/dev/dev.md#testing)
196 for more information.
197
198 #### Thanks
199
200 Thank you for your interest in contributing to the ongoing development
201 of BIND.
202