<!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/pmuellr/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>
