<!--
  Copyright 2021 The Go Authors. All rights reserved.
  Use of this source code is governed by a BSD-style
  license that can be found in the LICENSE file.
-->

{{define "title"}}<title>License Policy - pkg.go.dev</title>{{end}}

{{define "main"}}
  <style>
    .LicenseTypes-list {
      line-height: 1.25rem;
      list-style: initial;
      padding-left: 2.25rem;
    }
  </style>
  <main class="go-Container">
    <div class="go-Content">
      <h1 data-test-id="license-policy-heading">License Disclaimer</h1>
      <p>
        The Go website displays license information in order to help users evaluate
        packages for their intended use. Licenses are detected using heuristics
        based on their file name and contents. We hope this information is helpful,
        but this is not legal advice and we do not make any guarantees regarding
        the accuracy of our license detection.
      </p>
      <p>
        If we are not able to detect one of the licenses below, only
        limited package and module information will be made available. If you are
        a package author seeking to make your content available on the Go
        website, please be aware that our detection algorithms can be affected by
        any modifications of the license text, or by the use of an uncommon
        license file name.
      </p>
      <p>
        We currently use
        <a href="https://pkg.go.dev/github.com/google/licensecheck">github.com/google/licensecheck</a>
        for license detection, and look for licenses in files with the following names:
        {{commaseparate .LicenseFileNames}}. The match is case-insensitive.
      </p>
      <p>
        We currently detect and recognize the following licenses:
        <ul class="LicenseTypes-list">
          {{range .LicenseTypes -}}
            <li>
              {{if .URL -}}
                <a href="{{.URL}}" target="_blank" rel="noopener">{{.Name}}</a>
              {{else}}
                {{.Name}}
              {{- end}}
            </li>
          {{- end}}
        </ul>
      </p>
      <p>
        If you use a package whose license is not detected, please inform the package author.
        If you are a package author who believes a license for one of your packages
        should have been detected and was not, please check for discrepancies between your license
        and the official text. If you still believe there is an error, please
        <a href="https://golang.org/s/pkgsite-feedback">file an issue</a>.
      </p>
    </div>
  </main>
{{end}}
