<<

Maven and Software Licensing: Some Comments

January 17, 2004

Summary

Sakai is using the Maven software from The Apache Software Foundation to install Sakai software. The Maven software and associated plug-ins use technology to resolve three problems in software distribution: Software from multiple sources under different licensing agreements, software that cannot be redistributed but required for the application, and changes in licensing terms and conditions.

Maven (and the associated plug-ins) capabilities:

• Extract the licenses from all software included in the distribution, Maven converts them to license text and provides reports.

• Instead of including all software in the distribution, Maven can download software from a source (Website) and include it in the installation.

• When updating an existing installation, Maven can compare the license agreements of the new distribution with the previously installed version to identify those with differences.

These capabilities may not be sufficient “adequate notice” of license terms and conditions. Sakai could include, in the documentation, a brief discussion of actions the user should take to verify the license terms and agreements apply to the user’s specific installation (especially if it is commercial entity) and to make users are aware that the terms and conditions of licenses of included or downloaded software may be different from the Sakai license.

Background

Sakai Chief Architect Charles Severance identified the issue in his November 17, 2004 e- mail “Topic for discussion - Maven and its impact on licensing terms and install process.” He wrote:

Historically, the viral nature of license agreements (GPL as the extreme example), means that as one assembles a distribution of software (i.e. A tar ball to download), one must look at all of the "included" license agreements and adjust one's license agreement accordingly.

With Maven, a distribution can can *automatically* "self-assemble" a myriad of dependent components *after* the distribution is downloaded and installation has begun.

The beauty of this situation is that the license terms of the initial download do not have to "include" or "reflect" the license terms of the elements which are "assembled" on the end-user's system under the control of Maven. Each of those software elements is governed by its own license agreement with the end-user.

The license is not between the component owner(i.e. MySql) and the software integrator (i.e. Sakai) but rather between the component owner (i.e. MySql)and the end user (University of Lancaster).

