[dpdk-dev,v3,1/4] Introducing SPDX License Identifiers

Message ID 1512718913-11462-1-git-send-email-hemant.agrawal@nxp.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel-compilation success Compilation OK

Commit Message

Hemant Agrawal Dec. 8, 2017, 7:41 a.m. UTC
  The DPDK uses the Open Source BSD-3-Clause license for the core libraries
and drivers. The kernel components are naturally GPLv2 licensed.

Many of the files in the DPDK source code contain the full text of the
applicable license. For example, most of the BSD-3-Clause files contain a
full copy of the BSD-3-Clause license text.

Including big blocks of License headers in all files blows up the source
code with mostly redundant information.  An additional problem is that even
the same licenses are referred to by a number of slightly varying text
blocks (full, abbreviated, different indentation, line wrapping and/or
white space, with obsolete address information, ...) which makes validation
and automatic processing a nightmare.

To make this easier, DPDK is adpoting the use of a single line reference to
Unique License Identifiers in source files as defined by the Linux
Foundation's SPDX project [1].

Adding license information in this fashion, rather than adding full license
text, can be more efficient for developers; decreases errors; and improves
automated detection of licenses. The current set of valid, predefined SPDX
identifiers is set forth on the SPDX License List[2]
at https://spdx.org/licenses/.

For example, to label a file as subject to the BSD-3-Clause license,
the following text would be used:

Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
SPDX-License-Identifier:        BSD-3-Clause

To label a file as GPL-2.0 (e.g., for code that runs in the kernel), the
following text would be used:

Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
SPDX-License-Identifier:        GPL-2.0

To label a file as dual-licensed with BSD-3-Clause and GPL-2.0 (e.g., for
code that is shared between the kernel and userspace), the following text
would be used:

Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
SPDX-License-Identifier:        BSD-3-Clause OR GPL-2.0

To label a file as dual-licensed with BSD-3-Clause and LGPL-2.1 (e.g., for
code that is shared between the kernel and userspace), the following text
would be used:

Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
SPDX-License-Identifier:        BSD-3-Clause OR LGPL-2.1

Note: Any new file contributions in DPDK shall adhere to the above scheme.
It is also being recommended to replace the existing license text in the
code with SPDX-License-Identifiers.

Note 2: DPDK currently adhere to it's IP policies[3]. Any exception to this
shall be approved by DPDK tech board and DPDK Governing Board. Steps for
any exception approval:
1. Mention the appropriate license identifier form SPDX. If the license is
   not listed in SPDX Licenses. It is the submitters responsibiliity to get
   it first listed.
2. Get the required approval from the DPDK Technical Board. Technical board
   may advise the author to check alternate means first. If no other
   alternatives are found and the merit of the contributions are important
   for DPDK's mission, it may decide on such exception with two-thirds vote
   of the members.
3. Technical board then approach Governing board for such limited approval
   for the given contribution only.

Any approvals shall be documented in "Licenses/exceptions.txt" with record
dates.

Note 3: Projects like U-boot have been been using SPDX License Idenfiers
successfully [2]. They have been referered in implementing SPDX based
guidelines in DPDK.

Note 4: From the legal point of view, this patch is supposed to be only a
change to the textual representation of the license information, but in no
way any change to the actual license terms. With this patch applied, all
files will still be licensed under the same terms they were before.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
---
v3: patch format with "-M" option to optimize file name change
    fix the dpdk.org charter ip policy link

v2: spelling mistakes

 Licenses/Exceptions.txt               | 12 +++++
 Licenses/README                       | 82 +++++++++++++++++++++++++++++++++++
 Licenses/bsd-3-clause.txt             |  9 ++++
 LICENSE.GPL => Licenses/gpl-2.0.txt   | 14 +++---
 LICENSE.LGPL => Licenses/lgpl-2.1.txt | 18 ++++----
 README                                |  5 ++-
 doc/guides/contributing/patches.rst   | 36 +++++++++++++++
 7 files changed, 158 insertions(+), 18 deletions(-)
 create mode 100644 Licenses/Exceptions.txt
 create mode 100644 Licenses/README
 create mode 100644 Licenses/bsd-3-clause.txt
 rename LICENSE.GPL => Licenses/gpl-2.0.txt (98%)
 rename LICENSE.LGPL => Licenses/lgpl-2.1.txt (99%)
  

