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 `bind-9.X`, where X represents the second 75number in the BIND 9 version number. So, to check out the BIND 9.18 76branch, use: 77 78> $ git checkout bind-9.18 79 80Whenever a branch is ready for publication, a tag is placed of the 81form `v9.X.Y`. The 9.18.0 release, for instance, is tagged as `v9.18.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 105See `SECURITY.md`. 106 107### <a name="contrib"></a>Contributing code 108 109BIND is licensed under the 110[Mozilla Public License 2.0](https://www.mozilla.org/en-US/MPL/2.0/). 111Earlier versions (BIND 9.10 and earlier) were licensed under the 112[ISC License](https://www.isc.org/licenses/) 113 114ISC does not require an explicit copyright assignment for patch 115contributions. However, by submitting a patch to ISC, you implicitly 116certify that you are the author of the code, that you intend to relinquish 117exclusive copyright, and that you grant permission to publish your work 118under the open source license used for the BIND version(s) to which your 119patch will be applied. 120 121#### <a name="bind"></a>BIND code 122 123Patches for BIND may be submitted directly via merge requests in 124[ISC's GitLab](https://gitlab.isc.org/isc-projects/bind9/) source 125repository for BIND. 126 127Patches can also be submitted as diffs against a specific version of 128BIND -- preferably the current top of the `main` branch. Diffs may 129be generated using either `git format-patch` or `git diff`. 130 131Those wanting to write code for BIND may be interested in the 132[developer information](doc/dev/dev.md) page, which includes information 133about BIND design and coding practices, including discussion of internal 134APIs and overall system architecture. 135 136Every patch submitted is reviewed by ISC engineers following our 137[code review process](doc/dev/dev.md#reviews) before it is merged. 138 139It may take considerable time to review patch submissions, especially if 140they don't meet ISC style and quality guidelines. If a patch is a good 141idea, we can and will do additional work to bring it up to par, but if 142we're busy with other work, it may take us a long time to get to it. 143 144To ensure your patch is acted on as promptly as possible, please: 145 146* Try to adhere to the [BIND 9 coding style](doc/dev/style.md). 147* Run `make check` to ensure your change hasn't caused any 148 functional regressions. 149* Document your work, both in the patch itself and in the 150 accompanying email. 151* In patches that make non-trivial functional changes, include system 152 tests if possible; when introducing or substantially altering a 153 library API, include unit tests. See [Testing](doc/dev/dev.md#testing) 154 for more information. 155 156##### Changes to `configure` 157 158If you need to make changes to `configure`, you should not edit it 159directly; instead, edit `configure.in`, then run `autoconf`. Similarly, 160instead of editing `config.h.in` directly, edit `configure.in` and run 161`autoheader`. 162 163When submitting a patch as a diff, it's fine to omit the `configure` 164diffs to save space. Just send the `configure.in` diffs and we'll 165generate the new `configure` during the review process. 166 167##### Documentation 168 169All functional changes should be documented. There are three types 170of documentation in the BIND source tree: 171 172* Man pages are kept alongside the source code for the commands 173 they document, in files ending in `.rst`: for example, the 174 `named` man page is `bin/named/named.rst`. 175* The *BIND 9 Administrator Reference Manual* is in the .rst files in 176 `doc/arm/`; the PDF and HTML versions are automatically generated from 177 the `.rst` files. 178* API documentation is in the header file describing the API, in 179 Doxygen-formatted comments. 180 181Patches to improve existing documentation are also very welcome! 182 183##### Tests 184 185BIND is a large and complex project. We rely heavily on continuous 186automated testing and cannot merge new code without adequate test coverage. 187Please see [the "Testing" section of doc/dev/dev.md](doc/dev/dev.md#testing) 188for more information. 189 190#### Thanks 191 192Thank you for your interest in contributing to the ongoing development 193of BIND 9. 194