As such, we can produce a distribution which automatically installs the MySql connector (GPL'd code) on the user's system in the right place in Tomcat without ever including it in the Sakai download. This eliminates the nasty manual steps needed to hand- install any GPL components after an open-open software tool has been downloaded and half-installed.

This message identified both the problem and the use of Maven as a solution. Since then Maven plug-ins have been developed that extend the capabilities.

The combinations of software that are included in a “solution” can lead to unintended violation of copyright. This is especially true if software is included in another software product or distribution.

The MySQL database is an example. The company has two licenses. One for those who download and use the software themselves. Another when the software is used as part of a product or is redistributed with a product.

Users have often wanted a “Quick Start” distribution that creates a running software system through a single download. Since many software solutions require a database, developers have tended to include a database product that permits redistribution. For example, uPortal included the Hypersonic database management system in the Quick Start version. Hypersonic is a small system and operates well for small database. However, in production most uPortal users use MySQL or Oracle. In those cases the user either had to have an installed (and licensed) version of Oracle or download the code from MySQL separately since redistribution was not permitted.1 uPortal “Quick Start” software was distributed using the less powerful Ant installation software.

Sakai Software Distribution

The use of Maven will permit a simple installation to include software that does include redistribution-restricted software, and if the user uses the license reporting capabilities, will provide the information needed to remain in compliance. Unfortunately software developers are unaware and software users may not read and understand the combinations of terms and conditions of many separate licenses.

Through efforts of the Open Source Initiative to reduce the number of open source licenses, this will be less of a problem in the future.

1 MySQL is available under open source and commercial licensing agreements. In 2004 MySQL changed its licensing terms incorporate a “FLOSS Exception” that applied to MySQL 4 or subsequent versions. This improvement makes the licensing both broader and more complex. These licenses have not been tested in the courts to define “adequate notice.” Until that time Sakai could have an Appendix on licensing included, as MySQL does, in its documentation so the reader would be aware that multiple licenses may apply and to interpret the limitations.

In summary, the problem is real, but perhaps not significant for colleges and universities (as contrasted to commercial firms). The Maven solution is helpful for everyone. There are examples of text that could be included in Sakai documentation that would provide guidance to developers and users about the multiple licenses. From: Charles Severance

To: sakai

Subject: Topic for discussion - Maven and its impact on licensing terms and install process

Date: Wed, 17 Nov 2004 13:11:56 -0500 (EST)

This is an idea that has been rolling around in my mind for a few days so I figured that I would just drop it out there for folks to talk and think about.

Historically, the viral nature of license agreements (GPL as the most extreme example), means that as one assembles a distribution of software (i.e. A tar ball to download), one must look at all of the "included" license agreements and adjust one's license agreement accordingly.

With Maven, a distribution can can *automatically* "self-assemble" a myriad of dependent components *after* the distribution is downloaded and installation has begun.

The beauty of this situation is that the license terms of the initial download do not have to "include" or "reflect" the license terms of the elements which are "assembled" on the end-user's system under the control of Maven. Each of those software elements is governed by its own license agreement with the end-user.

The license is not between the component owner(i.e. MySql) and the software integrator (i.e. Sakai) but rather between the component owner (i.e. MySql) and the end user (University of Lancaster).

As such, we can produce a distribution which automatically installs the MySql connector (GPL'd code) on the user's system in the right place in Tomcat without ever including it in the Sakai download. This eliminates the nasty manual steps needed to hand-install any GPL components after an open-open software tool has been downloaded and half-installed.

Because many of these "viral" licenses allow free re-distribution, the viral code can live on literally any repository for download and install at run-time in the user's system.

So we end up in Sakai where our license terms only reflect the code that we build that is in our download. Given that our download does not include any other code - we can keep our license terms however we like.

To me this brings us to a completely new phase where viral and no-viral code can be combined in far more ways than ever before. The net result is that the value and utility of both viral and non-viral software is greatly enhanced. It also means that making a decision to go viral is not the life-and-death choice that it was formerly.

It means that the only important clauses in licenses is the "unlimited" redistribution clause. It effectively inoculates software from a viral license - unless there is truly a desire to pull the viral software inside of the newly formed application. But for software that is separable by an API, viral clauses cease to be a barrier to integration.

1 17 January 2005

And cross-project license negotiations become trivially simple because they are no longer necessary because of Maven :)

I would observe that our current Quick Start distribution already follows the pattern where there are no (with the exception of the James stuff) jars that are part of the distribution and that (nearly) all jars come through the Maven process that happens - post-download.

Someone should write a CHE article about this...

/Chuck ------

This automatic notification message was sent by CTools (https://ctools.umich.edu) from the Mellon Sakai site. You can modify how you receive notifications at MyWorkspace > Preferences.

X-Account-Key: account2 X-UIDL: <[email protected]> X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Received: from bologna.ds.itd.umich.edu ([141.211.253.101]) by oe-mp1.bizmailsrvcs.net (InterMail vM.5.01.06.05 201-253-122-130-105-20030824) with ESMTP id <20041117181156.NZXD21330.oe- [email protected]> for ; Wed, 17 Nov 2004 12:11:56 -0600 Received: from bologna.ds.itd.umich.edu (bologna.ds.itd.umich.edu [127.0.0.1]) by bologna.ds.itd.umich.edu (Postfix) with ESMTP id 1D9DE31DEC; Wed, 17 Nov 2004 13:11:56 -0500 (EST) Message-ID: <[email protected]>

Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Received: from bologna.ds.itd.umich.edu ([127.0.0.1]) by bologna.ds.itd.umich.edu (JAMES SMTP Server 2.1.3) with SMTP ID 46 for ; Wed, 17 Nov 2004 13:11:47 -0500 (EST) Received: from plates.rsug.itd.umich.edu (ns-map.ds.itd.umich.edu [141.211.253.192]) by bologna.ds.itd.umich.edu (Postfix) with ESMTP id 24C3F31DEC for ; Wed, 17 Nov 2004 13:11:47 -0500 (EST) Received: FROM reformers.mr.itd.umich.edu (reformers.mr.itd.umich.edu [141.211.93.147]) BY plates.rsug.itd.umich.edu ID 419B9462.3872.4383 ; 17 Nov 2004 13:11:46 -0500 Received: from [192.168.123.171] (c-24-11-168-153.client.comcast.net [24.11.168.153]) by reformers.mr.itd.umich.edu (smtp) with ESMTP id iAHIBje5010563; Wed, 17 Nov 2004 13:11:45 -0500 User-Agent: Microsoft-Entourage/10.1.4.030702.0 X-Content-Type-Message-Body: text/plain; charset="US-ASCII" Content-Type: text/plain; charset=ISO-8859-1

2 17 January 2005

Explanation

Some folks have asked why do we require the POM and license each time an artifact is deployed so here's a small explanation. The POM being deployed with the artifact is part of the process to make transitive dependencies a reality in Maven. The logic for getting transitive dependencies working is really not that hard, the problem is getting the data. So we have changed the process of uploading artifacts to include the POM in an attempt to get transitive dependencies working as quickly as possible. The other applications that may be possible having all the POMs available for artifacts are vast, so by placing them into the repository as part of the process we open up the doors to new ideas that involve unified access to project POMs. We also ask for a license now because it is possible that your project's license may change in the course of its life time and we are trying create tools to help normal people sort out licensing issues. For example, knowing all the licenses for a particular graph of artifacts we could have some strategies that would identify potential licensing problems.

From http://maven.apache.org/repository-upload.html, 13 January 2005

About Maven

Maven is a Java project management and project comprehension tool. Maven is based on the concept of a project object model (POM) in that all the artifacts produced by Maven are a result of consulting a well defined model for your project. Builds, documentation, source metrics, source cross-references and a countless number of reports are all controlled by your POM. Look here to see the full list of Maven's features.

For more information on getting started with Maven, see the Getting Started guide.

Maven has many objectives, but in a nutshell Maven aims to make the developer's life easier by providing a well defined project structure, well defined development processes to follow, and a coherent body of documentation that keeps your developers and clients apprised of what's happening with your project. Maven alleviates a lot of what most developers consider drudgery and lets them get on with the task at hand. This is essential in OSS projects where there aren't many people dedicated to the task of documenting and propagating

1 17 January 2005 the critical information about your project which is necessary in order to attract potential new developers and clients. The Big Picture

The intent of Maven is to make intra-project development highly manageable in the hopes of providing more time for cross-project development. You might call it cross-project pollination or the sharing of project development knowledge, this is what Maven attempts to encourage.

From http://maven.apache.org/index.html, 12 January 2005.

Maven's Goals

Maven's primary goal is to allow a developer to comprehend the complete state of a development effort in the shortest period of time. In order to attain this goal there are several areas of concern that Maven attempts to deal with:

• Making the build process easy • Providing a uniform build system • Providing quality project information • Providing clear development process guidelines • Providing guidelines for thorough testing practices • Providing coherent visualization of project information • Allowing transparent migration to new features

Making the build process easy

While using Maven doesn't eliminate the need to know about the underlying mechanisms, in our case Jelly and Werkz, Maven does provide a lot of shielding from the harrowing details that may thwart new users. Maven has an easy installation process, that we strive to make comfortable for novices and experts alike, that when complete allows for very easy building while providing a great deal of power.

Providing a uniform build system

Maven allows a project to build using its project object model (POM) and a single set of Ant build files that are shared by all projects using Maven thus providing a uniform build system. Once you familiarize yourself with how one Maven project builds you automatically know how all Maven projects build saving you immense amounts of time when trying to navigate many projects.

2 17 January 2005 Providing quality project information

Maven provides a full gamut of useful project information that is in part taken from your POM and in part generated from your project's sources. Maven currently provides the following information about your project:

• Change log document created directly from repository information. • Cross referenced sources • Source metrics • Mailing lists • Developer list • Dependency list • Unit test reports including coverage

As Maven improves the information set provided will improve, all of which will be transparent to users of Maven.

Providing clear development process guidelines

As part of using Maven you have access to the development process guidelines that have been gathered by the collective of projects that use Maven for development. This is an area that needs development and general improvement, but as more projects use Maven more ideas on general develop process will collect and all those ideas will be propagated to all Maven users.

Providing guidelines for thorough testing practices

Maven provides an easy way to start unit testing right from your project's inception and Maven can enforce rules so that testing is made to be an integral part of your project's development lifecycle. Maven also provides a general pattern for integration unit tests and we are currently integrating Quilt for coverage testing. Specification, execution, and reporting of your projects unit tests are part of the normal build cycle using Maven. The Junit framework and corresponding support in Ant provide the unit testing harness. Current unit testing best practices were used as guidelines:

• Keeping your test source code in a separate, but parallel source tree • Using test case naming conventions to locate and execute tests • Have test cases setup their environment and don't rely on customizing the build for test preparation.

In-container unit testing of web based applications is provided by the Cactus testing framework. Maven provides a testing harness for these integration unit

3 17 January 2005 tests in the same fashion as regular unit tests. Preliminary support for in- container testing includes Tomcat 4.x based containers.

Providing coherent visualization of project information

In order to aid in that comprehension, it will be necessary not only to produce metrics for the source base in question but to provide a terse graphical representation of the state of development. The following is an excerpt from the beginning of Edward R. Tufte's book The Visual Display of Quantitative Information:

Excellence in statistical graphics consists of complex ideas communicated with clarity, precision, and efficiency. Graphical displays should:

• show the data • induce the viewer to think about the substance rather than about methodology, graphic design, the technology of graphic production, or something else • avoid distorting what the data have to say • present many numbers in a small space • make large data sets coherent • encourage the eye to compare different pieces of data • reveal the data at several levels of detail, from a broad overview to the fine structure • serve a reasonably clear purpose: description, exploration, tabulation, or decoration • be closely integrated with the statistical and verbal descriptions of a data set.

Allowing transparent migration to new features

Maven provides an easy way for Maven clients to update their installations so that they can take advantage of any changes that been made to Maven proper. As everything is controlled by a single set of build files this simply involves updating those build files and any accompanying data structures that are part of the Maven installation. As a user, you simply have to update Maven and you have access to all new features. We are also working on an easy way to propagate changes in the POM so error prone manual editing may be avoided.

From http://maven.apache.org/objectives.html, 12 January 2005

Project: Maven Plugins: Summary

Plugins for Maven (http://maven.apache.org) - manage all aspects of your project (tests, docs, distribution) from a single project descriptor!. This project

4 17 January 2005 provides a series of plugins that are not available with Maven due to differing license terms.

:Java Foundry

• Development Status: 5 - Production/Stable • Intended Audience: Developers, End Users/Desktop, System Administrators • License: Apache Software License, BSD License, GNU General Public License (GPL) • Operating System: OS Independent (Written in an interpreted language) • Programming Language: Java • Topic: Build Tools, Code Generators, Compilers, Debuggers, Packaging, Software Distribution • Translations: English, French • User Interface: Win32 (MS Windows)

From http://sourceforge.net/projects/maven-plugins/, 12 January 2005

5 17 January 2005 Agenda

• What is Maven? Building and Managing • A J2EE example Java Projects with Maven • Customizing and extending Maven • Tips and discussions Alan Wang Connectria

What is Maven? Build Tools Retrospective

• A Java project management and • One level above ant. integration build tool. •Make ! ant ! Maven • Based on the concept of XML •(Assembly ! C ! C++) Project Object Model (POM). • Originally developed for building Make makefile target Turbine. • A small core with numerous Ant build.xml target plugins (in Jelly). Maven project.xml goals maven.xml

Under the Hood Architecture Overview

Build System jalopy site junit etc… test cactus artifact xdoc project.xml (pom) maven.xml (goals) http Local Remote ear gump xdoclet javadoc Repo Repo maven java jar war ejb plugins

maven core, jelly, werkz ant

forehead classloader util launcher Site

Maven

Building and Managing Java Projects with Maven 1 Artifact Repository Artifact Repository

The Most Important Feature • Local Repository • Remote Repository – A local mirror/cache of downloaded

${mave.repo.remote}//s/-. artifacts from remote repositories. – Located at … - repository ${user.home}/.maven/repository -[…] xalan - xalan xalan -jars 2.5.1 ${mave.repo.local}//s/-. jar - xalan-2.5.0.jar - xalan-2.5.1.jar … -[…] … -[…]

Implementing an Example Create a New Project

• Get Started Type: – Download from maven genapp • http://maven.apache.org/start/download.html It will prompt for – Current version: 1.0rc1 – project id – project name – Environment setup – project package name • export MAVEN_HOME=c:/maven-1.0rc1 • export PATH=“$MAVEN_HOME/bin;$PATH” A Sample Service J2EE Project (or set MAVEN_HOME = c:\maven-1.0rc1 • EJB (stateless session beans exposed as web set PATH = %MAVEN_HOME%\bin;%PATH% ) services) – run install_repo.sh to populate the local • Data components repository • Web application

Directory Layout Directory Layout

Project Directory Layout A Component Directory Layout sampleservice … – project.xml - Master POM of the project service-data - Data component subproject – maven.xml - Reactor definition – project.xml - POM of the data project – project.properties - Properties related to the project – maven.xml - Goals definition – application/ - Application component – project.properties - Properties related to the project – src/ - Source directory – service-data/ - Common data component – conf/ - Configuration and resource files – service-ejb/ - EJB/WS component – java/ - Java source files – service-web/ - Web Application component – test/ - Test source files – target/ - Generated artifact directory – target/ - Generated artifact directory – xdocs/ - Various documents in xml format – xdocs/ - Various documents in xml format –… …

Building and Managing Java Projects with Maven 2 Project Object Model (POM) Project Object Model (POM)

Projects are described as Project Object Model. • Project Dependency • Project Management – Libraries needed for build and runtime. – Detailed description of the project. – Company information. – Developer roles and information. • Project Reports – Mailing list and source control modules – Junit reports configuration. • Project Build – Javadoc reports – Source code and test code location. – Checkstyle reports, ….etc – Resources location

Project Management Section Project Management Section

3 […] 2003 Sample Service Demo to use maven sampleservice 1.0 A detailed description about this demo http://www.myinc.com/sampleservice/ My, Inc. dev.myinc.com http://www.myinc.com /www/sampleservice/ /images/logo.gif /www/dist/sampleservice … (elements in bold are required) /www/www.myinc.com/somedir

Project Management Section Project Dependency Section

[…] […] scm:cvs:pserver:[email protected]:/cvsroot:samples ervice scm:cvs:pserver:${maven.username}@cvs.myinc log4j Special Dependency: .com:/cvsroot:sampleservice log4j SNAPSHOT http://cvs.myinc.org/viewcvs/sampleservice/ 1.2.8 true true1.0-beta-1 > 1.0-beta-1 1.0-beta-1 […] […]

Building and Managing Java Projects with Maven 3 Project Dependency Section Project Dependency Section

Dependency Classloader Dependency Override […] project.xml … bcel weblogic bcel weblogic 5.1 8.1.1 root root […] project.properties Maven has three classloaders: … root -- ant classloader ## Dependency override root.maven – maven core classloader maven.jar.override = on default – plugin classloader maven.jar.weblogic = ${weblogic.home}/lib/weblogic.jar maven.jar.webservices = ${weblogic.home}/lib/webservices.jar

Project Build Section Project Build Section

Defines the location of source, test and resource files. […] **/*Test.java [email protected] ${src.java.dir} ${src.test.dir} src/conf src/java […] src/test ${src.conf.dir} src/aspect prefix package name, e.g. com.myinc. sampleservice **/*.properties

Project Report Section Project Report - Example

Defines various reports to be generated Jakarta Turbine maven-jdepend-plugin maven-checkstyle-plugin maven-changelog-plugin maven-developer-activity-plugin maven-file-activity-plugin maven-javadoc-plugin maven-jxr-plugin maven-junit-report-plugin maven-linkcheck-plugin maven-tasklist-plugin

Building and Managing Java Projects with Maven 4 Project Report - XDoc Property Processing

xdocs/navigation.xml ${project.home}/project.properties Project scope … properties

${project.home}/build.properties Properties specific to each build ${user.home}/build.properties Properties xdocs/features.xml specific to each user Turbine Features CLI –Dfoo=bar Jon S. Stevens The last definition wins Sample build.properties:

This document is for bragging about all of Turbine's …. bea.home=c:/bea81sp1 … oracle.home=c:/oracle/ora9i

Build Process Design Subproject: service-data

project.xml (POM) Common data module sampleservice –project.xml Sample Service project components EJBs –maven.xml ../project.xml –application/ Web Application –service-data/ Sample Service Data –project.xml Module –maven.xml sampleservice-data –src/ Data EJB Webapp EAR –service-ejb/ (jar) (jar) (war) –service-web/ Note: POM can be inherited. –xdocs/

Subproject: service-data Subproject: service-ejb

maven.xml (Goals) project.xml (POM) sampleservice sampleservice –project.xml –project.xml ../project.xml xmlns:j="jelly:core" –application/ –application/ Sample Service EJB xmlns:maven="jelly:maven" –service-data/ –service-data/ sampleservice-ejb xmlns:ant="jelly:ant"> –project.xml –service-ejb/ –maven.xml –project.xml ${pom.groupId} –maven.xml prereqs="jar:install"/> –service-ejb/ sampleservice-data –src/ –service-web/ ${pom.currentVersion} –service-web/ –xdocs/ –xdocs/ true Note: Goals can also be inherited Make jar Local Repo Local xdoclet compile ws-gen ejb-jar Repo

Building and Managing Java Projects with Maven 5 Subproject: service-ejb Subproject: service-ejb

Maven XDoclet Plugin Maven XDoclet Plugin - Properties

– Support all standard tags ## EJBDoclet maven.xdoclet.ejbdoclet.fileset.0.include=**/ejb/**/*Bean.java – Automatically includes generated src dir in compilation src set maven.xdoclet.ejbdoclet.ejbSpec=2.0 – Support util class generation maven.xdoclet.ejbdoclet.verbose=true – Dependencies maven.xdoclet.ejbdoclet.session.0=false – xdoclet-ejb-module-1.2 maven.xdoclet.ejbdoclet.localhomeinterface.0=true – xdoclet-web-module-1.2 maven.xdoclet.ejbdoclet.localinterface.0=true maven.xdoclet.ejbdoclet.utilobject.0=true – xdoclet-bea-module-1.2 (for WebLogic Server Deployment) ## EJBDoclet WebLogic Nested Element maven.xdoclet.ejbdoclet.weblogic.0=true maven.xdoclet.ejbdoclet.weblogic.0.mergeDir=${src.dir}/ejbdoclet Note: Current version 1.2 does not work out-of-box (needed to fix the project.xml) maven.xdoclet.ejbdoclet.weblogic.0.destDir=${maven.xdoclet.ejbdoclet.deploym entdescriptor.0.destDir}

Subproject: service-ejb Subproject: service-ejb

Web Services Maven EJB Plugin sampleservice –project.xml – Currently Maven has no container specific plugins – Currently no container specific ejb-jar –maven.xml –application/ –service-data/ –service-ejb/ classname="weblogic.ant.taskdefs.webservices.javaschema.JavaSchema"/> –project.xml …. value="${pom.getPluginContext('maven-xdoclet-plugin')…./> –src/ descriptordir="${maven.ejb.descriptordir}" … flatdestdir="true" –xdocs/ project.properties basejarname="${pom.artifactId}-${pom.currentVersion}"> ## Web Services Use tag: maven.webservice.javaComponents=\ @wlws maven.webservice.autotype.package=com.myinc.sampleservice.autotype … maven.webservice.autotype.keepgenerated=false

Subproject: service-ejb Subproject: service-web

Making the Final EJB Jar project.xml (POM) sampleservice sampleservice –project.xml –project.xml –maven.xml ../project.xml –maven.xml Sample Service Web Application –application/ –application/ sampleservice-web –service-data/ –service-data/ … –service-ejb/ –service-ejb/ –project.xml ${pom.groupId} –service-web/ –maven.xml sampleservice-data –project.xml –src/ ${pom.currentVersion} –maven.xml –service-web/ –src/ –xdocs/ –xdocs/ ${pom.groupId} sampleservice-ejb ${pom.currentVersion} ejb custom property artifact="${maven.build.dir}/${pom.artifactId}-${pom.currentVersion}.xml" true type="xml“ project="${pom}"/>

Building and Managing Java Projects with Maven 6 Subproject: service-web Subproject: application ${pom.groupId} maven.xml (goals) sampleservice-ejb EAR Packaging ${pom.currentVersion} ejb ../project.xml true Sample Service Application sampleservice sampleservice –project.xml ${pom.groupId} ${pom.groupId} sampleservice-web –maven.xml sampleservice-data preGoal is ${pom.currentVersion} –application/ ${pom.currentVersion} used to generate jar war web services DD –project.xml file if defined –maven.xml true true –src/ –service-data/ /${pom.artifactId} –service-ejb/ –service-web/ –xdocs/

Subproject: application Putting It Together: Reactor

EAR Packaging xmlns:maven="jelly:maven" sampleservice xmlns:ant="jelly:ant"> –project.xml …. –maven.xml –application/ –service-data/ basedir="${basedir}" –project.xml –service-web/ postProcessing="true" –maven.xml –xdocs/ includes="*/project.xml" –application/ project.properties excludes="" –project.xml … goals="build" –maven.xml ## Ear related banner="Building" –src/ maven.ear.appxml.dir = ${maven.build.dir}/application/META-INF –service-data/ maven.ear.appxml = ${maven.ear.appxml.dir}/application.xml ignoreFailures="false"/> –service-ejb/ maven.ear.appxml.generate = true –service-web/ … Tip: container specific DD files can be stored at src/application/META-INF –xdocs/

Putting It Together: Reactor Customizing Maven

/c/dev/sampleservice/>maven __ __ | \/ |__ _Apache__ ___ • Override plugin properties in | |\/| / _` \ V / -_) ' \ ~ intelligent projects ~ |_| |_\__,_|\_/\___|_||_| v. 1.0-rc1-SNAPSHOT – project.properties Starting the reactor... – build.properties Our processing order: Sample Service Data Module Sample Service EJB •Use maven.xml Sample Service Web Application Sample Service Application +------– Override plugin goals | Building Sample Service Data Module | Memory: 3M/4M – Intercept plugin goals with +------build: and

java:prepare-filesystem: [mkdir] Created dir: C:\dev\sampleservice\service-data\target\classes • Write you own plugin

java:compile: – In Java, Jelly, or other scripting language. ….

Building and Managing Java Projects with Maven 7 Real Life Maven Summary

• Single artifact per project •Pros – Can be tweaked to deliver multiple artifacts – Work out-of-box for standard projects as long as no type conflicts – Build assets highly reusable, thanks to – Fine-grained design core/plugin architecture • Project Migration/Mavenizing – Build rules are more dynamic – Can co-exist with ant – Best suited for project integration – May require different directory structure – IDE friendly • Too Slow? •Cons – Use console plugin – Incomplete documentation • Are you ready for maven? – Missing convenience details – Culture change – Not yet mature. Still waiting for the R1.

Get More Questions

• http://maven.apache.org • http://www.onjava.com/pub/a/onjava/2003/10/22/maven.html • http://www-106.ibm.com/developerworks/java/library/j-maven • http://www.javausergroup.at/events/maven.pdf • http://www.theserverside.com/articles/article.jsp?l=MavenMagic • http://blogs.codehaus.org/people/vmassol/archives/000080.html • http://www.javaworld.com/javaworld/jw-10-2002/jw-1011- maven.html

Building and Managing Java Projects with Maven 8 MySQL Open Source License

Our software is 100% GPL (General Public License); if yours is 100% GPL compliant, then you have no obligation to pay us for the licenses. This is a great for the open source community and those of you who are developing open source software.

The formal terms of the GPL license can be found in the GNU General Public License section of the MySQL Reference Manual. Please note that the General Public License can be restrictive, so if it doesn't meet your needs, you are better served by our Commercial License.

Specifically:

• MySQL is free use for those who are 100% GPL. If your application is licensed under GPL or compatible OSI license approved by MySQL AB, you are free to ship any GPL software of MySQL AB with your application ('application' means any type of software application, system, tool or utility). You do not need a separate signed agreement with MySQL AB, because the GPL license is sufficient. We do, however, recommend you contact us as there usually are good opportunities for partnership and co- marketing. • Under the Open Source License, you must release the complete source code for the application that is built on MySQL. You do not need to release the source code for components that are generally installed on the operating system on which your application runs, such as system header files or libraries. • Free use for those who never copy, modify or distribute. As long as you never distribute the MySQL Software in any way, you are free to use it for powering your application, irrespective of whether your application is under GPL license or not. • You are allowed to modify MySQL Software source code any way you like as long as the distributed derivative work is licensed under the GPL as well. • You are allowed to copy MySQL binaries and source code, but when you do so, the copies will fall under the GPL license. • Optional GPL License Exception for PHP. As a special exception, MySQL AB gives permission to distribute derivative works that are formed with GPL-licensed MySQL software and with software licensed under version 3.0 of the PHP license. You must obey the GNU General Public License in all respects for all of the code used other than code licensed under version 3.0 of the PHP license. • FOSS Exception. We have created a license exception which enables Free and Open Source software ("FOSS") to be able to include the GPL- licensed MySQL client libraries despite the fact that not all open source licenses are compatible with the GPL.Read more about the exception.

1 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 Non-Profits, Academic Institutions, and Private Individuals

If you represent a non-profit organization or an academic institution, we recommend you publish your application as an open source / free software project using the GPL license. Thereby, you are free to use MySQL software free of charge under the GPL license. We believe that if you have strong reasons to not publish your application in accordance with the GPL, you should purchase commercial licenses.

If you are a private individual you are free to use MySQL software for your personal applications as long as you do not distribute them. If you distribute them, you must make a decision between the Commercial License and the GPL. Please note that even if you ship a free demo version of your own application, the above rules apply.

Recommendations

Please note that MySQL AB can only give advice on which license is right for you. The final judgment, of course can be made only by a court of law. With that said, we recommend the commercial license to all commercial and government organizations. This frees you from the broad and strict requirements of the GPL license.

To all free software enthusiasts we recommend our products under the GPL license. We believe that MySQL AB is one of the world's largest companies that offers all its software under the GPL license.

To anyone in doubt, we recommend the commercial license. It is never wrong. Thanks to our cost-effective way of producing software, we are able to sell our commercial licenses at prices well under the industry average.

Older Versions

Note that some older versions of the MySQL database server (prior to 3.23.19) are using the Version 4, March 5, 1995, license. See the documentation for the specific version for more information.

When in Doubt

If you have any questions on MySQL licensing, feel free to contact us: USA and Canada: + 1-425-743-5635 or online Germany, Austria, and Switzerland: +49-(0)7022-9256-30 or [email protected] Scandinavia (Sweden, Norway, and Denmark): +46 730 234 111 France: +33 (0)1.43.077.099 or [email protected]

2 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 Finland: +358 (0)9 2517 5553 Spain, Portugal, and Latin America: [email protected] OSI = Open Source Initiative, www.opensource.org/licenses GPL = GNU General Public License, http://www.gnu.org/copyleft/gpl.html Version 4.1, 12 March 2004

3 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 H GNU General Public License

Version 2, June 1991

Copyright © 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

24.4 Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to

4 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow.

24.5 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

1. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The ``Program'', below, refers to any such program or work, and a ``work based on the Program'' means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term ``modification''.) Each licensee is addressed as ``you''. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 2. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 3. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: 1. You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. 2. You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

5 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 3. If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

4. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: 1. Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, 2. Accompany it with a written offer, valid for at least three years, to give any third-party, for a charge no more than your cost of physically performing source distribution, a complete machine- readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, 3. Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

6 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 5. The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

6. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 7. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 8. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the

7 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 9. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 10. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 11. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

24.6 NO WARRANTY

12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY

8 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

24.7 END OF TERMS AND CONDITIONS

24.8 How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. one line to give the program's name and a brief idea of what it does. Copyright (C) yyyy name of author

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License

9 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.

This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse- clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice

This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.

10 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 MySQL Commercial License

The Commercial License is an agreement with MySQL AB for organizations that do not want to release their application source code. Commercially licensed customers get a commercially supported product with assurances from MySQL. Commercially licensed users are also free from the requirement of making their own application open source.

When your application is not licensed under either the GPL-compatible Free Software License as defined by the Free Software Foundation or approved by OSI, and you intend to or you may distribute MySQL software, you must first obtain a commercial license to the MySQL product.

Typical examples of MySQL distribution include:

• Selling software that includes MySQL to customers who install the software on their own machines. • Selling software that requires customers to install MySQL themselves on their own machines. • Building a hardware system that includes MySQL and selling that hardware system to customers for installation at their own locations.

Specifically:

• If you include the MySQL server with an application that is not licensed under the GPL or GPL-compatible license, you need a commercial license for the MySQL server. • If you develop and distribute a commercial application and as part of utilizing your application, the end-user must download a copy of MySQL; for each derivative work, you (or, in some cases, your end-user) need a commercial license for the MySQL server and/or MySQL client libraries. • If you include one or more of the MySQL drivers in your non-GPL application (so that your application can run with MySQL), you need a commercial license for the driver(s) in question. The MySQL drivers currently include an ODBC driver, a JDBC driver and the C language library. • If you distribute MySQL Software within your organization, you should purchase a commercial license. • GPL users have no direct legal relationship with MySQL AB. The commercial license, on the other hand, is MySQL AB's private license, and provides a direct legal relationship with MySQL AB.

With a commercial non-GPL MySQL server license, one license is required per database server (single installed MySQL binary). There are no restrictions on the

11 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 number of connections, number of CPUs, memory or disks to that one MySQL database server. The MaxDB server is licensed per CPU or named user.

Non-Profits, Academic Institutions, and Private Individuals

If you represent a non-profit organization or an academic institution, we recommend you publish your application as an open source / free software project using the GPL license. Thereby, you are free to use MySQL software free of charge under the GPL license. We believe that if you have strong reasons to not publish your application in accordance with the GPL, you should purchase commercial licenses. Note that non-profits can apply for free commercial licenses, which will be liberally granted. If you are a private individual you are free to use MySQL software for your personal applications as long as you do not distribute them. If you distribute them, you must make a decision between the Commercial License and the GPL. Please note that even if you ship a free demo version of your own application, the above rules apply.

Recommendations

Please note that MySQL AB can only give advice on which license is right for you. The final judgment, of course can be made only by a court of law. With that said, we recommend the commercial license to all commercial and government organizations. This frees you from the broad and strict requirements of the GPL license. To all free software enthusiasts we recommend our products under the GPL license. We believe that MySQL AB is one of the world's largest companies that offers all its software under the GPL license. To anyone in doubt, we recommend the commercial license. It is never wrong. Thanks to our cost-effective way of producing software, we are able to sell our commercial licenses at prices well under the industry average.

FOSS Exception

We have created a license exception which enables Free and Open Source software ("FOSS") to be able to include the GPL-licensed MySQL client libraries despite the fact that not all open source licenses are compatible with the GPL.Read more about the exception. Older Versions

Note that some older versions of the MySQL database server (prior to 3.23.19) are using the Version 4, March 5, 1995, license. See the documentation for the specific version for more information.

12 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 When in Doubt

If you have any questions on MySQL licensing, feel free to contact us: USA and Canada: + 1-425-743-5635 or online Germany, Austria, and Switzerland: +49-(0)7022-9256-30 or [email protected] Scandinavia (Sweden, Norway, and Denmark): +46 730 234 111 France: +33 (0)1.43.077.099 or [email protected] Finland: +358 (0)9 2517 5553 Spain, Portugal, and Latin America: [email protected] OSI = Open Source Initiative, www.opensource.org/licenses GPL = GNU General Public License, http://www.gnu.org/copyleft/gpl.html Version 4.1, 12 March 2004

13 From www.mysql.com/company/legal/licensing/opensource-license.html et seq. 17 January 2005 I MySQL FLOSS License Exception

Version 0.2, July 2004

The MySQL AB Exception for Free/Libre and Open Source Software-only Applications Using MySQL Client Libraries (the ``FLOSS Exception'').

24.9 Exception Intent

We want specified Free/Libre and Open Source Software (``FLOSS'') applications to be able to use specified GPL-licensed MySQL client libraries (the ``Program'') despite the fact that not all FLOSS licenses are compatible with version 2 of the GNU General Public License (the ``GPL'').

24.10 Legal Terms and Conditions

As a special exception to the terms and conditions of version 2.0 of the GPL:

1. You are free to distribute a Derivative Work that is formed entirely from the Program and one or more works (each, a ``FLOSS Work'') licensed under one or more of the licenses listed below in section 1, as long as: 1. You obey the GPL in all respects for the Program and the Derivative Work, except for identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves, 2. all identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves,

i are distributed subject to one of the FLOSS licenses listed below, and ii the object code or executable form of those sections are accompanied by the complete corresponding machine-readable source code for those sections on the same medium and under the same FLOSS license as the corresponding object code or executable forms of those sections, and

3. any works which are aggregated with the Program or with a Derivative Work on a volume of a storage or distribution medium in accordance with the GPL, can reasonably be considered independent and separate works in themselves which are not derivatives of either the Program, a Derivative Work or a FLOSS Work.

1 From dev.mysql.com/doc/mysql/en/MySQL_FLOSS_License_Exception.html 17 January 2005 If the above conditions are not met, then the Program may only be copied, modified, distributed or used under the terms and conditions of the GPL or another valid licensing option from MySQL AB.

2. FLOSS License List

Version(s)/Copyright License name Date Academic Free License 2.0 Apache Software License 1.0/1.1/2.0 Apple Public Source License 2.0 Artistic license From Perl 5.8.0 BSD license "July 22 1999" Common Public License 1.0 GNU Library or "Lesser" General Public 2.0/2.1 License (LGPL) Jabber Open Source License 1.0 MIT license - Mozilla Public License (MPL) 1.0/1.1 Open Software License 2.0 PHP License 3.0 Python license (CNRI Python License) - Python Software Foundation License 2.1.1 Sleepycat License "1999" W3C License "2001" X11 License "2001" Zlib/libpng License - Zope Public License 2.0

3. Due to the many variants of some of the above licenses, we require that any version follow the 2003 version of the Free Software Foundation's Free Software Definition (http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of the Open Source Definition by the Open Source Initiative (http://www.opensource.org/docs/definition.php). 4. Definitions 1. Terms used, but not defined, herein shall have the meaning provided in the GPL. 2. Derivative Work means a derivative work under copyright law. 5. Applicability This FLOSS Exception applies to all Programs that contain a notice placed by MySQL AB saying that the Program may be distributed

2 From dev.mysql.com/doc/mysql/en/MySQL_FLOSS_License_Exception.html 17 January 2005 under the terms of this FLOSS Exception. If you create or distribute a work which is a Derivative Work of both the Program and any other work licensed under the GPL, then this FLOSS Exception is not available for that work; thus, you must remove the FLOSS Exception notice from that work and comply with the GPL in all respects, including by retaining all GPL notices. You may choose to redistribute a copy of the Program exclusively under the terms of the GPL by removing the FLOSS Exception notice from that copy of the Program, provided that the copy has never been modified by you or any third party.

3 From dev.mysql.com/doc/mysql/en/MySQL_FLOSS_License_Exception.html 17 January 2005

FLOSS License Exception v0.2

The MySQL AB Exception for Free/Libre and Open Source Software-only Applications Using MySQL Client Libraries (the "FLOSS Exception").

Exception Intent

We want specified Free/Libre and Open Source Software ("FLOSS") applications to be able to use specified GPL-licensed MySQL client libraries (the "Program") despite the fact that not all FLOSS licenses are compatible with version 2 of the GNU General Public License (the "GPL").

Legal Terms and Conditions

As a special exception to the terms and conditions of version 2.0 of the GPL: You are free to distribute a Derivative Work that is formed entirely from the Program and one or more works (each, a "FLOSS Work") licensed under one or more of the licenses listed below in section 1, as long as:

1. You obey the GPL in all respects for the Program and the Derivative Work, except for identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves, 2. all identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves, 1. are distributed subject to one of the FLOSS licenses listed below, and 2. the object code or executable form of those sections are accompanied by the complete corresponding machine-readable source code for those sections on the same medium and under the same FLOSS license as the corresponding object code or executable forms of those sections, and 3. any works which are aggregated with the Program or with a Derivative Work on a volume of a storage or distribution medium in accordance with the GPL, can reasonably be considered independent and separate works in themselves which are not derivatives of either the Program, a Derivative Work or a FLOSS Work.

If the above conditions are not met, then the Program may only be copied, modified, distributed or used under the terms and conditions of the GPL or another valid licensing option from MySQL AB.

4 From dev.mysql.com/doc/mysql/en/MySQL_FLOSS_License_Exception.html 17 January 2005 1. FLOSS License List

Version(s)/Copyright License name Date Academic Free License 2.0 Apache Software License 1.0/1.1/2.0 Apple Public Source License 2.0 Artistic license From Perl 5.8.0 BSD license "July 22 1999" Common Public License 1.0 GNU Library or "Lesser" General Public License 2.0/2.1 (LGPL) Jabber Open Source License 1.0 MIT License (As listed in file MIT-License.txt) - Mozilla Public License (MPL) 1.0/1.1 Open Software License 2.0 PHP License 3.0 Python license (CNRI Python License) - Python Software Foundation License 2.1.1 Sleepycat License "1999" W3C License "2001" X11 License "2001" Zlib/libpng License - Zope Public License 2.0 Due to the many variants of some of the above licenses, we require that any version follow the 2003 version of the Free Software Foundation's Free Software Definition (http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of the Open Source Definition by the Open Source Initiative (http://www.opensource.org/docs/definition.php).

2. Definitions

1. Terms used, but not defined, herein shall have the meaning provided in the GPL. 2. Derivative Work means a derivative work under copyright law.

5 From dev.mysql.com/doc/mysql/en/MySQL_FLOSS_License_Exception.html 17 January 2005 3. Applicability

This FLOSS Exception applies to all Programs that contain a notice placed by MySQL AB saying that the Program may be distributed under the terms of this FLOSS Exception. If you create or distribute a work which is a Derivative Work of both the Program and any other work licensed under the GPL, then this FLOSS Exception is not available for that work; thus, you must remove the FLOSS Exception notice from that work and comply with the GPL in all respects, including by retaining all GPL notices. You may choose to redistribute a copy of the Program exclusively under the terms of the GPL by removing the FLOSS Exception notice from that copy of the Program, provided that the copy has never been modified by you or any third party. Version 0.2, 15 July 2004

6 From dev.mysql.com/doc/mysql/en/MySQL_FLOSS_License_Exception.html 17 January 2005