Comments

Thomas Monjalon Dec. 13, 2017, 10:46 a.m. UTC | #1
Hi Hemant,

Some comments below

08/12/2017 08:41, Hemant Agrawal:
> --- /dev/null
> +++ b/Licenses/Exceptions.txt

Please use lowercase for file and directory.
By the way, the text is referring to exceptions.txt.

> @@ -0,0 +1,12 @@
> +This file will record any exceptions in DPDK Project with respect to DPDK
> +IP License policy as defined in DPDK Charter available at:
> +
> +http://dpdk.org/about/charter#ip

This link might be indented.

I think we should make clear that
	- BSD-3-Clause
	- GPL-2.0
	- dual BSD-3-Clause/GPL-2.0
	- dual BSD-3-Clause/LGPL-2.1
are not exceptions.

> +----------------------------------------------------------------------------------------------
> +License Name                 SPDX Identifier     TB Approval Date  GB Approval Date  File name
> +----------------------------------------------------------------------------------------------

The table is large, and file names will be long.
Can we remove "License Name" as it is redundant with SPDX id?

> --- /dev/null
> +++ b/Licenses/README

Good idea to add a README here.

> @@ -0,0 +1,82 @@
> +The DPDK uses the Open Source BSD-3-Clause license for the core libraries and
> +drivers. The kernel components are naturally GPLv2 licensed.

You should use SPDX GPL-2.0

> +Including big blocks of License headers in all files blows up the
> +source code with mostly redundant information.  An additional problem
> +is that even the same licenses are referred to by a number of
> +slightly varying text blocks (full, abbreviated, different
> +indentation, line wrapping and/or white space, with obsolete address
> +information, ...) which makes validation and automatic processing a nightmare.
> +
> +To make this easier, DPDK is adpoting the use of a single line reference to

Please do not use this tense in the README.
We could say "DPDK uses" instead of "DPDK is adpoting the use".

> +Unique License Identifiers in source files as defined by the Linux Foundation's
> +SPDX project [1].

My preference is to insert URLs inline to make reading flow easier.

> +Adding license information in this fashion, rather than adding full license
> +text, can be more efficient for developers; decreases errors; and improves
> +automated detection of licenses. The current set of valid, predefined SPDX
> +identifiers is set forth on the SPDX License List[2]
> +at https://spdx.org/licenses/.

Here you are mixing inline and reference :)

> +For example, to label a file as subject to the BSD-3-Clause license,
> +the following text would be used:
> +
> +Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER

I think (C) is useless.
About the YEAR, we should explicit what it is.
I think it is only the first year, and we do not need to update
the last year of update.
We should also explicit why it is there and why it is not required
to add more copyrights.
The copyright is required to express who is allowed to declare the
license of the code.
It is a common practice to add a Copyright line when doing a big update.
I think it is fair, but for small changes, it is really not required
as we implicitly comply with the current copyright holder and license.

> +SPDX-License-Identifier:        BSD-3-Clause

Why adding these spaces in the middle of the line?

[...]
> +Note: DPDK currently adhere to it's IP policies[3]. Any exception to this shall

This sentence is strange.
To me, it is obvious that DPDK adheres to its policies.
Suggested rewording:
Any exception to the DPDK IP policies shall...

> +be approved by DPDK tech board and DPDK Governing Board. Steps for any exception
> +approval:

[...]
> +Projects like U-boot have been been using SPDX License Idenfiers successfully
> +[2]. They have been referered in implementing SPDX based guidelines in DPDK.

I think you can remove this paragraph from the README.

[...]
> +DPDK project supported licenses are:
> +
> +Full name				        SPDX Identifier	OSI Approved	File name		URI
> +=======================================================================================================================================

