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