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