This table is large.
I suggest to format it as a list:

SPDX identifier
	full name
	file name
	URL

> +GNU General Public License v2.0 only		GPL-2.0		Y		gpl-2.0.txt		http://spdx.org/licenses/GPL-2.0.html#licenseText
> +GNU Lesser General Public License v2.1 or later	LGPL-2.1+	Y		lgpl-2.1.txt		http://spdx.org/licenses/LGPL-2.1.html#licenseText

Later than LGPL-2.1 is not specified in the charter.
Better to remove the "+".

> +BSD 3-clause "New" or "Revised" License		BSD-3-Clause	Y		bsd-3-clause.txt	http://spdx.org/licenses/BSD-3-Clause#licenseText

[...]
> --- a/README
> +++ b/README
> @@ -1,8 +1,9 @@
>  DPDK is a set of libraries and drivers for fast packet processing.
>  It supports many processor architectures and both FreeBSD and Linux.
>  
> -The DPDK uses the Open Source BSD license for the core libraries and
> -drivers. The kernel components are GPLv2 licensed.
> +The DPDK uses the Open Source BSD-3-Clause license for the core libraries
> +and drivers. The kernel components are GPLv2 licensed. DPDK usages

s/GPLv2/GPL-2.0/
s/usages/uses/

> +SPDX Licenese identifiers instead of full license text in source files.

s/Licenese/license/

I think it is not needed to mention SPDX in this README.

[...]
> --- a/doc/guides/contributing/patches.rst
> +++ b/doc/guides/contributing/patches.rst
> @@ -32,6 +32,42 @@ It is also worth registering for the DPDK `Patchwork <http://dpdk.org/dev/patchw
>  The development process requires some familiarity with the ``git`` version control system.
>  Refer to the `Pro Git Book <http://www.git-scm.com/book/>`_ for further information.
>  
> +Source License
> +--------------
> +
> +The DPDK uses the Open Source BSD-3-Clause license for the core libraries and
> +drivers. The kernel components are GPLv2 licensed. DPDK usaes single line

s/GPLv2/GPL-2.0/
s/usaes/uses/

> +reference to Unique License Identifiers in source files as defined by the Linux
> +Foundation's `SPDX project <http://spdx.org/>`_.
> +
> +For example, to label a file as subject to the BSD-3-Clause license,
> +the following text would be used:
> +
> +Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
> +``SPDX-License-Identifier:        BSD-3-Clause``
> +
> +To label a file as dual-licensed with BSD-3-Clause and GPL-2.0 (e.g., for code
> +that is shared between the kernel and userspace), the following text would be
> +used:
> +
> +Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
> +``SPDX-License-Identifier:        BSD-3-Clause OR GPL-2.0``
> +
> +To label a file as dual-licensed with BSD-3-Clause and LGPL-2.1 (e.g., for code
> +that is shared between the kernel and userspace), the following text would be
> +used:
> +
> +Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
> +``SPDX-License-Identifier:        BSD-3-Clause OR LGPL-2.1``
> +
> +To label a file as GPL-2.0 (e.g., for code that runs in the kernel), the
> +following text would be used:
> +
> +Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
> +``SPDX-License-Identifier:        GPL-2.0``
> +
> +Any new file contributions in DPDK shall adhere to the above scheme.
> +It is also being recommended to replace the existing license.

No need to repeat everything in the guide.
You can refer to licenses/README.

+Cc John for doc review
  
