How do you find the licenses for everything installed on your system?
Here's what I ended up doing. (results in ~/licenses.txt
with all the licenses that exist in /usr/share/doc
)
$ packages=`dpkg --get-selections | awk '{ print $1 }'`
$ for package in $packages; do echo "$package: "; cat /usr/share/doc/$package/copyright; echo ""; echo ""; done > ~/licenses.txt
In 2012, Debian released the document Machine-readable debian/copyright which will make licenses readable in the future. Currently, not all packages use this format. The command
grep -h '^License:' /usr/share/doc/*/copyright | sort -i | uniq -ic | sort -n
still returns a lot of garbage. For a better output you probably need a tool which parses each file depending on the Format:
field value.
A completely different way is the file structure in /usr/share/common-licenses/
(thx to https://stackoverflow.com/questions/1884753/license-info-of-a-deb-package#1884785). It lists the main licenses used in debian-based distributions (and contains their license texts). This list is provided by the package base-files
and is not linked to the list of installed packages, but it's probably enough information for the average boss/customer.
ls /usr/share/common-licenses/
Apache-2.0 BSD GFDL-1.2 GPL GPL-2 LGPL LGPL-2.1
Artistic GFDL GFDL-1.3 GPL-1 GPL-3 LGPL-2 LGPL-3
Update I just published a simple command-line solution which extracts the license information from the copyright files with a lot of heuristics. https://github.com/daald/dpkg-licenses. Feel free to try it. Any suggestions are welcome.
I just stumble on dpkg-licenses (https://github.com/daald/dpkg-licenses).
Just clone the repo
git clone https://github.com/daald/dpkg-licenses.git
Then
./dpkg-licenses > licenses.txt
And you have the best of today softwares installed, versions and licenses tabular list you can dream of...