<!DOCTYPE html>
<html class="no-js" lang="en">
    <head>
        <title>Apache NiFi Licensing Guide</title>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="shortcut icon" href="/assets/images/nifi16.ico"/>
        <link rel="stylesheet" href="/stylesheets/app.min.5c81cf462909783b5f788de8312885d5e08d20aa6dd5f6eb9507dd445444a6cb.css">
        <link rel="stylesheet" href="/assets/stylesheets/font-awesome.min.css">
        <script src="/assets/js/modernizr.js"></script>
        <script src="/assets/js/webfontloader.js"></script>
        <script>
  var _paq = window._paq = window._paq || [];
  _paq.push(['disableCookies']);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var baseUri = "//matomo.privacy.apache.org/";
    _paq.push(['setTrackerUrl', baseUri + 'matomo.php']);
    _paq.push(['setSiteId', '28']);
    var trackerElement = document.createElement('script');
    var firstScriptElement = document.getElementsByTagName('script')[0];
    trackerElement.async = true;
    trackerElement.src = baseUri + 'matomo.js';
    var firstScriptElement = document.getElementsByTagName('script')[0];
    if (window.location.host === 'nifi.apache.org') {
      firstScriptElement.parentNode.insertBefore(trackerElement, firstScriptElement);
    }
  })();
</script>
</head>
    <body><div class="sticky contain-to-grid">
    <nav class="top-bar" data-topbar role="navigation">
        <ul class="title-area">
            <li class="name">
                <h1>
                    <a href="index.html">
                        <img id="logo-top-bar" src="/assets/images/nifi-drop-white.svg" alt="Apache NiFi"/>
                    </a>
                </h1>
            </li>
            
            <li class="toggle-topbar menu-icon"><a href="#"><span></span></a></li>
        </ul>

        <section class="top-bar-section">
            
            <ul class="right">
                <li class="has-dropdown">
                    <a href="#">Project</a>
                    <ul class="dropdown">
                        <li><a href="index.html">Home</a></li>
                        <li><a href="https://blogs.apache.org/nifi/"><i class="fa fa-external-link external-link"></i>Apache NiFi Blog</a></li>
                        <li><a href="https://www.apache.org/licenses/"><i class="fa fa-external-link external-link"></i>License</a></li>
                    </ul>
                </li>
                <li class="has-dropdown">
                    <a href="#">Documentation</a>
                    <ul class="dropdown">
                        <li><a href="faq.html">FAQ</a></li>
                        <li><a href="videos.html">Videos</a></li>
                        <li><a href="docs.html">NiFi Docs</a></li>
                        <li><a href="https://cwiki.apache.org/confluence/display/NIFI"><i class="fa fa-external-link external-link"></i>Wiki</a></li>
                        <li><a href="security.html">NiFi Security Reports</a></li>
                        <li><a href="registry-security.html">NiFi Registry Security Reports</a></li>
                    </ul>
                </li>
                <li class="has-dropdown">
                    <a href="#">Downloads</a>
                    <ul class="dropdown">
                        <li><a href="download.html">Download NiFi</a></li>
                        <li><a href="https://cwiki.apache.org/confluence/display/NIFI/Release+Notes"><i class="fa fa-external-link external-link"></i>Release Notes</a></li>
                    </ul>
                </li>
                <li class="has-dropdown">
                    <a href="#">Community</a>
                    <ul class="dropdown">
                        <li><a href="https://cwiki.apache.org/confluence/display/NIFI/Contributor+Guide"><i class="fa fa-external-link external-link"></i>Contributor Guide</a></li>
                        <li><a href="mailing_lists.html">Mailing Lists &amp; Chat</a></li>
                        <li><a href="people.html">People</a></li>
                        <li><a href="powered-by-nifi.html">Powered by NiFi</a></li>
                    </ul>
                </li>
                <li class="has-dropdown">
                    <a href="#">Development</a>
                    <ul class="dropdown">
                        <li><a href="quickstart.html">Quickstart</a></li>
                        <li><a href="release-guide.html">Release Guide</a></li>
                        <li><a href="gpg.html">GPG Guide</a></li>
                        <li><a href="fds-release-guide.html">FDS Release Guide</a></li>
                        <li><a href="licensing-guide.html">Licensing Guide</a></li>
                        <li><a href="developer-guide.html">Developer Guide</a></li>
                        <li><a href="https://gitbox.apache.org/repos/asf/nifi.git"><i class="fa fa-external-link external-link"></i>Source</a></li>
                        <li><a href="https://issues.apache.org/jira/browse/NIFI"><i class="fa fa-external-link external-link"></i>Issues</a></li>
                        <li><a href="https://github.com/apache/nifi"><i class="fa fa-external-link external-link"></i>GitHub</a></li>
                    </ul>
                </li>
                <li class="has-dropdown">
                    <a href="#">ASF Links</a>
                    <ul class="dropdown">
                        <li><a href="https://www.apache.org"><i class="fa fa-external-link external-link"></i>Apache Software Foundation</a></li>
                        <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="fa fa-external-link external-link"></i>Privacy Policy</a></li>
                        <li><a href="https://www.apache.org/foundation/sponsorship.html"><i class="fa fa-external-link external-link"></i>Sponsorship</a></li>
                        <li><a href="https://www.apache.org/security/"><i class="fa fa-external-link external-link"></i>Security</a></li>
                        <li><a href="https://www.apache.org/foundation/thanks.html"><i class="fa fa-external-link external-link"></i>Thanks</a></li>
                    </ul>
                </li>
                <li class="has-dropdown">
                    <a href="#">Subprojects</a>
                    <ul class="dropdown">
                        <li><a href="minifi/index.html">MiNiFi</a></li>
                        <li><a href="registry.html">Registry</a></li>
                        <li><a href="fds.html">FDS</a></li>
                    </ul>
                </li>
            </ul>
        </section>
    </nav>