Bruce Richardson Dec. 13, 2017, 11:38 a.m. UTC | #2
On Wed, Dec 13, 2017 at 11:46:23AM +0100, Thomas Monjalon wrote:
> Hi Hemant,
> 
> Some comments below
> 
> 08/12/2017 08:41, Hemant Agrawal:
> > --- /dev/null
> > +++ b/Licenses/Exceptions.txt
> 
> Please use lowercase for file and directory.
> By the way, the text is referring to exceptions.txt.
> 
> > @@ -0,0 +1,12 @@
> > +This file will record any exceptions in DPDK Project with respect to DPDK
> > +IP License policy as defined in DPDK Charter available at:
> > +
> > +http://dpdk.org/about/charter#ip
> 
> This link might be indented.
> 
> I think we should make clear that
> 	- BSD-3-Clause
> 	- GPL-2.0
> 	- dual BSD-3-Clause/GPL-2.0
> 	- dual BSD-3-Clause/LGPL-2.1
> are not exceptions.
> 
> > +----------------------------------------------------------------------------------------------
> > +License Name                 SPDX Identifier     TB Approval Date  GB Approval Date  File name
> > +----------------------------------------------------------------------------------------------
> 
> The table is large, and file names will be long.
> Can we remove "License Name" as it is redundant with SPDX id?
> 
> > --- /dev/null
> > +++ b/Licenses/README
> 
> Good idea to add a README here.
> 
> > @@ -0,0 +1,82 @@
> > +The DPDK uses the Open Source BSD-3-Clause license for the core libraries and
> > +drivers. The kernel components are naturally GPLv2 licensed.
> 
> You should use SPDX GPL-2.0
> 
> > +Including big blocks of License headers in all files blows up the
> > +source code with mostly redundant information.  An additional problem
> > +is that even the same licenses are referred to by a number of
> > +slightly varying text blocks (full, abbreviated, different
> > +indentation, line wrapping and/or white space, with obsolete address
> > +information, ...) which makes validation and automatic processing a nightmare.
> > +
> > +To make this easier, DPDK is adpoting the use of a single line reference to
> 
> Please do not use this tense in the README.
> We could say "DPDK uses" instead of "DPDK is adpoting the use".
> 
> > +Unique License Identifiers in source files as defined by the Linux Foundation's
> > +SPDX project [1].
> 
> My preference is to insert URLs inline to make reading flow easier.
> 
> > +Adding license information in this fashion, rather than adding full license
> > +text, can be more efficient for developers; decreases errors; and improves
> > +automated detection of licenses. The current set of valid, predefined SPDX
> > +identifiers is set forth on the SPDX License List[2]
> > +at https://spdx.org/licenses/.
> 
> Here you are mixing inline and reference :)
> 
> > +For example, to label a file as subject to the BSD-3-Clause license,
> > +the following text would be used:
> > +
> > +Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
> 
> I think (C) is useless.

It may be, I can't comment legally, but it is standard practice on all
the current copyright lines inserted by the various contributing
companies.

> About the YEAR, we should explicit what it is.
> I think it is only the first year, and we do not need to update
> the last year of update.
> We should also explicit why it is there and why it is not required
> to add more copyrights.
> The copyright is required to express who is allowed to declare the
> license of the code.
> It is a common practice to add a Copyright line when doing a big update.
> I think it is fair, but for small changes, it is really not required
> as we implicitly comply with the current copyright holder and license.
> 
I'd be wary about starting to specify formats for the copyright lines,
as such things are often specified in a particular format by those
outside the actual development team. For now, let's just focus on the
SPDX tags.

/Bruce
  
Wiles, Keith Dec. 13, 2017, 3:38 p.m. UTC | #3
> On Dec 13, 2017, at 5:38 AM, Bruce Richardson <bruce.richardson@intel.com> wrote:

> 

> On Wed, Dec 13, 2017 at 11:46:23AM +0100, Thomas Monjalon wrote:

>> Hi Hemant,

>> 

>> Some comments below

>> 

>> 08/12/2017 08:41, Hemant Agrawal:

>>> --- /dev/null

>>> +++ b/Licenses/Exceptions.txt

>> 

>> Please use lowercase for file and directory.

>> By the way, the text is referring to exceptions.txt.

>> 

>>> @@ -0,0 +1,12 @@

>>> +This file will record any exceptions in DPDK Project with respect to DPDK

>>> +IP License policy as defined in DPDK Charter available at:

>>> +

>>> +http://dpdk.org/about/charter#ip

>> 

>> This link might be indented.

>> 

>> I think we should make clear that

>> 	- BSD-3-Clause

>> 	- GPL-2.0

