CCP4 PROGRAM SUITE
LICENCE AGREEMENT
(Academic Use)
THIS LICENCE AGREEMENT is made BETWEEN:
1. THE COUNCIL FOR THE CENTRAL LABORATORY OF THE RESEARCH
COUNCILS, an executive Non-Departmental Public Body established as a Research
Council by Royal Charter under the Science and Technology Act 1965 (“CCLRC”); 
and
2. [INSERT NAME OF ACADEMIC/RESEARCH INSTITUTION] whose administrative
offices are at [insert address] ("the Licensee").
BACKGROUND
CCLRC has assembled the CCP4 suite of software applications and libraries with 
support
from the Biotechnology and Biological Sciences Research Council, as part of the
Collaborative Computational Project Number 4.
The CCP4 Software Suite comprises:
a) applications and libraries distributed in source code, that the Licensee may 
use
free of charge for Academic Purposes, subject to the terms of clauses 2.1-2.4 of
this Agreement;
b) applications and libraries distributed in source code, that the Licensee may 
use,
free of charge, subject to the terms of the LGPL or the GPL; and
c) third party software that is included in the CCP4 suite of programs and that 
is
licensed by a third party on that third party's terms and conditions.
1. DEFINITIONS AND INTERPRETATION
1.1 In this Agreement the following expressions have the meaning set opposite:
Academic Purposes: fundamental or basic research or academic teaching,
including any fundamental research that is funded by any
public or charitable body, but not any purpose that
generates revenue (as opposed to grant income) for the
Licensee or any third party. Any research that is wholly or
partially sponsored by any profit making organisation or
that is carried out for the benefit of any profit-making
organisation is not an Academic Purpose;
an Application: a software program designed to provide a specific function
for the user;
the CCP4 Software: the Libraries and Applications distributed by CCLRC from
time to time as part of the CCP4 Software Suite, except
the GNU Software and the Third Party Software;
the CCP4 Website: the website with the URL www.ccp4.ac.uk;
the Current Release: Version 5.0 of the Software, and all later versions that
CCLRC decides may be used under this Agreement;
a Derived Work: any modification of, or enhancement or improvement to,
any of the Software and any software or other work
developed or derived from, or based on, any of the
Software, or that incorporates any of the Software;
the LGPL: the GNU Lesser General Public Licence, a copy of which
appears in Appendix A to this Agreement;
the GPL: the GNU General Public Licence, a copy of which appears
in Appendix B to this Agreement;
the GNU Software: the open source Libraries and Applications that are listed
on the CCP4 Website from time to time as being subject
to, respectively, the terms of the LGPL or the GPL;
a Harmful Element: any virus, worm, time bomb, time lock, drop dead device,
trap and access code or anything else that might disrupt,
disable, harm or impede the operation of any information
system, or that might corrupt, damage, destroy or render
inaccessible any software, data or file on, or that may
allow any unauthorised person to gain access to, any
information system or any software, data or file on it;
Intellectual Property: patents, trade marks, service marks, registered designs,
copyrights, database rights, design rights, know-how,
confidential information, applications for any of the above,
and any similar right recognised from time to time in any
jurisdiction, together with all rights of action in relation to
the infringement of any of the above;
a Library: a collection of reusable programming routines, software
functions or data that may be linked to, or used with, an
Application;
the Licence Period: the period beginning when the Licensee posts or faxes the
completed and signed copy of this Agreement to CCLRC
2
in accordance with clause 5.1, and ending on the
termination of this Agreement under clause 5.2;
the Software: the suite of programs known as CCP4, comprising the
GNU Software, the CCP4 Software and the Third Party
Software; and
the Third Party Software Procheck, FFTw, libjpeg, CBF, Astexviewer, Rasmol and
Phaser.
2. LICENCE
The CCP4 Software
2.1 CCLRC grants the Licensee a non-exclusive, non-transferable, royalty free 
licence to use,
copy, modify, and enhance and distribute the CCP4 Libraries during the Licence 
Period
on the terms and conditions of this Agreement provided that:
2.1.1 the Licensee may distribute, or supply any CCP4 Library or any Derived 
Work
based on that Library, and may allow any third party to use any CCP4 Library or 
any
Derived Work based on that Library, solely on condition that the recipient of 
that
CCP4 Library or that Derived Work will comply with clause 2.1.2 below as though 
it
were named instead of the Licensee in that clause; and
2.1.2 the Licensee will notify CCLRC of any Derived Work made by or for the 
Licensee, or
by any of its employees or students, based on any CCP4 Library, and will provide
CCLRC with a copy of that Derived Work (in source code) within one year after it
was made. The Licensee grants CCLRC an irrevocable, indefinite licence to make
that Derived Work available to any third party on such terms and conditions as
CCLRC may from time to time decide. This clause does not apply to any
executable program based on or combined with a Library, or to any Derived Work
that the Licensee distributes under the LGPL or the GPL.
2.2 CCLRC grants the Licensee a non-exclusive, non-transferable, royalty free 
licence to use
and copy the CCP4 Applications during the Licence Period on the terms and 
conditions of
this Agreement provided that:
2.2.1 the Licensee may not distribute any CCP4 Application or any Derived Work 
based
on any CCP4 Application to any third party, or share their use with any third 
party
(whether free of charge or otherwise); and
2.2.2 the Licensee may not copy any CCP4 Application except for the purposes of 
making
a reasonable number of back-up copies, nor may the Licensee modify any CCP4
Application or create any Derived Work based on any CCP4 Application except for
the purpose of error correction. The Licensee will provide CCLRC with a copy of 
any
3
correction made by the Licensee (in source code) within one year after it was 
made.
The licensee grants CCLRC an irrevocable, indefinite licence to make that
correction available to any third party on such terms and conditions as CCLRC 
may
from time to time decide.
2.3 The CCP4 Software and any Derived Work based on any part of the CCP4 
Software may
be used by the Licensee and its employees and registered students for Academic
Purposes only.
2.4 The licences granted in this clause 2 relate only to the Current Release. 
The Licensee
must acquire a new licence for any future version of the Software that CCLRC 
decides
requires a new or further licence.
The GNU Software
2.5 The GNU Software is supplied to the Licensee on the terms and conditions of 
the LGPL
or the GPL as indicated on the CCP4 Website from time to time. By entering into 
this
Agreement the Licensee agrees to comply with the terms of the LGPL or the GPL 
as so
indicated.
The Third Party Software
2.6 The Third Party Software is supplied to the Licensee on the terms and 
conditions imposed
by the third party owner or licensor. By entering into this Agreement the 
Licensee agrees
to comply with those terms and conditions.
The Software
2.7 The Licensee will not tamper with or remove any copyright or other 
proprietary notice or
any disclaimer that appears on or in any part of the Software, and will 
reproduce the
same in all copies of any of the Software and in all Derived Works.
3. WARRANTIES AND LIABILITY
3.1 The Software is provided for Academic Purposes free of charge. Therefore 
CCLRC and
its licensors give no warranty and make no representation in relation to the 
Software or
any assistance or advice that CCLRC may give in connection with the Software. 
The
Licensee, its employees and students and anyone to whom the Licensee makes the
Software or any Derived Work available, use them at their own risk. The Licensee
will indemnify CCLRC against any claim made by any third party to whom the 
Licensee
has made the Software or any Derived Work available.
3.2 Before using any of the software, the Licensee will check that the Software 
does not
contain any Harmful Element. Neither CCLRC nor its licensors warrants that the 
Software
will run without interruption or be error free, or free from any Harmful 
Element. CCLRC is
not obliged to provide any support or error correction service, assistance or 
advice in
4
relation to the Software. If it does provide that sort of service, assistance 
or advice,
subject to clause 3.7, CCLRC will not be liable for any loss or damage suffered 
by the
Licensee as a result.
3.3 Neither CCLRC nor any of its licensors will be liable to the Licensee to 
the extent that any
loss or damage is caused by the Licensee's failure to implement, or the 
Licensee's delay
in implementing, any upgrade, update, new release, revision, version or 
modification of, or
advice in relation to, the Software that would have remedied or mitigated the 
effects of
any error, defect, bug or deficiency.
3.4 The Licensee acknowledges that proper use of the Software and any Derived 
Work is
dependent on the Licensee, its employees and students exercising proper skill 
and care
in inputting data and interpreting the output provided by the Software or that 
Derived
Work. CCLRC and its licensors will not be liable for the consequences of 
decisions taken
by the Licensee or any other person on the basis of that output. CCLRC does not 
accept
any responsibility for any use which may be made by the Licensee of that 
output, nor for
any reliance which may be placed on that output, nor for advice or information 
given in
connection with that output.
3.5 Subject to clause 3.7, CCLRC's liability for any breach of this Agreement, 
any negligence
or arising in any other way out of the subject matter of this Agreement, will 
not extend to
any incidental or consequential damages or losses, or any loss of profits, loss 
of revenue,
loss of data, loss of contracts or opportunity, whether direct or indirect, 
even if the
Licensee has advised CCLRC of the possibility of those losses arising or if 
they were or
are within CCLRC's contemplation. CCLRC’s licensors will not be liable to the 
Licensee
for any loss or damage, however caused (including by negligence) and whether 
direct or
indirect.
3.6 Subject to clause 3.7, the aggregate liability of CCLRC for any breach of 
this Agreement,
any negligence or arising in any other way out of the subject matter of this 
Agreement will
not exceed £50,000.
3.7 Nothing in this Agreement (including without limitation the LGPL or the 
GPL, as
applicable) limits or excludes CCLRC's liability for death or personal injury 
caused by its
negligence or for any fraud, or for any sort of liability that, by law, cannot 
be limited or
excluded.
3.8 In addition to the terms and conditions of the LGPL or the GPL (as 
applicable), and the
terms that apply to any Third Party Software, the terms of this clause 3 apply 
as
between CCLRC and the Licensee, and the validity of any part of this clause 3 
will not
be affected by any part of the LGPL or the GPL or the terms that apply to any 
Third
Party Software being held to be invalid by any court.
5
3.9 The express undertakings and given by CCLRC in this Agreement and the terms 
of this
Agreement are in lieu of all warranties, conditions, terms, undertakings and 
obligations
on the part of CCLRC, whether express or implied by statute, common law, custom,
trade usage, course of dealing or in any other way. All of these are excluded 
to the
fullest extent permitted by law.
4. INTELLECTUAL PROPERTY RIGHTS AND ACKNOWLEDGEMENTS
4.1 Nothing in this Agreement assigns or transfers any Intellectual Property 
Rights in any of
the Software. Those rights are reserved to CCLRC or its licensors.
4.2 The Licensee will ensure that, if any of its employees or students publish 
any article or
other material resulting from, or relating to, a project or work undertaken 
with the
assistance of any part of the Software, that publication will contain a proper
acknowledgement or citation as indicated from time to time on the CCP4 Website.
5. TERMINATION
5.1 This Agreement will take effect and the Licence Period will start when a 
completed copy
of this Agreement, signed on behalf of the Licensee, has been posted to the 
Secretary to
CCP4, at CCLRC, Daresbury Laboratory, Warrington WA 4 4AD, or faxed to :+44 1925
603825 (or to any other address or fax number given for this purpose on the CCP4
website at the time the Licensee downloads this form of Licence Agreement from 
that
website).
5.2 This Agreement will terminate immediately and automatically if:
5.2.1 the Licensee is in breach of this Agreement; or
5.2.2 the Licensee becomes insolvent, or if an order is made or a resolution is 
passed for
its winding up (except voluntarily for the purpose of solvent amalgamation or
reconstruction), or if an administrator, administrative receiver or receiver is
appointed over the whole or any part of its assets, or if it makes any 
arrangement
with its creditors.
5.3 The Licensee's right to use the Software will cease immediately on the 
termination of this
Agreement, and the Licensee will destroy all copies of the Software that it or 
any of its
employees or students holds.
5.4 Clauses 1, 2.1.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3, 4, 5.3, 5.4, 5.5 and 6 will 
survive the expiry of
the Licence Period and the termination of this Agreement, and will continue 
indefinitely.
5.5 CCLRC may withdraw any of the Software from the CCP4 Suite at any time. If 
any third
party owner of the Intellectual Property in any of the Software withdraws 
CCLRC’s right
to distribute that software, the Licensee’s rights under this Agreement in 
relation to that
6
software will immediately terminate, and the Licensee will cease using that 
part of the
Software
6. GENERAL
6.1 Headings: The headings in this Agreement are for ease of reference only; 
they do not
affect its construction or interpretation.
6.2 Assignment etc: The Licensee may not assign or transfer this Agreement as a 
whole, or
any of its rights or obligations under it, without first obtaining the written 
consent of
CCLRC.
6.3 Illegal/unenforceable provisions: If the whole or any part of any provision 
of this
Agreement is void or unenforceable in any jurisdiction, the other provisions of 
this
Agreement, and the rest of the void or unenforceable provision, will continue 
in force in
that jurisdiction, and the validity and enforceability of that provision in any 
other
jurisdiction will not be affected.
6.4 Waiver of rights: If CCLRC fails to enforce, or delays in enforcing, an 
obligation of the
Licensee, or fails to exercise, or delays in exercising, a right under this 
Agreement, that
failure or delay will not affect its right to enforce that obligation or 
constitute a waiver of
that right. Any waiver by CCLRC of any provision of this Agreement will not, 
unless
expressly stated to the contrary, constitute a waiver of that provision on a 
future occasion.
6.5 Entire agreement: This Agreement constitutes the entire agreement between 
the parties
relating to its subject matter. The Licensee acknowledges that it has not 
entered into this
Agreement on the basis of any warranty, representation, statement, agreement or
undertaking except those expressly set out in this Agreement. The Licensee 
waives any
claim for breach of, or any right to rescind this Agreement in respect of, any
representation which is not an express provision of this Agreement. However, 
this clause
does not exclude any liability which CCLRC may have to the Licensee (or any 
right which
the Licensee may have to rescind this Agreement) in respect of any fraudulent
misrepresentation or fraudulent concealment before the signing of this 
Agreement.
6.6 Amendments: No variation of, or amendment to, this Agreement will be 
effective unless
it is made in writing and signed by each party's representative.
6.7 Third parties: No one except a party to this Agreement has any right to 
prevent the
amendment of this Agreement or its termination, and no one except a party to 
this
Agreement may enforce any benefit conferred by this Agreement, unless this 
Agreement
expressly provides otherwise.
6.8 Governing law: This Agreement is governed by, and is to be construed in 
accordance
with, English law. The English Courts will have exclusive jurisdiction to deal 
with any
7
dispute which has arisen or may arise out of or in connection with this 
Agreement, except
that CCLRC may bring proceedings against the Licensee or for an injunction in 
any
jurisdiction. [If the Licensee's usual place of business or registered office 
is not in
England, the Licensee’s address for service in England is ____].
SIGNED for and on behalf of the Licensee:
Name:
Position:
Signature:
Date:
