
Я использую 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
также включит файлы, которые являются ссылками вместо обычных файлов. Поэтому я рекомендую использовать inffind
следующим образом: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
файлах машиночитаемую информацию.