>> 	- dual BSD-3-Clause/GPL-2.0

>> 	- dual BSD-3-Clause/LGPL-2.1

>> are not exceptions.

>> 

>>> +----------------------------------------------------------------------------------------------

>>> +License Name                 SPDX Identifier     TB Approval Date  GB Approval Date  File name

>>> +----------------------------------------------------------------------------------------------

>> 

>> The table is large, and file names will be long.

>> Can we remove "License Name" as it is redundant with SPDX id?

>> 

>>> --- /dev/null

>>> +++ b/Licenses/README

>> 

>> Good idea to add a README here.

>> 

>>> @@ -0,0 +1,82 @@

>>> +The DPDK uses the Open Source BSD-3-Clause license for the core libraries and

>>> +drivers. The kernel components are naturally GPLv2 licensed.

>> 

>> You should use SPDX GPL-2.0

>> 

>>> +Including big blocks of License headers in all files blows up the

>>> +source code with mostly redundant information.  An additional problem

>>> +is that even the same licenses are referred to by a number of

>>> +slightly varying text blocks (full, abbreviated, different

>>> +indentation, line wrapping and/or white space, with obsolete address

>>> +information, ...) which makes validation and automatic processing a nightmare.

>>> +

>>> +To make this easier, DPDK is adpoting the use of a single line reference to

>> 

>> Please do not use this tense in the README.

>> We could say "DPDK uses" instead of "DPDK is adpoting the use".

>> 

>>> +Unique License Identifiers in source files as defined by the Linux Foundation's

>>> +SPDX project [1].

>> 

>> My preference is to insert URLs inline to make reading flow easier.

>> 

>>> +Adding license information in this fashion, rather than adding full license

>>> +text, can be more efficient for developers; decreases errors; and improves

>>> +automated detection of licenses. The current set of valid, predefined SPDX

>>> +identifiers is set forth on the SPDX License List[2]

>>> +at https://spdx.org/licenses/.

>> 

>> Here you are mixing inline and reference :)

>> 

>>> +For example, to label a file as subject to the BSD-3-Clause license,

>>> +the following text would be used:

>>> +

>>> +Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER

>> 

>> I think (C) is useless.

> 

> It may be, I can't comment legally, but it is standard practice on all

> the current copyright lines inserted by the various contributing

> companies.


The ‘(C)’ is part of the Copyright and should not be removed.

> 

>> About the YEAR, we should explicit what it is.

>> I think it is only the first year, and we do not need to update

>> the last year of update.

>> We should also explicit why it is there and why it is not required

>> to add more copyrights.

>> The copyright is required to express who is allowed to declare the

>> license of the code.

>> It is a common practice to add a Copyright line when doing a big update.

>> I think it is fair, but for small changes, it is really not required

>> as we implicitly comply with the current copyright holder and license.

>> 

> I'd be wary about starting to specify formats for the copyright lines,

> as such things are often specified in a particular format by those

> outside the actual development team. For now, let's just focus on the

> SPDX tags.


I agree, focus on the SPDX tags only at this point.

> 

> /Bruce


Regards,
Keith
  
Hemant Agrawal Dec. 15, 2017, 10:52 a.m. UTC | #4
Thanks for all the comments. I will rework and post.

Also, my bad for flip-flop but I have to agree with Stephen's suggestion 
to adapt Linux style. i.e. use SPDX tag in top line or 2nd line for scripts.

This is for following reason:

1. DPDK will be using kernel tools such as checkpatch.
2. DPDK has common driver code between kernel and dpdk. It will be easy 
for contributors.

Quoting from the Red's patch (https://patchwork.kernel.org/patch/10053699/)
=>SPDX license tags are a thing now in the kernel[1]. It has also been
decided to make them the first line in files. As Linus put it:

"The real reason _I_ personally would like to see at least all the new
SPDX lines to go at the very top of the file is that every time when
we have some kind of ambiguity about placement, we end up with
multiple cases, and then people don't notice when merging, and you end
up having two - or you just end up having unnecessary merge conflicts
because two different people picked two different choices)."

