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