Hello! Nikita Karetnikov <[email protected]> skribis:
> I'm trying to package 'util-linux'. It uses several licenses: > > - GPLv3+ > - GPLv2+ > - GPLv2 > - LGPLv2+ > - BSD with advertising > - Public Domain > > What are the common abbreviations for Public Domain and BSD with > advertising? Is there a list of abbreviations for licenses? Nixpkgs uses this: https://github.com/NixOS/nixpkgs/blob/master/pkgs/lib/licenses.nix which is a subset of this: http://fedoraproject.org/wiki/Licensing > As far as I can tell, 'license' doesn't check the used values. So it's > possible to use an incorrect value (e.g. "foobar"). Should we add a > function to check this? There could be a (guix licenses) module along these lines: (define-module (guix licenses) #:use-module (srfi srfi-9) #:export (gplv2+ gplv3+)) (define-record-type <license> (license name) license? (name license-name)) (define gplv3+ (license "GPLv3+")) (define gplv2+ (license "GPLv2+")) Packages would then do, for instance: (package ... (license gplv3+)) and you would get a unbound-variable warning when passing something wrong. We could imagine a <license-union> type for multiply-licensed code, and a <license-set> type for packages that incorporate code under different licenses. There could be a mechanism to make sure the ‘license’ field is a <license> object, or a <license-set> or <license-union> And then, it would be tempting to make a graph of <license> objects to indicate compatibility, and add additional properties to each <license> object to describe it more precisely (copyleft, version number, etc.), and so on. But! We must keep in mind that people will always write new licenses; packages will always include files covered by different licenses; there will always be dual-licensed packages; etc. More importantly, licensing is not a science, and we can’t pretend to devise a universal “license calculus”. (This has been discussed at length in the past on nix-dev.) Thus, I would start with a simple (guix licenses) module. I would perhaps even omit the <license> type, and use just plain strings to start with. WDYT? Thanks, Ludo’.
