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