regards,
Hemant
  

Patch

diff --git a/Licenses/Exceptions.txt b/Licenses/Exceptions.txt
new file mode 100644
index 0000000..194dde2
--- /dev/null
+++ b/Licenses/Exceptions.txt
@@ -0,0 +1,12 @@ 
+This file will record any exceptions in DPDK Project with respect to DPDK
+IP License policy as defined in DPDK Charter available at:
+
+http://dpdk.org/about/charter#ip
+
+----------------------------------------------------------------------------------------------
+License Name                 SPDX Identifier     TB Approval Date  GB Approval Date  File name
+----------------------------------------------------------------------------------------------
+1.
+
+----------------------------------------------------------------------------------------------
+
diff --git a/Licenses/README b/Licenses/README
new file mode 100644
index 0000000..e6edf0a
--- /dev/null
+++ b/Licenses/README
@@ -0,0 +1,82 @@ 
+The DPDK uses the Open Source BSD-3-Clause license for the core libraries and
+drivers. The kernel components are naturally GPLv2 licensed.
+
+Including big blocks of License headers in all files blows up the
+source code with mostly redundant information.  An additional problem
+is that even the same licenses are referred to by a number of
+slightly varying text blocks (full, abbreviated, different
+indentation, line wrapping and/or white space, with obsolete address
+information, ...) which makes validation and automatic processing a nightmare.
+
+To make this easier, DPDK is adpoting the use of a single line reference to
+Unique License Identifiers in source files as defined by the Linux Foundation's
+SPDX project [1].
+
+Adding license information in this fashion, rather than adding full license
+text, can be more efficient for developers; decreases errors; and improves
+automated detection of licenses. The current set of valid, predefined SPDX
+identifiers is set forth on the SPDX License List[2]
+at https://spdx.org/licenses/.
+
+For example, to label a file as subject to the BSD-3-Clause license,
+the following text would be used:
+
+Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
+SPDX-License-Identifier:        BSD-3-Clause
+
+To label a file as GPL-2.0 (e.g., for code that runs in the kernel), the
+following text would be used:
+
+Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
+SPDX-License-Identifier:        GPL-2.0
+
+To label a file as dual-licensed with BSD-3-Clause and GPL-2.0 (e.g., for code
+that is shared between the kernel and userspace), the following text would be
+used:
+
+Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
+SPDX-License-Identifier:        BSD-3-Clause OR GPL-2.0
+
+To label a file as dual-licensed with BSD-3-Clause and LGPL-2.1 (e.g., for code
+that is shared between the kernel and userspace), the following text would be
+used:
+
+Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
+SPDX-License-Identifier:        BSD-3-Clause OR LGPL-2.1
+
+Any new file contributions in DPDK shall adhere to the above scheme.
+It is also being recommended to replace the existing license text in the code
+with SPDX-License-Identifiers.
+
+Note: DPDK currently adhere to it's IP policies[3]. Any exception to this shall
+be approved by DPDK tech board and DPDK Governing Board. Steps for any exception
+approval:
+1. Mention the appropriate license identifier form SPDX. If the license is not
+   listed in SPDX Licenses. It is the submitters responsibiliity to get it
+   first listed.
+2. Get the required approval from the DPDK Technical Board. Technical board may
+   advise the author to check alternate means first. If no other alternative
+   are found and the merit of the contributions are important for DPDK's
+   mission, it may decide on such exception with two-thirds vote of the members.
+3. Technical board then approach Governing board for such limited approval for
+   the given contribution only.
+
+Any approvals shall be documented in "Licenses/exceptions.txt" with record
+dates.
+
+Projects like U-boot have been been using SPDX License Idenfiers successfully
+[2]. They have been referered in implementing SPDX based guidelines in DPDK.
+
+
+[1] http://spdx.org/
+[2] http://spdx.org/licenses/
+[3] http://dpdk.org/about/charter#ip
+[4] https://www.denx.de/wiki/U-Boot/Licensing
+
+DPDK project supported licenses are:
+
+Full name				        SPDX Identifier	OSI Approved	File name		URI
+=======================================================================================================================================
+GNU General Public License v2.0 only		GPL-2.0		Y		gpl-2.0.txt		http://spdx.org/licenses/GPL-2.0.html#licenseText
+GNU Lesser General Public License v2.1 or later	LGPL-2.1+	Y		lgpl-2.1.txt		http://spdx.org/licenses/LGPL-2.1.html#licenseText
+BSD 3-clause "New" or "Revised" License		BSD-3-Clause	Y		bsd-3-clause.txt	http://spdx.org/licenses/BSD-3-Clause#licenseText
diff --git a/Licenses/bsd-3-clause.txt b/Licenses/bsd-3-clause.txt
new file mode 100644
index 0000000..731a737
--- /dev/null
+++ b/Licenses/bsd-3-clause.txt
@@ -0,0 +1,9 @@ 
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. 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.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/LICENSE.GPL b/Licenses/gpl-2.0.txt
similarity index 98%
rename from LICENSE.GPL
rename to Licenses/gpl-2.0.txt
index d511905..d159169 100644
--- a/LICENSE.GPL
+++ b/Licenses/gpl-2.0.txt
@@ -1,12 +1,12 @@ 
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-			    Preamble
+                            Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
@@ -56,7 +56,7 @@  patent must be licensed for everyone's free use or not licensed at all.
   The precise terms and conditions for copying, distribution and
 modification follow.
 
