libreboot

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 893ac08f64f044a3b9a000e244fb33ed761b3ccb
parent 2d82ebc0e18d44a1c7a7420d82b2a396f8eadd8c
Author: Leah Rowe <info@minifree.org>
Date:   Sat,  3 Sep 2016 16:03:35 +0100

remove maintenance section in docs (prep for new build system)

Diffstat:
docs/git/index.html | 127-------------------------------------------------------------------------------
docs/index.html | 7+------
docs/maintain/index.html | 656-------------------------------------------------------------------------------
3 files changed, 1 insertion(+), 789 deletions(-)

diff --git a/docs/git/index.html b/docs/git/index.html @@ -266,133 +266,6 @@ <div class="section"> - <h1 id="config">Configuring libreboot</h1> - - <p> - Before building a ROM in libreboot (or coreboot, for that matter), you need to configure it. - Configuration files should already be included, so you don't need to do anything. This information - is only for reference. If you are updating or modifying coreboot-libre, and need to update the configs - in any way, refer to <a href="../maintain/index.html#newboard_libreboot">../maintain/index.html#newboard_libreboot</a>. - </p> - - <p> - If you've already built a kernel before, you know how to use this interface. - </p> - - <div class="subsection"> - <h2 id="config_dmidecode"> - dmidecode - </h2> - <p> - There is certain information that can be useful to enter in particular: - </p> - <ul> - <li>Local version string</li> - <li>SMBIOS Serial Number</li> - <li>SMBIOS Manufacturer</li> - <li>SMBIOS Version</li> - <li>SMBIOS Product name</li> - </ul> - <p> - This information can be obtained using:<br/> - <b>$ sudo dmidecode</b><br/> - <b># dmidecode</b> - </p> - <p> - Specifically, it's good practise to enter the same information for libreboot that you found when running this - with the original BIOS or firmware. <b>libreboot has already done this for you. This information is for reference, - in the hope that it will be useful.</b> - </p> - <p> - In practise, this information is useless and you can - just leave it on the defaults that coreboot uses (this - is what libreboot does, on most boards). - </p> - </div> - - <h2 id="config">GRUB payload</h2> - - <p> - GRUB is one of the payloads that libreboot targets. - </p> - - <p> - Configurations are then saved as files called <b>&quot;.config&quot;</b>. Copies of each configuration used - for each system type by the libreboot build scripts are stored in resources/libreboot/config/grub/ - </p> - - <div class="subsection"> - <h3 id="config_x86"> - Generic configuration file (file: resources/libreboot/config/payload/board/config) - </h3> - <ul> - <li>General setup / Expert mode = <i>enable</i></li> - <li>General / Use CMOS for configuration values = <i>enable</i></li> - <li>Mainboard / Mainboard vendor = <i>Name of manufacturer</i></li> - <li>Mainboard / Mainboard model = <i>Model name</i></li> - <li>Mainboard / ROM chip size = <i>size of flash chip</i></li> - <li>Chipset / Include CPU microcode in CBFS = <i>Do not include microcode updates</i></li> - <li>Devices / Use native graphics initialization = <i>enable</i></li> - <li> - Display / Keep VESA framebuffer = <i>disable</i> (disable for text-mode graphics, enable for coreboot vesa framebuffer) - <ul> - <li>Libreboot provides this with text-mode enabled by default, but it automatically patches a copy of the config at build time - to enable coreboot framebuffer for a separate set of ROM images, in each system.</li> - </ul> - </li> - <li>Generic Drivers / USB 2.0 EHCI debug dongle support = <i>Enable</i></li> - <li>Generic Drivers / Enable early (pre-RAM) usbdebug = <i>Enable</i></li> - <li>Generic Drivers / Type of dongle = <i>Net20DC or compatible</i></li> - <li>Generic Drivers / Digitizer = <i>Present</i></li> - - <li>Console / USB dongle console output = <i>enable</i></li> - <li>Payload / Add a payload = <i>An ELF executable payload</i></li> - <li>Payload / Payload path and filename = <i>grub.elf</i></li> - </ul> - <p> - Now go back into Devices: - </p> - <ul> - <li>Devices / Run VGA Option ROMs = <i>disable</i></li> - <li>Devices / Run Option ROMs on PCI devices = <i>disable</i></li> - </ul> - <p> - The resulting .config file was saved as resources/libreboot/config/<b>payload/board/config</b> and is used by the build - scripts for this system. - </p> - </div> - - <h2 id="config_chromebook">Configuring libreboot for chromebooks</h2> - <p> - Depthcharge is one of the payloads that libreboot targets. - </p> - <p> - Configurations are then saved as files called <b>&quot;.config&quot;</b>. Copies of each configuration used - for each system type by the libreboot build scripts are stored in resources/libreboot/config/depthcharge/ - </p> - <div class="subsection"> - <h3 id="config_arm"> - Generic configuration file (file: resources/libreboot/config/depthcharge/board/config) - </h3> - <ul> - <li>Mainboard / Mainboard vendor = <i>Google</i></li> - <li>Mainboard / Mainboard model = <i>name of model</i></li> - <li>Chipset / ChromeOS / Build for ChromeOS = <i>enable</i></li> - <li>Chipset / ChromeOS / Verify firmware with vboot. = <i>disable</i></li> - <li>Payload / Add a payload = <i>An ELF executable payload</i></li> - <li>Payload / Payload path and filename = <i>depthcharge.elf</i></li> - </ul> - <p> - The resulting .config file was saved as resources/libreboot/config/<b>depthcharge/board/config</b> and is used by the build - scripts for this system. - </p> - </div> - <p><a href="#pagetop">Back to top of page.</a></p> - - </div> - - <div class="section"> - <h1 id="build">How to build the ROM images</h1> <p>You don't need to do much, as there are scripts already written for you that can build everything automatically.</p> diff --git a/docs/index.html b/docs/index.html @@ -34,12 +34,7 @@ <li><a href="hcl/index.html">What systems can I use libreboot on?</a> - NOTE: <a href="https://www.gnu.org/distros/">GNU/Linux</a> is expected to be running on your device.</li> <li><a href="install/index.html">How to install libreboot</a></li> <li><a href="gnulinux/index.html">How to install GNU/Linux on a libreboot system</a></li> - <li> - <a href="git/index.html">How to compile the libreboot source code (optional, intended for developers)</a> - <ul> - <li><a href="maintain/index.html">Information about libreboot's build system.</a></li> - </ul> - </li> + <li><a href="git/index.html">How to compile the libreboot source code (optional, intended for developers)</a></li> <li><a href="security/index.html">Hardware security</a></li> <li><a href="hardware/index.html">Hardware maintenance</a></li> <li><a href="depthcharge/index.html">Depthcharge payload</a></li> diff --git a/docs/maintain/index.html b/docs/maintain/index.html @@ -1,656 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <style type="text/css"> - @import url('../css/main.css'); - </style> - - <title>Maintaining libreboot</title> -</head> - -<body> - - <div class="section"> - - <h1 id="pagetop">Maintaining libreboot</h1> - - <p> - This section relates to maintaining libreboot. - </p> - <p> - Do not follow anything here to the letter; is it only a rough guide - representing how libreboot is maintained (for reference). - </p> - <p> - This section of the documentation applies mainly to the - development version of libreboot, which is hosted in a git - repository. It is not intended for the release versions of - libreboot. - </p> - - <ul> - <li><a href="#overview">Overview</a></li> - <li> - <a href="#updating_coreboot">Updating coreboot-libre</a> - <ul> - <li><a href="#newboard_libreboot">Adding a new board to libreboot</a></li> - <li><a href="#newpatch_libreboot">Add/remove/modify patches in coreboot-libre</a></li> - </ul> - </li> - <li> - <a href="#updating_grub">Updating GRUB</a> - <ul> - <li><a href="#altbuild_grub_payload">Change how the GRUB payload (grub.elf) is built (utility: grub-assemble)</a></li> - <li><a href="#newconfig_grub">Modify the configuration used in GRUB</a></li> - <li><a href="../grub/index.html">Other maintenance-related tasks in GRUB</a></li> - </ul> - </li> - <li> - <a href="#updating_depthcharge">Updating depthcharge</a> - </li> - <li> - <a href="#updating_flashrom">Updating flashrom</a> - </li> - <li> - <a href="#updating_bucts">Updating bucts</a> - </li> - <li> - <a href="#updating_memtest86plus">Updating MemTest86+</a> - </li> - </ul> - - <p> - Or <a href="../index.html">Back to main index</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="overview">Overview</h1> - - <p> - The way the libreboot project is run is very similar to how - a GNU/Linux distribution project is run (but for the boot - firmware, not your operating system). Thus, libreboot is - a <i>coreboot distribution</i>. - </p> - <p> - This page demonstrates on a high level how - libreboot is maintained, how the project is run, how everything - goes together, etc. For a more detailed guide, refer to each - subsection for the various components/modules used in libreboot. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="updating_coreboot">Updating coreboot-libre</h1> - - <p> - NOTE: it helps to own all libreboot-compatible systems here, - or have reliable (and fast) access to a team of testers. - </p> - - <p> - Coreboot-libre is the name of the deblobbed coreboot sources - used in libreboot. It is also the name of the collection - of scripts used for deblobbing coreboot, on each new update. - </p> - - <p> - This section shows an example of how to update (re-base) to - the latest version of coreboot, how to update the deblobbing - scripts, and so on. <b>This does not teach you how to - change what custom patches are used, nor does it tell - you how to add new boards to libreboot. It assumes that you - simply want to re-base to the latest version (for instance, - there could be bug fixes that you want). For those things - not listed in this section, you can refer to other sections - on this page instead.</b> - </p> - - <p> - Open these files in your editor (you will most likely be editing them): - </p> - <ul> - <li>resources/scripts/helpers/download/coreboot</li> - <li>resources/scripts/helpers/build/module/coreboot</li> - <li>resources/utilities/coreboot-libre/deblob</li> - <li>resources/utilities/coreboot-libre/nonblobs</li> - <li>resources/utilities/coreboot-libre/nonblobs_notes</li> - <li>resources/scripts/helpers/build/roms/helper</li> - <li>resources/scripts/helpers/build/roms/withgrub</li> - </ul> - - <p> - If you already had a coreboot/ directory in your libreboot - tree, delete it:<br/> - $ <b>rm -Rf coreboot/</b> - </p> - - <p> - Firstly, download coreboot. Do <b>not</b> use <b>./download coreboot</b> - for this, just clone coreboot, as it does in that script, like so:<br/> - $ <b>git clone http://review.coreboot.org/coreboot</b> - </p> - - <p> - $ <b>cd coreboot/</b><br/> - Get the ID of the latest commit in this clone, by reading the commit ID using - e.g.:<br/> - $ <b>git log</b><br/> - In <i>resources/scripts/helpers/download/coreboot</i> you will - find a line that says <i><b>git reset --hard</b></i> and then - a commit ID next to it. Replace this with the commit ID of the latest - commit from the coreboot version that you just downloaded. - </p> - <p> - You must also checkout the <i>vboot</i> submodule:<br/> - $ <b>git submodule update --init --checkout -- 3rdparty/vboot/</b> - </p> - <p> - Delete the .git* resources. For example:<br/> - $ <b>rm -Rf .git* 3rdparty/*/.git*</b><br/> - ...this is to avoid the deblobbing script from picking up files - in there as blobs, which would be only false positives and - increase the amount of time taken. Now come out of coreboot:<br/> - $ <b>cd ../</b> - </p> - - <p> - Check all coreboot file names/paths in <i>deblob</i>; if any - of them no longer exist at that name/path in the coreboot tree that you downloaded, - delete the reference(s) in <i>deblob</i>. - </p> - - <p> - Check all coreboot file names/paths in <i>nonblobs</i>; if - any of them no longer exist at that name/path in the coreboot tree that you downloaded, - delete the reference in <i>nonblobs</i>. - </p> - - <p> - Now, back in the main root directory of libreboot (git repository), - run the deblob script. This is to prevent the <i>findblobs</i> - scripts from finding the blobs that are already deleted - when running the <i>deblob</i> script. Like so:<br/> - $ <b>./resources/utilities/coreboot-libre/deblob</b> - </p> - - <p> - Now search for new blobs:<br/> - $ <b>cd resources/utilities/coreboot-libre/</b><br/> - $ <b>./findblobs</b><br/> - WARNING: this will take a <b>*long*</b> time. Be patient! - What this will do is look through the coreboot source directory, - looking for blobs. It will not find the blobs that you deleted - before (because they no longer exist), and it will ignore any - files listed in <i>nonblobs</i>. - </p> - - <p> - Once the <i>findblobs</i> script has finished, check the file - <i>tocheck</i> (from the root, this will be <i>resources/utilities/coreboot-libre/tocheck</i>). - These are the files detected as blobs; some might be blobs, some not. - The <i>findblobs</i> script doesn't know how to determine between blobs - and non-blobs, it only knows patterns. Distinguishing between blobs and - non-blobs must be performed by you, the human being. - </p> - <ul> - <li> - Files in <i>tocheck</i> that you identify as blobs, - should be added appropriately to <i>resources/utilities/coreboot-libre/deblob</i> - </li> - <li> - Files in <i>tocheck</i> that you identify as non-blobs, - should be added appropriately to <i>resources/utilities/coreboot-libre/nonblobs</i> - - also, if you feel it necessary, add an explanation of it in - <i>resources/utilities/coreboot-libre/nonblobs_notes</i> - </li> - </ul> - - <p> - Now come back to the main libreboot root directory (root - of the git clone). If you are still in resources/utilities/coreboot-libre/ - for instance, you would do something like:<br/> - $ <b>cd ../../../</b> - </p> - - <p> - Now delete the coreboot directory:<br/> - $ <b>rm -Rf coreboot/</b> - </p> - - <p> - Download coreboot again, only this time, using the download - script. The download script also applies custom patches - to coreboot (see resources/scripts/helpers/download/coreboot); - if they do not apply anymore, you will have to re-base them - and then update <i>resources/scripts/helpers/download/coreboot</i> - accordingly. Anyway, download coreboot like so:<br/> - $ <b>./download coreboot</b> - </p> - - <p> - If the custom patches no longer apply, and you have to re-base - (or replace?) some patches, please do this in coreboot upstream, - not in libreboot. Then re-include new patches from upstream, - into libreboot. Here is coreboot's guide for contributing - patches:<br/> - <a href="http://www.coreboot.org/Git">http://www.coreboot.org/Git</a>. - </p> - - <p> - Update all configs:<br/> - $ <b>./build config grubupdate</b><br/> - $ <b>./build config dcupdate</b><br/> - This simply takes all of the coreboot <b>.config</b> files from - <i>resources/libreboot/config/</i> and does <b>make oldconfig</b> - on them. It usually works. If it doesn't, you'll need to recreate - those configs from scratch using <b>./build config grubreplace</b> - or <b>./build config dcreplace</b> (optionally - add a config name), or <b>./build config grubmodify</b> - or <b>./build config dcmodify</b> (ditto) - (see <a href="../git/index.html#config">../git/index.html#config</a>) - </p> - - <p> - Finally, build *all* ROM images using the instructions at - <a href="../git/index.html">../git/index.html</a>, to verify - that everything still builds. - </p> - - <p> - Once you've verified that building isn't broken, test *all* - boards (you don't need to test all ROM images, only one - vesafb and one txtmode image for each configuration). If you - do not have all systems supported in libreboot, then you will - need to get other testers for those boards. - </p> - - <p> - If you have established a build issue, or a board no longer - works (booting issues, bugs during/after boot, etc), you'll - need to fix it upstream: - <a href="http://www.coreboot.org/Git">http://www.coreboot.org/Git</a> - and then re-update coreboot (or apply patches from upstream). - </p> - - <p> - You should also test the resulting ROM images from building - with the new or modified coreboot revision. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="newboard_libreboot">Adding a new board to libreboot</h1> - - <p> - Make sure that the board is supported, and that the patches - are included (if there are custom patches that you need). - Add configs for it like so (for GRUB payload):<br/> - $ <b>./build config grubreplace <i>payload</i>/<i>boardname</i></b><br/> - Alternatively, for depthcharge payload:<br/> - $ <b>./build config dcreplace <i>payload</i>/<i>boardname</i></b> - </p> - - <p> - This can also be used for replacing an existing config. - </p> - - <p> - Configure the board. Make sure to add the steps to the config section - in <a href="../git/index.html">../git/index.html</a>. - </p> - - <p> - When you're done, the config will be stored in <i>resources/libreboot/config/</i>. - Now build-test it and then check that it actually works. - </p> - - <p> - The following scripts may also need to be modified before building: - <i>resources/scripts/helpers/build/roms/withgrub</i> and - <i>resources/scripts/helpers/build/roms/helper</i> - </p> - - <p> - The following can be used when updating coreboot-libre (GRUB payload):<br/> - $ <b>./build config grubupdate</b><br/> - You must also do this for boards that use the depthcharge payload:<br/> - $ <b>./build config dcupdate</b><br/> - (adding a board name on the end is optional, for either of these) - </p> - - <p> - The following can be used if you want to modify an existing - configuration (GRUB payload):<br/> - $ <b>./build config grubmodify</b><br/> - For those boards which use the depthcharge payload:<br/> - $ <b>./build config dcmodify</b><br/> - (adding a board name on the end is optional) - </p> - - <p> - Examples (GRUB payload):<br/> - $ <b>./build config grubmodify x60</b><br/> - $ <b>./build config grubreplace x60</b><br/> - $ <b>./build config grubupdate x60</b><br/> - $ <b>./build config grubmodify kfsn4-dre</b><br/> - $ <b>./build config grubreplace kfsn4-dre</b><br/> - $ <b>./build config grubupdate kfsn4-dre</b><br/> - </p> - <p> - Examples (depthcharge payload):<br/> - $ <b>./build config dcmodify veyron_speedy</b><br/> - $ <b>./build config dcreplace veyron_speedy</b><br/> - $ <b>./build config dcupdate veyron_speedy</b> - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="newpatch_libreboot">Add/remove/modify patches in coreboot-libre</h1> - - <p> - Under <b>resources/scripts/helpers/download/coreboot</b> you can find - the instructions used for patching coreboot. - </p> - - <p> - Modify the commit ID on the <i>git reset --hard</i> line accordingly, - and update the list of patches used accordingly. Do not cherry-pick - from review.coreboot.org directly; instead, include the diff in - resources/libreboot/patch/ and use <i>git am</i> - (you can get the diff by using git-format-patch). - </p> - - <p> - When you're done, simply download coreboot again:<br/> - $ <b>./download coreboot</b> - </p> - - <p> - Finally, re-build the parts from coreboot that are used - by the build system (also builds GCC):<br/> - $ <b>./build module coreboot</b> - </p> - - <p> - Before running the above command, you can save time - by copying out the crossgcc that you compiled before - (from coreboot/util/crossgcc/) and then putting it back. - After you've done that, run everything in - <i>resources/scripts/helpers/build/module/coreboot</i> - except for the part that builds GCC. - <b>Only do this if the version is correct.</b> - </p> - - <p> - You should also test the resulting ROM images from building - with the new or modified coreboot revision. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="updating_grub">Updating GRUB</h1> - - <p> - $ <b>rm -Rf grub/</b><br/> - $ <b>git clone git://git.savannah.gnu.org/grub.git</b><br/> - $ <b>cd grub/</b><br/> - $ <b>git log</b> - </p> - - <p> - Open the file <i>resources/scripts/helpers/download/grub</i> and - replace the commit ID on the line that performs <i>git reset --hard</i> - with the commit ID of the GRUB revision that you just downloaded. - </p> - - <p> - $ <b>cd ../</b><br/> - $ <b>./download grub</b> - </p> - - <p> - If it fails because of merge conflicts, you'll need to re-base - or (as appropriate) remove the offending patch(es) in - <i>resources/scripts/helpers/download/grub</i>. - </p> - - <p> - Finally, verify that it will build:<br/> - $ <b>./build module grub</b> - </p> - - <p> - Since GRUB is the payload in libreboot, you should also - build the ROM images and test them, with this different - GRUB version that you have prepared. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="altbuild_grub_payload">Change how the GRUB payload (grub.elf) is built (utility: grub-assemble)</h1> - - <p> - Look in <i>resources/utilities/grub-assemble/</i>. - </p> - - <p> - <i>gen.sh</i> creates ELF executables of GRUB with different configurations: - text-mode or framebuffer mode in coreboot. Essentially, - the text-mode version has no background nor any custom fonts, - and contains MemTest86+. You probably don't need to modify these - files at all. - </p> - - <p> - <i>modules.conf</i> defines which modules will be included in the GRUB - ELF executable. - </p> - - <p> - Since GRUB is the payload in libreboot, you should also - build the ROM images and test them, with this different - GRUB version that you have prepared. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="newconfig_grub">Modify the configuration used in GRUB</h1> - - <p> - Look in <i>resources/scripts/helpers/build/roms/withgrub</i> to - see how the GRUB configuration files are generated. - </p> - - <p> - You might need to modify this. You can also modify the - default configuration by making changes to the files - under <i>resources/grub/config/</i> - </p> - - <p> - Since GRUB is the payload in libreboot, you should also - build the ROM images and test them, with this different - GRUB version that you have prepared. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="updating_depthcharge">Updating depthcharge</h1> - - <p> - The script to download depthcharge is: <i>resources/scripts/helpers/download/depthcharge</i>. - </p> - - <p> - Patches are in <i>resources/depthcharge/patch/</i>. - </p> - - <p> - The configuration used for depthcharge is located in <i>depthcharge/board</i>. - Each board has a <i>defconfig</i> Kconfig configuration and a </i>fmap.dts</i> FMAP device-tree configuration. - Those shouldn't need much attention, but when needed, it's best to modify them in the depthcharge tree (with patches) to keep things in one place. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="updating_flashrom">Updating flashrom</h1> - - <p> - Modify these files: <i>resources/scripts/helpers/download/flashrom</i> - and <i>resources/scripts/helpers/build/module/flashrom</i>. - </p> - - <p> - Patches are in <i>resources/flashrom/patch/</i> - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="updating_bucts">Updating bucts</h1> - - <p> - bucts doesn't really need updating, but the patches are - in <i>resources/bucts/patch</i>, the download script - is <i>resources/scripts/helpers/download/bucts</i> and - the build script is <i>resources/scripts/helpers/build/module/bucts</i>. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <h1 id="updating_memtest86plus">Updating MemTest86+</h1> - - <p> - MemTest86+ doesn't really need updating, but the patches are - in <i>resources/memtest86plus/patch</i>, the download script - is <i>resources/scripts/helpers/download/memtest86plus</i> and - the build script is <i>resources/scripts/helpers/build/module/memtest86plus</i>. - </p> - - <p> - In the download script for memtest86plus, make sure to update the checksum that it matches - for the downloaded source tarball. - </p> - - <p> - <a href="#pagetop">Back to top of page</a>. - </p> - - </div> - - <div class="section"> - - <p> - Copyright &copy; 2015 Leah Rowe &lt;info@minifree.org&gt;<br/> - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license can be found at <a href="../gfdl-1.3.txt">../gfdl-1.3.txt</a> - </p> - - <p> - Updated versions of the license (when available) can be found at - <a href="https://www.gnu.org/licenses/licenses.html">https://www.gnu.org/licenses/licenses.html</a> - </p> - - <p> - UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - </p> - <p> - TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - </p> - <p> - The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - </p> - - </div> - -</body> -</html>