<!doctype html>

<!--
 * weinre is available under *either* the terms of the modified BSD license *or* the
 * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
 * 
 * Copyright (c) 2010, 2011 IBM Corporation
-->

<html>
<head>
<title>weinre - License</title>
<link rel="stylesheet" href="css/main.css" type="text/css">
<link rel="shortcut icon" href="images/weinre-icon-64x64.png" />
<script src="scripts/main.js"></script>
<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-736164-7']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
</head>

<body>

<a class="no-decoration" href="https://github.com/phonegap/weinre"><div class="ribbon">Fork weinre on GitHub</div></a>

<!-- ======================================================================= -->
<h1 class="page-title">weinre - License</h1>

<div class="toc">
  <a href="Home.html">Home</a>
- <a href="TestDrive.html">Test Drive</a>
- <a href="Installing.html">Installing</a>
- <a href="Running.html">Running</a>
- <a href="MultiUser.html">Multi-User</a>
- <a href="Security.html">Security</a>
- <a href="Building.html">Building</a>
- <a href="ChangeLog.html">ChangeLog</a>
- <a href="License.html">License</a>
<p>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</div>

<!--
 * weinre is available under *either* the terms of the modified BSD license *or* the
 * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
 * 
 * Copyright (c) 2010, 2011 IBM Corporation
-->

<p>weinre contains code from the following other projects:

<ul class="spaced"> 

<li>Files from <a href="http://webkit.org/">WebKit</a>.  
Web Inspector code.  Although WebKit in general contains both BSD and
LGPL code, only BSD licensed code is used by weinre.

<li>Files from <a href="http://www.eclipse.org/jetty/">Eclipse Jetty</a>.  
HTTP server.  License: ASLv2 and EPLv1

<li>Files from <a href="http://www.eclipse.org/swt/">Eclipse SWT</a>.  
Platform UI toolkit.  License: EPLv1

<li>Files from <a href="https://github.com/pmuellr/scooj">scooj</a>.  
JavaScript OO wrapper.  License: MIT

<li>Files from <a href="https://github.com/pmuellr/modjewel">modjewel</a>.  
CommonJS runtime for the browser.  License: MIT

<li>Files from <a href="http://commons.apache.org/cli/">Apache Commons CLI</a>.  
Command-line parser.  License: ASLv2

<li>Files from <a href="http://incubator.apache.org/wink/">Apache Wink</a>.  
JSON codecs.  License: ASLv2

</ul>

<p>The source for weinre itself is available under either 
the terms of the modified BSD license 
or 
the MIT License. 
See 
<a href="http://opensource.org/licenses/alphabetical">http://opensource.org/licenses/alphabetical</a> 
for full text.


<!--
 * weinre is available under *either* the terms of the modified BSD license *or* the
 * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
 * 
 * Copyright (c) 2010, 2011 IBM Corporation
-->

<div class="toc">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<p>
  <a href="Home.html">Home</a>
- <a href="TestDrive.html">Test Drive</a>
- <a href="Installing.html">Installing</a>
- <a href="Running.html">Running</a>
- <a href="MultiUser.html">Multi-User</a>
- <a href="Security.html">Security</a>
- <a href="Building.html">Building</a>
- <a href="ChangeLog.html">ChangeLog</a>
- <a href="License.html">License</a>

<br><img src="images/weinre-icon-128x128.png">
</div>

</body>
</html>