-		    GNU GENERAL PUBLIC LICENSE
+                    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License applies to any program or other work which contains
@@ -255,7 +255,7 @@  make exceptions for this.  Our decision will be guided by the two goals
 of preserving the free status of all derivatives of our free software and
 of promoting the sharing and reuse of software generally.
 
-			    NO WARRANTY
+                            NO WARRANTY
 
   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
@@ -277,9 +277,9 @@  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGES.
 
-		     END OF TERMS AND CONDITIONS
+                     END OF TERMS AND CONDITIONS
 
-	    How to Apply These Terms to Your New Programs
+            How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
diff --git a/LICENSE.LGPL b/Licenses/lgpl-2.1.txt
similarity index 99%
rename from LICENSE.LGPL
rename to Licenses/lgpl-2.1.txt
index 4362b49..e5ab03e 100644
--- a/LICENSE.LGPL
+++ b/Licenses/lgpl-2.1.txt
@@ -55,7 +55,7 @@  modified by someone else and passed on, the recipients should know
 that what they have is not the original version, so that the original
 author's reputation will not be affected by problems that might be
 introduced by others.
-
+
   Finally, software patents pose a constant threat to the existence of
 any free program.  We wish to make sure that a company cannot
 effectively restrict the users of a free program by obtaining a
@@ -111,7 +111,7 @@  modification follow.  Pay close attention to the difference between a
 "work based on the library" and a "work that uses the library".  The
 former contains code derived from the library, whereas the latter must
 be combined with the library in order to run.
-
+
                   GNU LESSER GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
@@ -158,7 +158,7 @@  Library.
   You may charge a fee for the physical act of transferring a copy,
 and you may at your option offer warranty protection in exchange for a
 fee.
-
+
   2. You may modify your copy or copies of the Library or any portion
 of it, thus forming a work based on the Library, and copy and
 distribute such modifications or work under the terms of Section 1
@@ -216,7 +216,7 @@  instead of to this License.  (If a newer version than version 2 of the
 ordinary GNU General Public License has appeared, then you can specify
 that version instead if you wish.)  Do not make any other change in
 these notices.
-
+
   Once this change is made in a given copy, it is irreversible for
 that copy, so the ordinary GNU General Public License applies to all
 subsequent copies and derivative works made from that copy.
@@ -267,7 +267,7 @@  Library will still fall under Section 6.)
 distribute the object code for the work under the terms of Section 6.
 Any executables containing that work also fall under Section 6,
 whether or not they are linked directly with the Library itself.
