diff options
| author | Scott Rifenbark <srifenbark@gmail.com> | 2018-05-15 11:14:50 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-05-24 17:16:34 +0100 |
| commit | 51c74acdadae6a84763e1f0ff623d664c9abb0a3 (patch) | |
| tree | 33efed82b8d1a91c40648fb828f8c710dd7f5bba /documentation/overview-manual/overview-manual-concepts.xml | |
| parent | afe2d7cf45cc666c7930e4667dfaf48e2cd5a7a4 (diff) | |
| download | poky-51c74acdadae6a84763e1f0ff623d664c9abb0a3.tar.gz | |
overview-manual, dev-manual: Moved licensing how-to stuff to dev-manual
The section on licensing in the overview-manual was really "how-to"
information. I moved this to a new section in the dev-manual for
"working with licenses". I fixed some references in the ref-manual and
in the bsp-guide as well.
(From yocto-docs rev: f150a1ea2da900aae88fc5fa60f4115cc213ba2d)
Signed-off-by: Scott Rifenbark <srifenbark@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/overview-manual/overview-manual-concepts.xml')
| -rw-r--r-- | documentation/overview-manual/overview-manual-concepts.xml | 391 |
1 files changed, 0 insertions, 391 deletions
diff --git a/documentation/overview-manual/overview-manual-concepts.xml b/documentation/overview-manual/overview-manual-concepts.xml index 9f0f9d1d9f..338a190ae2 100644 --- a/documentation/overview-manual/overview-manual-concepts.xml +++ b/documentation/overview-manual/overview-manual-concepts.xml | |||
| @@ -3226,397 +3226,6 @@ | |||
| 3226 | articles for background information on Pseudo. | 3226 | articles for background information on Pseudo. |
| 3227 | </para> | 3227 | </para> |
| 3228 | </section> | 3228 | </section> |
| 3229 | |||
| 3230 | <section id="overview-licenses"> | ||
| 3231 | <title>Licenses</title> | ||
| 3232 | |||
| 3233 | <para> | ||
| 3234 | This section describes the mechanism by which the | ||
| 3235 | <ulink url='&YOCTO_DOCS_REF_URL;#build-system-term'>OpenEmbedded build system</ulink> | ||
| 3236 | tracks changes to licensing text. | ||
| 3237 | The section also describes how to enable commercially licensed | ||
| 3238 | recipes, which by default are disabled. | ||
| 3239 | </para> | ||
| 3240 | |||
| 3241 | <para> | ||
| 3242 | For information that can help you maintain compliance with | ||
| 3243 | various open source licensing during the lifecycle of the product, | ||
| 3244 | see the | ||
| 3245 | "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Project's Lifecycle</ulink>" | ||
| 3246 | section in the Yocto Project Development Tasks Manual. | ||
| 3247 | </para> | ||
| 3248 | |||
| 3249 | <section id="usingpoky-configuring-LIC_FILES_CHKSUM"> | ||
| 3250 | <title>Tracking License Changes</title> | ||
| 3251 | |||
| 3252 | <para> | ||
| 3253 | The license of an upstream project might change in the future. | ||
| 3254 | In order to prevent these changes going unnoticed, the | ||
| 3255 | <ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></ulink> | ||
| 3256 | variable tracks changes to the license text. The checksums are | ||
| 3257 | validated at the end of the configure step, and if the | ||
| 3258 | checksums do not match, the build will fail. | ||
| 3259 | </para> | ||
| 3260 | |||
| 3261 | <section id="usingpoky-specifying-LIC_FILES_CHKSUM"> | ||
| 3262 | <title>Specifying the <filename>LIC_FILES_CHKSUM</filename> Variable</title> | ||
| 3263 | |||
| 3264 | <para> | ||
| 3265 | The <filename>LIC_FILES_CHKSUM</filename> | ||
| 3266 | variable contains checksums of the license text in the | ||
| 3267 | source code for the recipe. | ||
| 3268 | Following is an example of how to specify | ||
| 3269 | <filename>LIC_FILES_CHKSUM</filename>: | ||
| 3270 | <literallayout class='monospaced'> | ||
| 3271 | LIC_FILES_CHKSUM = "file://COPYING;md5=xxxx \ | ||
| 3272 | file://licfile1.txt;beginline=5;endline=29;md5=yyyy \ | ||
| 3273 | file://licfile2.txt;endline=50;md5=zzzz \ | ||
| 3274 | ..." | ||
| 3275 | </literallayout> | ||
| 3276 | <note><title>Notes</title> | ||
| 3277 | <itemizedlist> | ||
| 3278 | <listitem><para> | ||
| 3279 | When using "beginline" and "endline", realize | ||
| 3280 | that line numbering begins with one and not | ||
| 3281 | zero. | ||
| 3282 | Also, the included lines are inclusive (i.e. | ||
| 3283 | lines five through and including 29 in the | ||
| 3284 | previous example for | ||
| 3285 | <filename>licfile1.txt</filename>). | ||
| 3286 | </para></listitem> | ||
| 3287 | <listitem><para> | ||
| 3288 | When a license check fails, the selected license | ||
| 3289 | text is included as part of the QA message. | ||
| 3290 | Using this output, you can determine the exact | ||
| 3291 | start and finish for the needed license text. | ||
| 3292 | </para></listitem> | ||
| 3293 | </itemizedlist> | ||
| 3294 | </note> | ||
| 3295 | </para> | ||
| 3296 | |||
| 3297 | <para> | ||
| 3298 | The build system uses the | ||
| 3299 | <ulink url='&YOCTO_DOCS_REF_URL;#var-S'><filename>S</filename></ulink> | ||
| 3300 | variable as the default directory when searching files | ||
| 3301 | listed in <filename>LIC_FILES_CHKSUM</filename>. | ||
| 3302 | The previous example employs the default directory. | ||
| 3303 | </para> | ||
| 3304 | |||
| 3305 | <para> | ||
| 3306 | Consider this next example: | ||
| 3307 | <literallayout class='monospaced'> | ||
| 3308 | LIC_FILES_CHKSUM = "file://src/ls.c;beginline=5;endline=16;\ | ||
| 3309 | md5=bb14ed3c4cda583abc85401304b5cd4e" | ||
| 3310 | LIC_FILES_CHKSUM = "file://${WORKDIR}/license.html;md5=5c94767cedb5d6987c902ac850ded2c6" | ||
| 3311 | </literallayout> | ||
| 3312 | </para> | ||
| 3313 | |||
| 3314 | <para> | ||
| 3315 | The first line locates a file in | ||
| 3316 | <filename>${S}/src/ls.c</filename> and isolates lines five | ||
| 3317 | through 16 as license text. | ||
| 3318 | The second line refers to a file in | ||
| 3319 | <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink>. | ||
| 3320 | </para> | ||
| 3321 | |||
| 3322 | <para> | ||
| 3323 | Note that <filename>LIC_FILES_CHKSUM</filename> variable is | ||
| 3324 | mandatory for all recipes, unless the | ||
| 3325 | <filename>LICENSE</filename> variable is set to "CLOSED". | ||
| 3326 | </para> | ||
| 3327 | </section> | ||
| 3328 | |||
| 3329 | <section id="usingpoky-LIC_FILES_CHKSUM-explanation-of-syntax"> | ||
| 3330 | <title>Explanation of Syntax</title> | ||
| 3331 | |||
| 3332 | <para> | ||
| 3333 | As mentioned in the previous section, the | ||
| 3334 | <filename>LIC_FILES_CHKSUM</filename> variable lists all | ||
| 3335 | the important files that contain the license text for the | ||
| 3336 | source code. | ||
| 3337 | It is possible to specify a checksum for an entire file, | ||
| 3338 | or a specific section of a file (specified by beginning and | ||
| 3339 | ending line numbers with the "beginline" and "endline" | ||
| 3340 | parameters, respectively). | ||
| 3341 | The latter is useful for source files with a license | ||
| 3342 | notice header, README documents, and so forth. | ||
| 3343 | If you do not use the "beginline" parameter, then it is | ||
| 3344 | assumed that the text begins on the first line of the file. | ||
| 3345 | Similarly, if you do not use the "endline" parameter, | ||
| 3346 | it is assumed that the license text ends with the last | ||
| 3347 | line of the file. | ||
| 3348 | </para> | ||
| 3349 | |||
| 3350 | <para> | ||
| 3351 | The "md5" parameter stores the md5 checksum of the license | ||
| 3352 | text. | ||
| 3353 | If the license text changes in any way as compared to | ||
| 3354 | this parameter then a mismatch occurs. | ||
| 3355 | This mismatch triggers a build failure and notifies | ||
| 3356 | the developer. | ||
| 3357 | Notification allows the developer to review and address | ||
| 3358 | the license text changes. | ||
| 3359 | Also note that if a mismatch occurs during the build, | ||
| 3360 | the correct md5 checksum is placed in the build log and | ||
| 3361 | can be easily copied to the recipe. | ||
| 3362 | </para> | ||
| 3363 | |||
| 3364 | <para> | ||
| 3365 | There is no limit to how many files you can specify using | ||
| 3366 | the <filename>LIC_FILES_CHKSUM</filename> variable. | ||
| 3367 | Generally, however, every project requires a few | ||
| 3368 | specifications for license tracking. | ||
| 3369 | Many projects have a "COPYING" file that stores the | ||
| 3370 | license information for all the source code files. | ||
| 3371 | This practice allows you to just track the "COPYING" | ||
| 3372 | file as long as it is kept up to date. | ||
| 3373 | <note><title>Tips</title> | ||
| 3374 | <itemizedlist> | ||
| 3375 | <listitem><para> | ||
| 3376 | If you specify an empty or invalid "md5" | ||
| 3377 | parameter, | ||
| 3378 | <ulink url='&YOCTO_DOCS_REF_URL;#bitbake-term'>BitBake</ulink> | ||
| 3379 | returns an md5 mis-match | ||
| 3380 | error and displays the correct "md5" parameter | ||
| 3381 | value during the build. | ||
| 3382 | The correct parameter is also captured in | ||
| 3383 | the build log. | ||
| 3384 | </para></listitem> | ||
| 3385 | <listitem><para> | ||
| 3386 | If the whole file contains only license text, | ||
| 3387 | you do not need to use the "beginline" and | ||
| 3388 | "endline" parameters. | ||
| 3389 | </para></listitem> | ||
| 3390 | </itemizedlist> | ||
| 3391 | </note> | ||
| 3392 | </para> | ||
| 3393 | </section> | ||
| 3394 | </section> | ||
| 3395 | |||
| 3396 | <section id="enabling-commercially-licensed-recipes"> | ||
| 3397 | <title>Enabling Commercially Licensed Recipes</title> | ||
| 3398 | |||
| 3399 | <para> | ||
| 3400 | By default, the OpenEmbedded build system disables | ||
| 3401 | components that have commercial or other special licensing | ||
| 3402 | requirements. | ||
| 3403 | Such requirements are defined on a | ||
| 3404 | recipe-by-recipe basis through the | ||
| 3405 | <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE_FLAGS'><filename>LICENSE_FLAGS</filename></ulink> | ||
| 3406 | variable definition in the affected recipe. | ||
| 3407 | For instance, the | ||
| 3408 | <filename>poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly</filename> | ||
| 3409 | recipe contains the following statement: | ||
| 3410 | <literallayout class='monospaced'> | ||
| 3411 | LICENSE_FLAGS = "commercial" | ||
| 3412 | </literallayout> | ||
| 3413 | Here is a slightly more complicated example that contains both | ||
| 3414 | an explicit recipe name and version (after variable expansion): | ||
| 3415 | <literallayout class='monospaced'> | ||
| 3416 | LICENSE_FLAGS = "license_${PN}_${PV}" | ||
| 3417 | </literallayout> | ||
| 3418 | In order for a component restricted by a | ||
| 3419 | <filename>LICENSE_FLAGS</filename> definition to be enabled and | ||
| 3420 | included in an image, it needs to have a matching entry in the | ||
| 3421 | global | ||
| 3422 | <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE_FLAGS_WHITELIST'><filename>LICENSE_FLAGS_WHITELIST</filename></ulink> | ||
| 3423 | variable, which is a variable typically defined in your | ||
| 3424 | <filename>local.conf</filename> file. | ||
| 3425 | For example, to enable the | ||
| 3426 | <filename>poky/meta/recipes-multimedia/gstreamer/gst-plugins-ugly</filename> | ||
| 3427 | package, you could add either the string | ||
| 3428 | "commercial_gst-plugins-ugly" or the more general string | ||
| 3429 | "commercial" to <filename>LICENSE_FLAGS_WHITELIST</filename>. | ||
| 3430 | See the | ||
| 3431 | "<link linkend='license-flag-matching'>License Flag Matching</link>" | ||
| 3432 | section for a full | ||
| 3433 | explanation of how <filename>LICENSE_FLAGS</filename> matching | ||
| 3434 | works. | ||
| 3435 | Here is the example: | ||
| 3436 | <literallayout class='monospaced'> | ||
| 3437 | LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly" | ||
| 3438 | </literallayout> | ||
| 3439 | Likewise, to additionally enable the package built from the | ||
| 3440 | recipe containing | ||
| 3441 | <filename>LICENSE_FLAGS = "license_${PN}_${PV}"</filename>, | ||
| 3442 | and assuming that the actual recipe name was | ||
| 3443 | <filename>emgd_1.10.bb</filename>, the following string would | ||
| 3444 | enable that package as well as the original | ||
| 3445 | <filename>gst-plugins-ugly</filename> package: | ||
| 3446 | <literallayout class='monospaced'> | ||
| 3447 | LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly license_emgd_1.10" | ||
| 3448 | </literallayout> | ||
| 3449 | As a convenience, you do not need to specify the complete | ||
| 3450 | license string in the whitelist for every package. | ||
| 3451 | You can use an abbreviated form, which consists | ||
| 3452 | of just the first portion or portions of the license | ||
| 3453 | string before the initial underscore character or characters. | ||
| 3454 | A partial string will match any license that contains the | ||
| 3455 | given string as the first portion of its license. | ||
| 3456 | For example, the following whitelist string will also match | ||
| 3457 | both of the packages previously mentioned as well as any other | ||
| 3458 | packages that have licenses starting with "commercial" or | ||
| 3459 | "license". | ||
| 3460 | <literallayout class='monospaced'> | ||
| 3461 | LICENSE_FLAGS_WHITELIST = "commercial license" | ||
| 3462 | </literallayout> | ||
| 3463 | </para> | ||
| 3464 | |||
| 3465 | <section id="license-flag-matching"> | ||
| 3466 | <title>License Flag Matching</title> | ||
| 3467 | |||
| 3468 | <para> | ||
| 3469 | License flag matching allows you to control what recipes | ||
| 3470 | the OpenEmbedded build system includes in the build. | ||
| 3471 | Fundamentally, the build system attempts to match | ||
| 3472 | <filename>LICENSE_FLAGS</filename> strings found in recipes | ||
| 3473 | against <filename>LICENSE_FLAGS_WHITELIST</filename> | ||
| 3474 | strings found in the whitelist. | ||
| 3475 | A match causes the build system to include a recipe in the | ||
| 3476 | build, while failure to find a match causes the build | ||
| 3477 | system to exclude a recipe. | ||
| 3478 | </para> | ||
| 3479 | |||
| 3480 | <para> | ||
| 3481 | In general, license flag matching is simple. | ||
| 3482 | However, understanding some concepts will help you | ||
| 3483 | correctly and effectively use matching. | ||
| 3484 | </para> | ||
| 3485 | |||
| 3486 | <para> | ||
| 3487 | Before a flag | ||
| 3488 | defined by a particular recipe is tested against the | ||
| 3489 | contents of the whitelist, the expanded string | ||
| 3490 | <filename>_${PN}</filename> is appended to the flag. | ||
| 3491 | This expansion makes each | ||
| 3492 | <filename>LICENSE_FLAGS</filename> value recipe-specific. | ||
| 3493 | After expansion, the string is then matched against the | ||
| 3494 | whitelist. | ||
| 3495 | Thus, specifying | ||
| 3496 | <filename>LICENSE_FLAGS = "commercial"</filename> | ||
| 3497 | in recipe "foo", for example, results in the string | ||
| 3498 | <filename>"commercial_foo"</filename>. | ||
| 3499 | And, to create a match, that string must appear in the | ||
| 3500 | whitelist. | ||
| 3501 | </para> | ||
| 3502 | |||
| 3503 | <para> | ||
| 3504 | Judicious use of the <filename>LICENSE_FLAGS</filename> | ||
| 3505 | strings and the contents of the | ||
| 3506 | <filename>LICENSE_FLAGS_WHITELIST</filename> variable | ||
| 3507 | allows you a lot of flexibility for including or excluding | ||
| 3508 | recipes based on licensing. | ||
| 3509 | For example, you can broaden the matching capabilities by | ||
| 3510 | using license flags string subsets in the whitelist. | ||
| 3511 | <note> | ||
| 3512 | When using a string subset, be sure to use the part of | ||
| 3513 | the expanded string that precedes the appended | ||
| 3514 | underscore character (e.g. | ||
| 3515 | <filename>usethispart_1.3</filename>, | ||
| 3516 | <filename>usethispart_1.4</filename>, and so forth). | ||
| 3517 | </note> | ||
| 3518 | For example, simply specifying the string "commercial" in | ||
| 3519 | the whitelist matches any expanded | ||
| 3520 | <filename>LICENSE_FLAGS</filename> definition that starts | ||
| 3521 | with the string "commercial" such as "commercial_foo" and | ||
| 3522 | "commercial_bar", which are the strings the build system | ||
| 3523 | automatically generates for hypothetical recipes named | ||
| 3524 | "foo" and "bar" assuming those recipes simply specify the | ||
| 3525 | following: | ||
| 3526 | <literallayout class='monospaced'> | ||
| 3527 | LICENSE_FLAGS = "commercial" | ||
| 3528 | </literallayout> | ||
| 3529 | Thus, you can choose to exhaustively | ||
| 3530 | enumerate each license flag in the whitelist and | ||
| 3531 | allow only specific recipes into the image, or | ||
| 3532 | you can use a string subset that causes a broader range of | ||
| 3533 | matches to allow a range of recipes into the image. | ||
| 3534 | </para> | ||
| 3535 | |||
| 3536 | <para> | ||
| 3537 | This scheme works even if the | ||
| 3538 | <filename>LICENSE_FLAGS</filename> string already | ||
| 3539 | has <filename>_${PN}</filename> appended. | ||
| 3540 | For example, the build system turns the license flag | ||
| 3541 | "commercial_1.2_foo" into "commercial_1.2_foo_foo" and | ||
| 3542 | would match both the general "commercial" and the specific | ||
| 3543 | "commercial_1.2_foo" strings found in the whitelist, as | ||
| 3544 | expected. | ||
| 3545 | </para> | ||
| 3546 | |||
| 3547 | <para> | ||
| 3548 | Here are some other scenarios: | ||
| 3549 | <itemizedlist> | ||
| 3550 | <listitem><para> | ||
| 3551 | You can specify a versioned string in the recipe | ||
| 3552 | such as "commercial_foo_1.2" in a "foo" recipe. | ||
| 3553 | The build system expands this string to | ||
| 3554 | "commercial_foo_1.2_foo". | ||
| 3555 | Combine this license flag with a whitelist that has | ||
| 3556 | the string "commercial" and you match the flag | ||
| 3557 | along with any other flag that starts with the | ||
| 3558 | string "commercial". | ||
| 3559 | </para></listitem> | ||
| 3560 | <listitem><para> | ||
| 3561 | Under the same circumstances, you can use | ||
| 3562 | "commercial_foo" in the whitelist and the build | ||
| 3563 | system not only matches "commercial_foo_1.2" but | ||
| 3564 | also matches any license flag with the string | ||
| 3565 | "commercial_foo", regardless of the version. | ||
| 3566 | </para></listitem> | ||
| 3567 | <listitem><para> | ||
| 3568 | You can be very specific and use both the | ||
| 3569 | package and version parts in the whitelist (e.g. | ||
| 3570 | "commercial_foo_1.2") to specifically match a | ||
| 3571 | versioned recipe. | ||
| 3572 | </para></listitem> | ||
| 3573 | </itemizedlist> | ||
| 3574 | </para> | ||
| 3575 | </section> | ||
| 3576 | |||
| 3577 | <section id="other-variables-related-to-commercial-licenses"> | ||
| 3578 | <title>Other Variables Related to Commercial Licenses</title> | ||
| 3579 | |||
| 3580 | <para> | ||
| 3581 | Other helpful variables related to commercial | ||
| 3582 | license handling exist and are defined in the | ||
| 3583 | <filename>poky/meta/conf/distro/include/default-distrovars.inc</filename> file: | ||
| 3584 | <literallayout class='monospaced'> | ||
| 3585 | COMMERCIAL_AUDIO_PLUGINS ?= "" | ||
| 3586 | COMMERCIAL_VIDEO_PLUGINS ?= "" | ||
| 3587 | </literallayout> | ||
| 3588 | If you want to enable these components, you can do so by | ||
| 3589 | making sure you have statements similar to the following | ||
| 3590 | in your <filename>local.conf</filename> configuration file: | ||
| 3591 | <literallayout class='monospaced'> | ||
| 3592 | COMMERCIAL_AUDIO_PLUGINS = "gst-plugins-ugly-mad \ | ||
| 3593 | gst-plugins-ugly-mpegaudioparse" | ||
| 3594 | COMMERCIAL_VIDEO_PLUGINS = "gst-plugins-ugly-mpeg2dec \ | ||
| 3595 | gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse" | ||
| 3596 | LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly commercial_gst-plugins-bad commercial_qmmp" | ||
| 3597 | </literallayout> | ||
| 3598 | Of course, you could also create a matching whitelist | ||
| 3599 | for those components using the more general "commercial" | ||
| 3600 | in the whitelist, but that would also enable all the | ||
| 3601 | other packages with <filename>LICENSE_FLAGS</filename> | ||
| 3602 | containing "commercial", which you may or may not want: | ||
| 3603 | <literallayout class='monospaced'> | ||
| 3604 | LICENSE_FLAGS_WHITELIST = "commercial" | ||
| 3605 | </literallayout> | ||
| 3606 | </para> | ||
| 3607 | |||
| 3608 | <para> | ||
| 3609 | Specifying audio and video plug-ins as part of the | ||
| 3610 | <filename>COMMERCIAL_AUDIO_PLUGINS</filename> and | ||
| 3611 | <filename>COMMERCIAL_VIDEO_PLUGINS</filename> statements | ||
| 3612 | (along with the enabling | ||
| 3613 | <filename>LICENSE_FLAGS_WHITELIST</filename>) includes the | ||
| 3614 | plug-ins or components into built images, thus adding | ||
| 3615 | support for media formats or components. | ||
| 3616 | </para> | ||
| 3617 | </section> | ||
| 3618 | </section> | ||
| 3619 | </section> | ||
| 3620 | </chapter> | 3229 | </chapter> |
| 3621 | <!-- | 3230 | <!-- |
| 3622 | vim: expandtab tw=80 ts=4 | 3231 | vim: expandtab tw=80 ts=4 |
