# Notes for NLSR developers

If you are new to the NDN software community, please read our
[Contributor's Guide](https://github.com/named-data/.github/blob/main/CONTRIBUTING.md).

## Licensing requirements

Contributions to NLSR must be licensed under the GPL v3 or a compatible license.
If you choose the GPL v3, please use the following license boilerplate in all `.hpp`
and `.cpp` files:

    /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
    /*
     * Copyright (c) [Year(s)], [Copyright Holder(s)].
     *
     * This file is part of NLSR (Named-data Link State Routing).
     * See AUTHORS.md for complete list of NLSR authors and contributors.
     *
     * NLSR is free software: you can redistribute it and/or modify it under the terms
     * of the GNU General Public License as published by the Free Software Foundation,
     * either version 3 of the License, or (at your option) any later version.
     *
     * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     * PURPOSE.  See the GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License along with
     * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
     */

If you are affiliated with an NSF-supported NDN project institution, please use the [NDN Team License
Boilerplate](https://redmine.named-data.net/projects/nlsr/wiki/NDN_Team_License_Boilerplate_(NLSR)).

## Recommendations

NLSR code is subject to the code style defined
[here](https://redmine.named-data.net/projects/nfd/wiki/CodeStyle).

NLSR Developer's guide can be found
[here](https://github.com/named-data/NLSR/blob/developers-guide/NLSR-Developers-Guide.pdf).