-
+
   6. As an exception to the Sections above, you may also combine or
 link a "work that uses the Library" with the Library to produce a
 work containing portions of the Library, and distribute that work
@@ -329,7 +329,7 @@  restrictions of other proprietary libraries that do not normally
 accompany the operating system.  Such a contradiction means you cannot
 use both them and the Library together in an executable that you
 distribute.
-
+
   7. You may place library facilities that are a work based on the
 Library side-by-side in a single library together with other library
 facilities not covered by this License, and distribute such a combined
@@ -370,7 +370,7 @@  subject to these terms and conditions.  You may not impose any further
 restrictions on the recipients' exercise of the rights granted herein.
 You are not responsible for enforcing compliance by third parties with
 this License.
-
+
   11. If, as a consequence of a court judgment or allegation of patent
 infringement or for any other reason (not limited to patent issues),
 conditions are imposed on you (whether by court order, agreement or
@@ -422,7 +422,7 @@  conditions either of that version or of any later version published by
 the Free Software Foundation.  If the Library does not specify a
 license version number, you may choose any version ever published by
 the Free Software Foundation.
-
+
   14. If you wish to incorporate parts of the Library into other free
 programs whose distribution conditions are incompatible with these,
 write to the author to ask for permission.  For software which is
@@ -456,7 +456,7 @@  SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 DAMAGES.
 
                      END OF TERMS AND CONDITIONS
-
+
            How to Apply These Terms to Your New Libraries
 
   If you develop a new library, and you want it to be of the greatest
diff --git a/README b/README
index 29ba0e0..055cfc2 100644
--- a/README
+++ b/README
@@ -1,8 +1,9 @@ 
 DPDK is a set of libraries and drivers for fast packet processing.
 It supports many processor architectures and both FreeBSD and Linux.
 
-The DPDK uses the Open Source BSD license for the core libraries and
-drivers. The kernel components are GPLv2 licensed.
+The DPDK uses the Open Source BSD-3-Clause license for the core libraries
+and drivers. The kernel components are GPLv2 licensed. DPDK usages
+SPDX Licenese identifiers instead of full license text in source files.
 
 Please check the doc directory for release notes,
 API documentation, and sample application information.
diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst
index 40983c1..a2ecc62 100644
--- a/doc/guides/contributing/patches.rst
+++ b/doc/guides/contributing/patches.rst
@@ -32,6 +32,42 @@  It is also worth registering for the DPDK `Patchwork <http://dpdk.org/dev/patchw
 The development process requires some familiarity with the ``git`` version control system.
 Refer to the `Pro Git Book <http://www.git-scm.com/book/>`_ for further information.
 
+Source License
+--------------
+
+The DPDK uses the Open Source BSD-3-Clause license for the core libraries and
+drivers. The kernel components are GPLv2 licensed. DPDK usaes single line
+reference to Unique License Identifiers in source files as defined by the Linux
+Foundation's `SPDX project <http://spdx.org/>`_.
+
+For example, to label a file as subject to the BSD-3-Clause license,
+the following text would be used:
+
+Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
+``SPDX-License-Identifier:        BSD-3-Clause``
+
+To label a file as dual-licensed with BSD-3-Clause and GPL-2.0 (e.g., for code
+that is shared between the kernel and userspace), the following text would be
+used:
+
+Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
+``SPDX-License-Identifier:        BSD-3-Clause OR GPL-2.0``
+
+To label a file as dual-licensed with BSD-3-Clause and LGPL-2.1 (e.g., for code
+that is shared between the kernel and userspace), the following text would be
+used:
+
+Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
+``SPDX-License-Identifier:        BSD-3-Clause OR LGPL-2.1``
+
+To label a file as GPL-2.0 (e.g., for code that runs in the kernel), the
+following text would be used:
+
+Copyright (C) [YEAR] NAME-OF-COPYRIGHT-HOLDER
+``SPDX-License-Identifier:        GPL-2.0``
+
+Any new file contributions in DPDK shall adhere to the above scheme.
+It is also being recommended to replace the existing license.
 
 Maintainers and Sub-trees
 -------------------------