<!--
  Copyright 2019 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 "main_content"}}
<div class="Container">
  <div class="Content">
    <h1 class="Content-header">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>
        {{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>
</div>
{{end}}
