CONTRIBUTING.md revision 1.1.1.10 1 <!--
2 Copyright (C) Internet Systems Consortium, Inc. ("ISC")
3
4 SPDX-License-Identifier: MPL-2.0
5
6 This Source Code Form is subject to the terms of the Mozilla Public
7 License, v. 2.0. If a copy of the MPL was not distributed with this
8 file, you can obtain one at https://mozilla.org/MPL/2.0/.
9
10 See the COPYRIGHT file distributed with this work for additional
11 information regarding copyright ownership.
12 -->
13 ## BIND 9 Source Access and Contributor Guidelines
14 *Nov 26, 2024*
15
16 ### Contents
17
18 1. [Access to source code](#access)
19 1. [Reporting bugs](#bugs)
20 1. [Contributing code](#contrib)
21 1. [Generated code](#generated-code)
22
23 ### Introduction
24
25 Thank you for using BIND 9!
26
27 BIND is open source software that implements the Domain Name System (DNS)
28 protocols for the Internet. It is a reference implementation of those
29 protocols, but it is also production-grade software, suitable for use in
30 high-volume and high-reliability applications. It is very
31 widely used DNS software, providing a robust and stable platform on top of
32 which organizations can build distributed computing systems with the
33 knowledge that those systems are fully compliant with published DNS
34 standards.
35
36 BIND is and will always remain free and openly available. It can be
37 used and modified in any way by anyone.
38
39 BIND is maintained by [Internet Systems Consortium](https://www.isc.org),
40 a public-benefit 501(c)(3) nonprofit, using a "managed open source" approach:
41 anyone can see the source, but only ISC employees have commit access.
42 In the past, the source could only be seen once ISC had published
43 a release; read access to the source repository was restricted just
44 as commit access was. That has changed, as ISC now provides a
45 public git repository of the BIND source tree (see below).
46
47 At ISC, we're committed to
48 building communities that are welcoming and inclusive: environments where people
49 are encouraged to share ideas, treat each other with respect, and collaborate
50 towards the best solutions. To reinforce our commitment, ISC
51 has adopted a slightly modified version of the Django
52 [Code of Conduct](https://gitlab.isc.org/isc-projects/bind9/-/blob/main/CODE_OF_CONDUCT.md)
53 for the BIND 9 project, as well as for the conduct of our developers throughout
54 the industry.
55
56 ### <a name="access"></a>Access to source code
57
58 Public BIND releases are always available from the
59 [ISC FTP site](ftp://ftp.isc.org/isc/bind9).
60
61 A public-access git repository is also available at
62 [https://gitlab.isc.org](https://gitlab.isc.org). This repository
63 contains all public release branches. Upcoming releases can be viewed in
64 their current state at any time. Short-lived development branches
65 contain unreviewed work in progress. Commits which address security
66 vulnerablilities are withheld until after public disclosure.
67
68 You can browse the source online via
69 [https://gitlab.isc.org/isc-projects/bind9](https://gitlab.isc.org/isc-projects/bind9)
70
71 To clone the repository, use:
72
73 > $ git clone https://gitlab.isc.org/isc-projects/bind9.git
74
75 Release branch names are of the form `bind-9.X`, where X represents the second
76 number in the BIND 9 version number. So, to check out the BIND 9.20
77 branch, use:
78
79 > $ git checkout bind-9.20
80
81 Whenever a branch is ready for publication, a tag is placed of the
82 form `v9.X.Y`. The 9.20.0 release, for instance, is tagged as `v9.20.0`.
83
84 The branch in which the next major release is being developed is called
85 `main`.
86
87 ### <a name="bugs"></a>Reporting bugs
88
89 Reports of flaws in the BIND package, including software bugs, errors
90 in the documentation, missing files in the tarball, suggested changes
91 or requests for new features, etc., can be filed using
92 [https://gitlab.isc.org/isc-projects/bind9/issues](https://gitlab.isc.org/isc-projects/bind9/issues).
93
94 Due to a large ticket backlog, we are sometimes slow to respond,
95 especially if a bug is cosmetic or if a feature request is vague or
96 low in priority, but we try at least to acknowledge legitimate
97 bug reports within a week.
98
99 ISC's GitLab system is publicly readable; however, you must have
100 an account to create a new issue. You can either register locally or
101 use credentials from an existing account at GitHub, GitLab, Google,
102 Twitter, or Facebook.
103
104 ### Reporting possible security issues
105
106 See `SECURITY.md`.
107
108 ### <a name="contrib"></a>Contributing code
109
110 BIND is licensed under the
111 [Mozilla Public License 2.0](https://www.mozilla.org/en-US/MPL/2.0/).
112 Earlier versions (BIND 9.10 and earlier) were licensed under the
113 [ISC License](https://www.isc.org/licenses/)
114
115 ISC does not require an explicit copyright assignment for patch
116 contributions. However, by submitting a patch to ISC, you implicitly
117 certify that you are the author of the code, that you intend to relinquish
118 exclusive copyright, and that you grant permission to publish your work
119 under the open source license used for the BIND version(s) to which your
120 patch will be applied.
121
122 #### <a name="bind"></a>BIND code
123
124 Patches for BIND may be submitted directly via merge requests in
125 [ISC's GitLab](https://gitlab.isc.org/isc-projects/bind9/) source repository for
126 BIND. Please contact ISC and provide your GitLab username in order to be allowed
127 to fork the project and submit merge requests.
128
129 Patches can also be submitted as diffs against a specific version of
130 BIND -- preferably the current top of the `main` branch. Diffs may
131 be generated using either `git format-patch` or `git diff`.
132
133 Those wanting to write code for BIND may be interested in the
134 [developer information](doc/dev/dev.md) page, which includes information
135 about BIND design and coding practices, including discussion of internal
136 APIs and overall system architecture.
137
138 Every patch submitted is reviewed by ISC engineers following our
139 [code review process](doc/dev/dev.md#reviews) before it is merged.
140
141 It may take considerable time to review patch submissions, especially if
142 they don't meet ISC style and quality guidelines. If a patch is a good
143 idea, we can and will do additional work to bring it up to par, but if
144 we're busy with other work, it may take us a long time to get to it.
145
146 To ensure your patch is acted on as promptly as possible, please:
147
148 * Try to adhere to the [BIND 9 coding style](doc/dev/style.md).
149 * Run unit and system tests to ensure your change hasn't caused any
150 functional regressions (these can be checked in the CI pipeline).
151 * Document your work, both in the patch itself and in the
152 accompanying email.
153 * In patches that make non-trivial functional changes, include system
154 tests if possible; when introducing or substantially altering a
155 library API, include unit tests. See [Testing](doc/dev/dev.md#testing)
156 for more information.
157
158 ##### Changes to `configure`
159
160 If you need to make changes to `configure`, you should not edit it
161 directly; instead, edit `configure.ac`, then run `autoconf`. Similarly,
162 instead of editing `config.h.in` directly, edit `configure.ac` and run
163 `autoheader`.
164
165 When submitting a patch as a diff, it's fine to omit the `configure`
166 diffs to save space. Just send the `configure.ac` diffs and we'll
167 generate the new `configure` during the review process.
168
169 ##### Documentation
170
171 All functional changes should be documented. There are three types
172 of documentation in the BIND source tree:
173
174 * Man pages are kept alongside the source code for the commands
175 they document, in files ending in `.rst`: for example, the
176 `named` man page is `bin/named/named.rst`.
177 * The *BIND 9 Administrator Reference Manual* is in the .rst files in
178 `doc/arm/`; the HTML version is automatically generated from
179 the `.rst` files.
180 * API documentation is in the header file describing the API, in
181 Doxygen-formatted comments.
182
183 Patches to improve existing documentation are also very welcome!
184
185 ##### Tests
186
187 BIND is a large and complex project. We rely heavily on continuous
188 automated testing and cannot merge new code without adequate test coverage.
189 Please see [the "Testing" section of doc/dev/dev.md](doc/dev/dev.md#testing)
190 for more information.
191
192 ### <a name="generated-code"></a>Guidelines for Tool-Generated Content
193
194 #### Purpose
195
196 BIND 9 contributors have long used tooling to assist in development.
197 These tools can increase the volume and velocity of contributions. At
198 the same time, reviewer and maintainer bandwidth is a scarce resource,
199 and the stability of DNS software is critical infrastructure.
200 Understanding which portions of a contribution come from humans versus
201 tools is helpful to maintain those resources, assess risk, and keep
202 BIND 9 development healthy.
203
204 The goal here is to clarify community expectations around tools,
205 particularly LLMs (Large Language Models) and generative AI. This
206 lets everyone become more productive while maintaining high degrees of
207 trust between submitters and reviewers.
208
209 #### Out of Scope
210
211 These guidelines do not apply to tools that make trivial tweaks to
212 preexisting content or verify adherence to style guides. Nor do they
213 pertain to AI tooling that helps with menial tasks. Some examples:
214
215 - Spelling and grammar fix-ups, like rephrasing documentation to the
216 imperative voice.
217 - Typing aids like IDE identifier completion, common boilerplate, or
218 trivial pattern completion.
219 - Purely mechanical transformations like variable renaming across a
220 scope.
221 - Reformatting using the standard BIND 9 clang-format configuration
222 or black (for Python system tests).
223
224 Even if your tool use is out of scope, you should still always
225 consider if it would assist the review of your contribution if the
226 reviewer knows about the tool that you used.
227
228 #### In Scope
229
230 These guidelines apply when a meaningful amount of content in a BIND 9
231 contribution (code, documentation, or tests) was not written by a
232 person contributing the patch or merge request, but was instead
233 created by a tool.
234
235 Detection of a problem and testing the fix for it is also part of the
236 development process; if a tool was used to find a problem addressed by
237 a change (e.g., a fuzzer or static analyzer), that should be noted in
238 the commit message or MR description. This not only gives credit where
239 it is due, it also helps fellow developers find out about these tools.
240
241 Some examples:
242
243 - Complex semantic patches generated by Coccinelle scripts.
244 - A chatbot or AI assistant generated a new function in your Merge
245 Request to handle a specific DNS RR type.
246 - A .c file or system test in the MR was originally generated by a
247 coding assistant but cleaned up by hand.
248 - The commit message or MR description was generated by handing the
249 diff to a generative AI tool.
250 - Documentation or comments were translated from another language
251 using an automated tool.
252
253 If in doubt, choose transparency and assume these guidelines apply to
254 your contribution.
255
256 #### Guidelines
257
258 You are responsible for the code you submit, regardless of how it was generated.
259 When opening a Merge Request, be transparent about the origin of content in the
260 MR description and commit messages. You can be more transparent by adding
261 information like this:
262
263 - What tools were used?
264 - The input to the tools you used, like the Coccinelle source script
265 or specific configuration.
266 - If code was largely generated from a single or short set of
267 prompts, include those prompts. For longer sessions, include a
268 summary of the prompts and the nature of the resulting assistance.
269 - Which portions of the content were affected by that tool?
270 - How is the submission tested? (e.g., "I used tool X to generate a
271 system test case that triggers the bug.")
272
273 As with all contributions, BIND 9 maintainers have discretion to
274 choose how they handle the contribution. For example, they might:
275
276 - Treat it just like any other contribution.
277 - Reject it outright if the provenance is unclear or the code quality
278 is low.
279 - Treat the contribution specially, such as reviewing with extra
280 scrutiny regarding memory safety or RFC compliance.
281 - Suggest a better prompt or approach instead of suggesting specific
282 code changes.
283 - Ask the submitter to explain in more detail about the contribution
284 to ensure the submitter fully understands the DNS logic or internal
285 BIND 9 architecture implemented by the tool.
286
287 #### Thanks
288
289 Thank you for your interest in contributing to the ongoing development
290 of BIND 9.
291