</div>

          <div class="row">
            <div class="large-12 columns">
              <div class="large-space"></div>
	<h1 id="apache-nifi-release-guidelines">Apache NiFi Release Guidelines</h1>
<p>This document provides guidance to contributors of Apache NiFi to help properly account for licensing, notice, and legal requirements.</p>
<h4 id="disclaimer">Disclaimer:</h4>
<p>This document is not written by lawyers.  The guidance in this document is meant to compliment Apache Software Foundation guides and policies.  If anything in this document is inconsistent with those then it is a defect in this document.</p>
<h2 id="background-material">Background Material</h2>
<ul>
<li><a href="https://www.apache.org/licenses/LICENSE-2.0">ASLv2</a></li>
<li><a href="https://www.apache.org/dev/apply-license.html">ASF License Apply</a></li>
<li><a href="https://www.apache.org/dev/licensing-howto.html">ASF Licensing How-To</a></li>
<li><a href="https://www.apache.org/legal/resolved.html">ASF Legal Resolved</a></li>
<li><a href="https://www.apache.org/dev/release.html">ASF Release Policy</a></li>
</ul>
<h2 id="how-to-consistently-apply-licensinglegal-notice-information-for-apache-nifi">How to consistently apply licensing/legal notice information for Apache NiFi</h2>
<h3 id="apply-the-source-header-to-each-source-file">Apply the source header to each source file</h3>
<p>Every source file for works submitted directly to the ASF must follow: <a href="https://www.apache.org/legal/src-headers.html#headers">https://www.apache.org/legal/src-headers.html#headers</a></p>
<p>Question: Every source file? What about test files and so on?
Answer: There are a few exceptions.  Test files can be argued to have no degree of creativity.  We also need our test materials at times to be exactly as they will be found in the wild.  We should ensure test files have the license when possible but not to the point that it requires altering the test itself.
<a href="https://www.apache.org/legal/src-headers.html#faq-exceptions">https://www.apache.org/legal/src-headers.html#faq-exceptions</a></p>
<p>Question: Do items which are generated from source during the build process require the header?
Answer: Taken directly from <a href="https://incubator.apache.org/guides/releasemanagement.html#notes-license-headers">https://incubator.apache.org/guides/releasemanagement.html#notes-license-headers</a> it reads:
&ldquo;Copyright may not subsist in a document which is generated by an transformation from an original. In which case, the license header may be unnecessary. License headers should always be present in the original. Where it is reasonable to do so, the templates should also add the license header to the generated documents.&rdquo;</p>
<h3 id="apply-the-proper-notice--license-information">Apply the proper NOTICE / LICENSE Information</h3>
<p>For every addition or removal of a 3rd party work as a dependency or as pulled into our source directly we must ensure full
accounting of the correct LICENSE and NOTICE information.</p>
<p>Our source release must only account for the LICENSE/NOTICE of items that are actually in the source release itself.<br>
Binary dependencies which are pulled in during the generation of a binary convenience package should not have their
LICENSE/NOTICE data in the source release.  But, they must be accounted for in the binary package.</p>
<p>The LICENSE and NOTICE files found at the root of the Apache NiFi (nifi) component is considered &lsquo;The&rsquo; LICENSE/NOTICE
covering the source release of &lsquo;nifi&rsquo; and all subcomponents.</p>
<p>The LICENSE and NOTICE files found within the &lsquo;nifi-assembly&rsquo; is considered &lsquo;The&rsquo; LICENSE/NOTICE pair covering the binary
convenience package of &lsquo;nifi&rsquo; (tar.gz, ZIP, etc..)</p>
<p>The Release Manager (RM) of a given release is responsible for checking all subcomponents for the presence of specific
LICENSE/NOTICE to gather all source dependency clauses as needed and place them into the overall LICENSE/NOTICE for the
source release.  If generating a binary convenience package the RM will gather up a listing of all binary dependencies
as called out on subcomponents (including the assembly itself), which can contain binary dependencies, and promote
their specific NOTICE/LICENSE text to the binary package LICENSE/NOTICE associated with the assembly.  The binary package
LICENSE/NOTICE then should be a combination of source license data and binary license data.</p>
<p>A binary artifact is any artifact which is created as the result of &ldquo;compiling&rdquo; or processing a source artifact.</p>
<p>For every subcomponent of nifi some binary artifact is produced because we make these things available as Maven artifacts.  You must consider whether that artifact stands on its own as built from source or whether that artifact is comprised of materials built from source combined with other binary artifacts pulled in as dependencies.</p>
<p>In the case of subcomponents which produce binary artifacts which stand on their own (as would be typical in most Jar
files) then you must only account for any 3rd party works source dependencies.  If you have any 3rd party works source
dependencies then you should create or edit the LICENSE and/or NOTICE local to that subcomponent AND modify the
NOTICE and/or LICENSE of the top level nifi source.</p>
<p>In the case of subcomponents which produce binary artifacts which themselves can bundle 3rd party works (as would be
typical in a NAR, WAR, tar.gz, zip bundle) then you must ensure that the subcomponent binary artifact itself includes
a full and complete LICENSE and/or NOTICE as needed to cover those 3rd party works.  For every modification to the
subcomponent LICENSE/NOTICE for a given 3rd party work the overall Apache NiFi source and binary LICENSE/NOTICE pairs
need to be updated and/or verified as well.</p>
<p>To provide a subcomponent local LICENSE/NOTICE ensure there is a &lsquo;src/main/resources/META-INF/NOTICE&rsquo; and
&lsquo;src/main/resources/META-INF/LICENSE&rsquo; as needed.  During the build process Maven will place them in the customary
locations for the binary artifact.  This way for every binary artifact produced from Apache NiFi there will be a
local and accurate LICENSE/NOTICE for that artifact.</p>
<h3 id="how-to-go-about-working-with-the-licensenotice-modifications">How to go about working with the LICENSE/NOTICE modifications</h3>
<p>If the dependency is a source dependency (for example: you copied in javascript, css, java source files from a website) then you
must ensure it is from <a href="https://www.apache.org/legal/resolved.html#category-a">Category-A</a> licenses.</p>
<p>If the dependency is a binary dependency (for example: maven pulled in a jar file) then you must ensure it is either from
<a href="https://www.apache.org/legal/resolved.html#category-a">Category-A</a> or
<a href="https://www.apache.org/legal/resolved.html#category-b">Category-B</a>.</p>
<p>The key guides for how to apply the LICENSE/NOTICE is found in the following:</p>
<ul>
<li><a href="https://www.apache.org/legal/src-headers.html#3party">Source Headers</a></li>
<li><a href="https://www.apache.org/legal/resolved.html#required-third-party-notices.">Third Party Notices</a></li>
<li><a href="https://www.apache.org/dev/licensing-howto.html#mod-notice">How to modify the NOTICE</a></li>
</ul>
<p>Specific guidance for handling LICENSE/NOTICE application for typical MIT/BSD licenses is
described <a href="https://www.apache.org/dev/licensing-howto.html#permissive-deps">here</a>.  For understanding what to put in the
LICENSE file look at the license of the 3rd party work.  BSD licenses for instance have this statement &ldquo;Redistributions
in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.&rdquo;  In the event you cannot find the actual
Copyright statement for a dependency then place a link to the license text they claim and indicate no copyright marks
found and provide a link to the project website.</p>
<p>Specific guidance for handling Apache Licensed dependencies is describe <a href="https://www.apache.org/dev/licensing-howto.html#alv2-dep">here</a>.
&ldquo;If the dependency supplies a NOTICE file, its contents must be analyzed and the relevant portions bubbled up into the top-level NOTICE file.&rdquo;</p>
<p>Specific guidance for handling other ASF projects is found <a href="https://www.apache.org/dev/licensing-howto.html#bundle-asf-product">here</a>.
&ldquo;It is not necessary to duplicate the line &ldquo;This product includes software developed at the Apache Software
Foundation&hellip;&rdquo;, though the ASF copyright line and any other portions of NOTICE must be considered for propagation.&rdquo;</p>
<p>Specific guidance for handling LICENSE/NOTICE information for category-B licensed works is <a href="https://www.apache.org/legal/resolved.html#category-b">here</a>.
Place an entry in the notice indicating the work is included in binary distribution.  Provide a link to the
homepage of the work.  Indicate it&rsquo;s license.  Group like licensed items together. &ldquo;By attaching a prominent label to
the distribution and requiring an explicit action by the user to get the reciprocally-licensed source, users are less
likely to be unaware of restrictions significantly different from those of the Apache License. Please include the URL
to the product&rsquo;s homepage in the prominent label.&rdquo; You should not modify the LICENSE file to include the LICENSE
information of the 3rd party work in this case.  That is explained nicely in <a href="https://opensource.org/faq#copyleft">https://opensource.org/faq#copyleft</a> as
stated &ldquo;Copyleft provisions apply only to actual derivatives, that is, cases where an existing copylefted work was
modified. Merely distributing a copyleft work alongside a non-copyleft work does not cause the latter to fall under
the copyleft terms.&rdquo;</p>
<p>Specific guidance for handling works in the public domain is <a href="https://www.apache.org/legal/resolved.html#can-works-placed-in-the-public-domain-be-included-in-apache-products">here</a></p>

</div>
          </div>
        <div class="row">
    <div class="large-12 columns footer">
        <a href="https://www.apache.org">
            <img id="asf-logo" alt="Apache Software Foundation" src="/assets/images/asf_logo.png" width="200" style="margin:0px 10px" />
        </a>
        <a  href="https://www.apache.org/events/current-event.html">
            <img src="https://www.apache.org/events/current-event-234x60.png" style="margin:0px 10px" />
        </a>
        <div id="copyright">
            <p>Copyright &#169; 2022 The Apache Software Foundation, Licensed under the <a
                    href="https://www.apache.org/licenses/">Apache License, Version 2.0</a>.<br/>Apache, the
                Apache feather logo, NiFi, Apache NiFi and the project logo are trademarks of The Apache Software
                Foundation.</p>
        </div>
    </div>
</div>
        <script src="/assets/js/jquery.min.js"></script>
        <script src="/assets/js/foundation.js"></script>
        <script src="/assets/js/app.js"></script>
    </body>
</html>