Как узнать лицензию для каждого из установленных мной приложений/пакетов?

Как узнать лицензию для каждого из установленных мной приложений/пакетов?

Я использую Ubuntu-15.10. Я установил много приложений помимо ванильных установок.

Теперь я хотел бы узнать, сколько установленных пакетов лицензированы по лицензии GPL или сторонним лицензиям (например, Fluendo).

Есть ли способ это выяснить? Или мне нужно вручную проверять каждую лицензию каждого установленного приложения?

РЕДАКТИРОВАТЬ:

Следующий фрагмент я использовал для перечисления названий различных установленных файлов лицензий.

find /usr/share/doc -type f -name copyright -exec grep "License\:" {} + | cut -f3 -d: | sort -u

решение1

Лицензии пакетов описаны в /usr/share/doc/${package}/copyright. Этот файл необходим для указания основной лицензии пакета; многие пакеты используютмашиночитаемый copyrightфайлв котором перечислены лицензии каждого отдельного файла в исходном пакете.

Для машиночитаемых файлов можно использовать License:строку, которая вводит лицензии:

awk '/^License:/ { print $2 }' /usr/share/doc/*/copyright | sort -u

Если вы ищете лицензию, задокументированную в /usr/share/common-licenses, вы можете поискать упоминания о ней в copyrightфайлах;напримердля подсчета количества пакетов, лицензированных по лицензии GPL или LGPL:

grep -l GPL /usr/share/doc/*/copyright | wc -l

Чтобы подсчитать только количество исходных пакетов, подсчитайте количество уникальных файлов (двоичные пакеты, отправленные из одного исходного пакета, имеют точно такой же copyrightфайл или ссылаются на один и тот же файл):

md5sum $(grep -l GPL /usr/share/doc/*/copyright) | sort -k1,1 -u | wc -l

Debsources предоставляет различные способы поискаcopyrightвсе файлы Debian;вот однострочникдля получения лицензии одного файла (если его пакет использует машиночитаемый формат). (Лицензия этого однострочного файла не документирована, поэтому я просто даю на него ссылку, а не копирую его сюда.)

Обратите внимание, что поскольку copyrightфайлы документируют лицензии исходных пакетов, они вполне могут документировать файлы, которые не поставляются в двоичных пакетах и ​​не влияют на лицензию двоичного пакета; это может иметь место, например, в случае файлов с лицензией GPL, которые используются только во время сборки пакета без лицензии GPL.

решение2

Большая часть информации о лицензировании программного обеспечения доступна по адресу/usr/share/doc/pkg-name/copyright

Примерно оценить количество используемых программ можно GPLс помощью:

  • grep -l GPL /usr/share/doc/*/copyright

    Но grepтакже включит файлы, которые являются ссылками вместо обычных файлов. Поэтому я рекомендую использовать inf findследующим образом:

  • sudo find /usr/share/doc -name copyright -type f -exec grep -l "GPL" '{}' \; | wc -l

    Он также включит такие файлы, как /usr/share/doc/ca-certificates/examples/ca-certificates-local/debian/copyright. Если вы не хотите, чтобы они учитывались, вы можете указать их maxdepthс помощью find.

Пример (в моей системе):

$ grep -l GPL /usr/share/doc/*/copyright | wc -l
1949

$ sudo find /usr/share/doc -name copyright -type f -exec grep -l "GPL" '{}' \; | wc -l
1889

Обратите внимание, что программное обеспечение может включать в себя более одной лицензии на файлы в формате copyright.

решение3

Следующий код поможет мне вывести список установленных лицензий из различных приложений в Ubuntu 15.04.

find /usr/share/doc -type f -name copyright -exec grep "License\:" {} + | cut -f3 -d: | sort -u

решение4

У меня под рукой только системы CentOS. Вы можете отобразить имя пакета и информацию о лицензии следующим образом:

$ rpm -qa --qf "%{name}: %{license}\n"
...
ncurses: MIT
cairo: LGPLv2 or MPLv1.1
dbus-python: MIT
media-player-info: BSD
dbus-x11: GPLv2+ or AFL
NetworkManager: GPLv2+
...

Нечто подобное вы сможете сделать и dpkg-query --licenseв системах Ubuntu.

Нравитьсяздесь, где он использует $ dpkg-query -f='${PackageSpec;-30}\t${Homepage}\n' -W "*"для показа только подмножества информации на пакет. Проверьте dpkg-queryпараметры, чтобы узнать, можете ли вы получить форму лицензии там.

Другойинтересный постпо этому поводу, говорит именно об этой проблематике и том:

На данный момент эта возможность поддерживается слабо, хотя предпринимаются попытки предоставить в /usr/share/doc/*/copyrightфайлах машиночитаемую информацию.

Связанный контент