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