<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wazi &#187; Kimberly McClintock</title>
	<atom:link href="http://olex.openlogic.com/wazi/author/kimberlymcclintock/feed/" rel="self" type="application/rss+xml" />
	<link>http://olex.openlogic.com/wazi</link>
	<description>Thinking OPEN</description>
	<lastBuildDate>Wed, 10 Mar 2010 23:48:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Open Source Database Applications Comparison Matrix</title>
		<link>http://olex.openlogic.com/wazi/2009/open-source-database-applications-comparison-matrix/</link>
		<comments>http://olex.openlogic.com/wazi/2009/open-source-database-applications-comparison-matrix/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 16:15:48 +0000</pubDate>
		<dc:creator>Kimberly McClintock</dc:creator>
				<category><![CDATA[Comparisons]]></category>
		<category><![CDATA[derby]]></category>
		<category><![CDATA[h2database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://olex.openlogic.com/wazi/?p=1852</guid>
		<description><![CDATA[Use this comparison matrix to learn about the differences between - and relative benefits of - the popular open source databases MySQL, PostgreSQL, Derby and H2 Database Engine (H2DB).]]></description>
			<content:encoded><![CDATA[<p>Use this comparison matrix to learn about the differences between &#8211; and relative benefits of &#8211; the popular open source databases <a title="MySQL in OLEX" href="https://olex.openlogic.com/packages/mysql" target="_blank">MySQL</a>, <a title="PostgreSQL in OLEX" href="https://olex.openlogic.com/packages/postgresql" target="_blank">PostgreSQL</a>, <a title="Derby in OLEX" href="https://olex.openlogic.com/packages/derby" target="_blank">Derby</a> and <a title="H2DB in OLEX" href="https://olex.openlogic.com/packages/h2database" target="_blank">H2 Database Engine (H2DB)</a>.</p>
<p>Over the years, offerings in the sphere of Databases available from the open source community have become faster and more reliable and, with that, increasingly popular choices for enterprises globally and across a broad swath of industries. As with a number of other categories of project, open source databases now compete on equal footing with established proprietary offerings such as SQL Server and Oracle. In fact, studies and polls executed in the last few years consistently indicate that MySQL and PostgreSQL both rank in the top ten databases used by enterprises; MySQL frequently appears in the top three along with SQL Server and Oracle.</p>
<p>The following tables represent research completed in the fall of 2007 by OpenLogic. We went to the experts &#8212; members of the OpenLogic Expert Community who are committers and expert users of the projects &#8212; and asked them to answer a set of questions. Experts in MySQL, PostgreSQL, Derby and H2DB responded. Use the resulting information as a tool to plan your projects.</p>
<p>The five questions we asked the experts appear below. To view the  	detail on the projects* compared across each question, <a id="Questions">click the question</a>.</p>
<ol>
<li><a href="#QuestionOneSummary">What&#8217;s 			the &#8217;sweet spot&#8217; of your project? For what type of projects should 			users strongly consider it? </a></li>
<li><a href="#QuestionTwoSummary">What 			type of scenarios does your project not fit into as well? Would you 			recommend another project in this scenario? If so, which one? </a></li>
<li><a href="#QuestionThreeSummary"> Of 			the projects included here, which have you tried? Of those, which 			ones did you like or dislike, and why?</a></li>
<li><a href="#QuestionFourSummary"> What 			is the future of this project? What&#8217;s coming that will ease 			development?</a></li>
<li><a href="#QuestionFiveSummary"> Are 			there myths about this project that you&#8217;d like to challenge? </a></li>
</ol>
<p>For comprehensive information on each project, search the OLEX Open 	Source Library. For a list of the open source developers we 	interviewed, click 	<a title="Acknowledgements" href="#Acknowledgements">here</a>.</p>
<p><a id="What_version?">*While no version of the projects is 		specified, you can assume that the information relates to the latest 		version in our library at the time of the last update.</a></p>
<h2>Summarized Response</h2>
<div>
<div id="help">
<h3 id="QuestionOneSummary" class="section">What&#8217;s your project&#8217;s &#8217;sweet spot&#8217;? For what type of projects should users strongly consider it?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question One -- Full Answers" href="#QuestionOne">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>
<ul>
<li> It supports replication of primary-secondary out of the box.</li>
<li> It provides good handling of national languages (you can set collation and encoding per database, table, column).</li>
<li> It executes simple commands (select/insert/update/delete) quickly.</li>
<li> It is multiplatform.</li>
</ul>
</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>
<ul>
<li>It&#8217;s great for Web based applications doing either &#8216;daily chores&#8217; or research projects.</li>
<li>It&#8217;s fast and easy to use.</li>
<li>Updating is easy. Update and replication can be automated with tools.</li>
<li>Good documentation.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>
<ul>
<li>Operates in both embedded mode and on a network server.</li>
<li>Supports Java based stored procedures, and provides a good deal of flexibility in data manipulation.</li>
<li>Tight security features distinguish it from other open source offerings.</li>
<li>Good for CDC devices.</li>
</ul>
</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>
<ul>
<li>A fast SQL database.</li>
<li>It&#8217;s good in Java unit test scenarios requiring a SQL database and accessing any SQL database with the JDBC API (using the H2 Console tool).</li>
<li>Great documentation.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionTwoSummary" class="section">What type of scenarios does your project not fit into as well? Would you recommend another project in this scenario? If so, which one?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Two -- Full Answers" href="#QuestionTwo">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>
<ul>
<li>Any scenario requiring logic in the database.</li>
<li>Not so good for complicated queries.</li>
<li>MySQL is not the best choice if the administrator needs to give hints to internal query planner (basically only USE INDEX).</li>
<li>Triggers and stored routines have many restrictions (for example one cannot use transactions inside routines or use statements which returns resultsets).</li>
</ul>
</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>
<ul>
<li>One requiring a full journaling system.</li>
<li>Use a lighter database system (like dbm) if all you need are very simple key/data pairs.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>
<ul>
<li>High availability and replication are not supported.</li>
<li>It&#8217;s not suitable for applications with hundreds of transactions per second or databases larger than 10 gigabytes.</li>
<li>Not suitable for any kind of warehousing scenario, or a scenario which involves the manipulation of spatial data.</li>
</ul>
</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>
<ul>
<li>Applications that need a large database.</li>
<li>Scenarios in which many (3 or more) connections concurrently access the same database.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionThree" class="section">Of the projects included here, which have you tried? Of those, which ones did you like or dislike, and why?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Four -- Full Answers" href="#QuestionThree">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>PostgreSQL: liked</p>
<ul>
<li>In my opinion Postgresql is most the mature open source database engine. It&#8217;s powerful, full-featured, efficient and robust.</li>
<li>Of particular note are the following features:
<ul>
<li>Procedural languages: postgresql makes it possible to write database functions in many languages like java, perl, python, php.</li>
<li>It&#8217;s very useful to explain analyze command, and it shows and measures queries via query planner.</li>
<li>A query optimizer with a couple of optimization algorithms.</li>
<li>A rich SQL dialect: foreign keys, views, procedures, triggers.</li>
<li>Contrib package &#8211; extensions which are developed outside postgresql.</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>MySQL: didn&#8217;t like</p>
<ul>
<li>I found it cumbersome.</li>
<li>It lacks concise documentation.</li>
<li>It may be faster than PostgreSQL in some circumstances, but if a developer needs to spend twice the time to make it all work, it is not worth it.</li>
<li>From the tests I have seen, MySQL and PostgreSQL are pretty much equal in access speed. (Speed issues may arise depending on how you use the database and all systems have advantages and disadvantages in that area.)</li>
<li>Especially annoying in MySQL are the documents that indicate functionality that doesn&#8217;t exist or doesn&#8217;t work as described. It&#8217;s possible that the docs referred to a different version, but the appropriate version was not made clear. This made the docs unusable.</li>
<li>Outside of that, the SQL commands are in general similar, though PostgreSQL has more functionality. This allows more granularity in your day to day programming of the database.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>PostgreSQL: liked</p>
<ul>
<li>I vote for PostgreSQL when enterprise level features like clustering and high availability are required.</li>
<li>Migration from PostgreSQL to ORACLE is very easy and it makes PostgreSQL a good choice for projects that may need to be ported to an ORACLE database.</li>
</ul>
</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>MySQL: liked</p>
<ul>
<li>Easy to use, very stable, fast.</li>
<li>The licensing could be clearer and it&#8217;s not Java.</li>
</ul>
<p>PostgreSQL: liked</p>
<ul>
<li>Easy to use, very stable, quite fast, clear license.</li>
<li>Not Java.</li>
</ul>
<p>Derby: disliked</p>
<ul>
<li>Wish it were easier to use.</li>
<li>Wish documentation were better.</li>
<li>It was not as stable as others I have used and as its reputation led me to believe.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFourSummary" class="section">What is the future of this project? What&#8217;s coming that will ease development?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Four -- Full Answers" href="#QuestionFour">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>
<ul>
<li>Falcon, a new storage engine.</li>
</ul>
</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>
<ul>
<li>Adherence to SQL standards.</li>
<li>Faster queries.</li>
<li>Simplified upgrades.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>
<ul>
<li>More efficient replication.</li>
<li>Higher availability.</li>
<li>Greater support for XML.</li>
</ul>
</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>
<ul>
<li>Performance enhancements.</li>
<li>Better documentation.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFiveSummary" class="section">Are there myths about this project that you&#8217;d like to challenge?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Five -- Full Answers" href="#QuestionFive">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>
<ul>
<li>That it is dual licensed.</li>
</ul>
</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>
<ul>
<li>Because it is free, it must not be any good.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>
<ul>
<li>That it doesn&#8217;t perform as well as other open source alternatives.</li>
</ul>
</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>
<ul>
<li>That Java is slow.</li>
<li>That transactions lack durability.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<p><!-- COMPLETE RESPONSES --></p>
<h2>Complete Responses</h2>
<h3 id="QuestionOne" class="section">What&#8217;s your project&#8217;s &#8217;sweet spot&#8217;?</h3>
<p>This is the full response. For a summary of the response, click <a title="title=" href="#QuestionOneSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>MySQL has the following strengths:</p>
<ul>
<li>It supports primary-secondary replication out of the box.</li>
<li>It handles national languages well (you can set collation and encoding per database, table, column).</li>
<li>It executes simple commands (select/insert/update/delete) quickly.</li>
<li>It is multi-platform.</li>
</ul>
<p>Given these strengths, it&#8217;s the best platform for use developing Web sites because these kinds of projects demand a database that can respond quickly.</p>
<p>In Web environments, more than half of the operations required of the database involve reading data. Given that MySQL supports database replication out of the box, it makes scaling sites and Web services easier.</p>
<p>The primary advantage of multi-platform support is scalability. I&#8217;ve worked in environments that began by installing MySQL on a single PC, then two, then a SUN SPARC server followed by several Intel IA-64 (Itanium) servers, and eventually two IBM PowerPCs with AIX; with all of them running MySQL as the database server. Additionally, some of the developers had a local copy of MySQL installed on theirs laptops/desktops. Very convenient.</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>Postgresql is also very well documented, with easy to read chapters, many examples that work, and information properly organized by version (7.4, 8.0, 8.2&#8230;).</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>Apache Derby is a pure Java RDBMS (Relational Database Management System). It can operate both in embedded mode, and as a network server. Derby supports Java based stored procedures, and provides a good deal of flexibility in data manipulation.</p>
<p>The tight security features of Derby make it a unique open source database. In addition to regular SQL grant and revoke mechanisms, Derby allows you to configure several options to a determine connection authentication source (LDAP, Built-in, etc.), and also to utilize database encryption using JCE facilities.</p>
<p>Derby supports four common isolation levels, and it operates by default in READ_COMMITED mode. In addition, it supports backup/ restore operations and crash recovery for transactions not committed, if for any reason the database crashes.</p>
<p>Derby can be used on any J2ME enabled device with support for CDC/Foundation 1.1. Having different versions and modes makes Derby the most suitable database for many projects. For example: those designed for CDC devices, desktop applications which can use embedded mode, and server side applications with multi gigabytes databases that can utilize network server mode. All of these modes and versions have the same functionality, which makes the development cycle less complex.</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>H2 Database Engine&#8217;s sweet spot is Java applications requiring a fast or embedded (or both) SQL database. Another strength is Java unit test scenarios requiring a SQL database and accessing any SQL database with the JDBC API (using the H2 Console tool). Finally, the terrifc documentation makes it a good choice for developers unfamiliar with SQL.</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionTwo" class="section">What scenarios does this project not work as well in?</h3>
<p>This is the full response. For a summary of the response, click <a title="title=" href="#QuestionTwoSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>One which demands putting logic into a database (complicated stored procedures, triggers). For this kind of projects PostgreSQL or Oracle are a better fit.</p>
<p>As mentioned before, MySQL is good for simple queries, but not so good for complicated ones (for example, a project with joins from many tables, sub-queries, grouping etc). This is especially true when the tables contain a large amount of data. In my opinion, it doesn&#8217;t fit in environments like Data Warehouses or Data Mart.</p>
<p>Some other MySQL drawbacks include:</p>
<ul>
<li>The administrator can&#8217;t give hints to internal query planner (basically only USE INDEX).</li>
<li>Triggers and stored routines have many restrictions (for example, one cannot use transactions inside routines or use statements which return resultsets).</li>
<li>Higher level languages like plpsql or script languages like Perl or Python can not be used to program logic in a database.</li>
</ul>
</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>Even really large projects can use PostgreSQL without much of a problem.</p>
<p>The one thing that Postgresql itself does not offer is a full journaling system. Instead, it relies on your file system to ensure data integrity. This means PostgreSQL needs to run with ext3, NTFS or an equivalent file system.</p>
<p>I do not know of a database system that replicates a full working journal. Yet if you need to use ext2, FAT or some other non-journaling file system, you would need such a system. On the other hand, these days you should not be using ext2 or FAT or any similar file system anyway.</p>
<p>Again, I would recommend a much lighter database system (like dbm) if all you need are very simple key/data pairs. Thus, very small projects should use their own system.</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>The current version of Derby does not support high availability and replication, although in the next major version there will be out of the box support for replication and high availability.</p>
<p>Derby is not suitable for applications with hundreds of transactions per second, or for databases larger than 10 gigabytes.</p>
<p>Additionally, Derby is not suitable for any kind of warehousing scenario, or for any scenario which involves the manipulation of spatial data.</p>
<p>That said, there are workarounds for some of these issues. Using Sequoia can resolve high availability and replication issues, for example. For all of the above scenarios, PostgreSQL is the most suitable project because of its stable engine, enterprise level features like clustering and high availability, and supports for spatial data.</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>Applications that need a large database or scenarios in which many (3 or more) connections concurrently access the same database.</p>
<p>Non-Java applications, of course, and instances when the processing of XML documents is required.</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionThree" class="section">Of the projects included here, which have you tried? Of those, which ones did you like or dislike, and why?</h3>
<p>This is the full response. For a summary of the response, click <a title="title=" href="#QuestionThreeSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>PostgreSQL: liked</p>
<ul>
<li>In my opinion, Postgresql is the most mature open source database engine. It&#8217;s powerful, full-featured, efficient and robust.</li>
<li>Of particular note are the following features:
<ul>
<li>Procedural languages: postgresql makes it possible to write database functions in many languages like java, perl, python, or php.</li>
<li>It&#8217;s very useful for explaining analyze command, shows and measure query via query planner.</li>
<li>A query optimizer with couple optimization algorithms.</li>
<li>Rich SQL dialect: foreign keys, views, procedures, triggers.</li>
<li>Contrib package &#8211; extensions which are developed outside postgresql.</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>MySQL: didn&#8217;t like</p>
<ul>
<li>I found it cumbersome.</li>
<li>It lacks concise documentation.</li>
<li>It may be faster than PostgreSQL in some circumstances, but it&#8217;s not worth it if a developer needs to spend twice the time to make it all work.</li>
<li>From the tests I have seen, MySQL and PostgreSQL are pretty much equal in access speed. (Speed issues may arise depending on how you use the database, and all systems have advantages and disadvantages in that area.)</li>
<li>Especially annoying in MySQL are the documents that indicate functionality that doesn&#8217;t exist or doesn&#8217;t work as described. It&#8217;s possible that the documents referred to a different version, but the appropriate version was not made clear, therefore the documents were unusable.</li>
<li>Other than that, the SQL commands are similar, though PostgreSQL has more functionality. This allows more granularity in your day-to-day programming of the database.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>PostgreSQL: liked</p>
<ul>
<li>I vote for PostgreSQL when enterprise level features like clustering and high availability are required.</li>
<li>Migration from PostgreSQL to ORACLE is very easy and it makes PostgreSQL a good choice for projects that may need to be ported to an ORACLE database.</li>
</ul>
</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>MySQL: liked</p>
<ul>
<li>Easy to use, very stable, fast.</li>
<li>The licensing could be clearer and it&#8217;s not Java.</li>
</ul>
<p>PostgreSQL: liked</p>
<ul>
<li>Easy to use, very stable, quite fast, clear license.</li>
<li>Not Java.</li>
</ul>
<p>Derby: disliked</p>
<ul>
<li>Wish it were easier to use.</li>
<li>Wish documentation were better.</li>
<li>It was not as stable as others I have used, and as its reputation led me to believe it would be.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFour" class="section">What is the future of this project? What&#8217;s coming that will ease development?</h3>
<p>This is the full response. For a summary of the response, click <a title="title=" href="#QuestionFourSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>The most significant plans for MySQL involve a new storage engine called Falcon. This engine will likely replace innodb/myisqm. It&#8217;s in an early stage of development, but it looks promising.</p>
<p>If you&#8217;re interested in why such a move is necessary, here&#8217;s some background. Currently, MySQL version 5.1 supports several storage engines, or methods of storing data on disc drives. But usually only two types are used: MyISAM and InnoDB.</p>
<p>MyISAM is the default engine. It&#8217;s fast, architecture independent, and has full text search indexes. However, since it&#8217;s not transactional, it&#8217;s not ACID compliant. This disqualifies MyISAM in scenarios which demand data consistency. Also, it doesn&#8217;t allow foreign keys. Every table in MyISAM is stored in separate files. This issue opens the possibility of data corruption.</p>
<p>InnoDB is a transaction safe (ACID compliant) engine. It allows locking data on row level, foreign keys, constraints, etc. Tables and indexes are stored in tablespaces which can be partitioned. But InnoDB has drawbacks. It is slower than the MyISAM engine, it doesn&#8217;t have full-text-search indexes, and there are some problems with AUTO_INCREMENT indexes. Possibly the biggest issue, however, is that InnoDB was developed by InnoBase, and InnoBase was acquired in 2005 by Oracle. Needless to say, the future of InnoDB in MySQL was uncertain.</p>
<p>Hence the development of Falcon, a new storage engine developed by MySQL AB. The Falcon Storage Engine has been designed with modern database requirements in mind, and particularly for use within high volume Web serving, or other environments that require high performance. It&#8217;s still in the alpha stage and still taking shape, but plans are in place for features such as:</p>
<ul>
<li>Optimizations for multiple CPU environments (multithreading).</li>
<li>True Multi Version Concurrency Control (reading/storing data with efficient locking).</li>
<li>Advanced indexes.</li>
<li>Data compression stores.</li>
<li>Intelligent tablespaces (disk management).</li>
<li>Implicit save points (for keeping data integrity).</li>
</ul>
<p>From a legal and business perspective, MySQL is in no way obligated to Oracle if it switches to the Falcon project.</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>Postgresql is already in use by companies with databases of about 32 Tb with tables having million of rows; and it just <em>works</em>. What else do you need?!</p>
<p>Seriously, like any complex system, it still has some gray areas. For instance, the project is investing energy into improving adherence to SQL standards. Another area of focus is the continued improvement of compatibility, and the filling in of holes in functionality. Still another is improvement of the search algorithm in order to speed up queries.</p>
<p>Finally, we are working to ameliorate some issues with the update process. Right now it is classic, but cumbersome, particularly for large databases. The user must dump the database, stop the old system, start the new system and then restore the database in the new system. We are working on a tool named pg_update that would &#8220;simply&#8221; update an existing set of tables to a newer version of PostgreSQL.</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>There are several plans for further development of Derby. One of the most important features, which will make it easier to use and more efficient, is primary/secondary replication, and improvements to availability.</p>
<p>Another area of development involves working on new XML processing features and enhanced support for XPath and XQuery over Derby XML type.</p>
<p>Security enhancements are also on the way, as well as the  implementation of more features defined in SQL 2003 mandatory and SQL 99 core. The latter will make it easier to write complex SQL statements for Derby.</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>Project developers are enhancing Derby and adding new features. Some of these are:</p>
<ul>
<li>Optimization for improved performance in larger databases.</li>
<li>Improved concurrency.</li>
<li>Various ease-of-use features.</li>
<li>Documentation improvements.</li>
<li>Improvements to extensibility.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFive" class="section">Are there myths about this project that you&#8217;d like to challenge?</h3>
<p>This is the full response. For a summary of the response, click <a title="title=" href="#QuestionFiveSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MySQL</th>
<td>People tend to believe that MySQL is dual-licensed because it can be used as GPL software or as commercial software. MySQL is not dual licensed. Additionally, people sometimes misunderstand the GPL, and that frightens them off; but that&#8217;s a separate topic.</td>
</tr>
<tr>
<th>PostgreSQL</th>
<td>Since PostgreSQL is free software, many people believe that it can&#8217;t possibly be reliable, fast, fully featured etc.</p>
<p>In fact, PostgreSQL has most of the features you can find in other DBMSs like Oracle and Microsoft SQL. Not only that, it also includes many very useful features that are specific to PostgreSQL, such as user defined types (not just a record&#8230; a full user defined type! With functions to execute when operators are used against variables of that type, etc.).</p>
<p>In terms of security, Postgresql is one of the best databases I have seen. First of all, it runs as postgresql (not root as some others do).  Next, by default, the administrator user is not root or admin, but rather a common user of your choice and postgres. Once chosen, that user can do all the things you need a database administrator to do: create other users, databases, and tables;  and assign rights, roles, and groups to other users.</p>
<p>The database system is reliable because the entire system is thoroughly tested for at least one month before any given release. As a result, we have only rarely encountered issues with reliability.</td>
</tr>
<tr class="odd">
<th>Derby</th>
<td>Derby&#8217;s performance compared to other open source databases is much discussed, and was the subject of a talk at ApacheCON 2005. Viewing that &#8211; available on the project wiki &#8211; should put any questions to rest.</td>
</tr>
<tr>
<th>H2 Database Engine (H2DB)</th>
<td>
<ul>
<li>That it is slow because Java is slow.</li>
<li>That transactions in H2 are less durable than other in databases. In my view, this  is not true.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3><a name="acknowledgements"> Acknowledgments</a></h3>
<p>OpenLogic would like to thank the following members of the OpenLogic 	Expert Community for their contributions to this effort and invite the 	community to email us (docs-at-openlogic-dot-com) if they&#8217;d like to augment, correct, update, 	refute or dispute any of the information included herein.</p>
<table class="help_table" border="0" width="300">
<tbody>
<tr>
<th> Project</th>
<th> Contributer</th>
</tr>
<tr class="odd">
<td>MySQL</td>
<td>Krzysztof Krzyzaniak</td>
</tr>
<tr>
<td>PostgreSQL</td>
<td>Alexis Wilke</td>
</tr>
<tr class="odd">
<td>Derby</td>
<td>Masoud Kalali</td>
</tr>
<tr>
<td>HQ2DB</td>
<td>Thomas Mueller</td>
</tr>
</tbody>
</table>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://olex.openlogic.com/wazi/2009/open-source-database-applications-comparison-matrix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Six Elements of Open Source Governance</title>
		<link>http://olex.openlogic.com/wazi/2008/the-six-elements-of-open-source-governance/</link>
		<comments>http://olex.openlogic.com/wazi/2008/the-six-elements-of-open-source-governance/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 18:03:09 +0000</pubDate>
		<dc:creator>Kimberly McClintock</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://olex.openlogic.com/wazi/?p=1743</guid>
		<description><![CDATA[No kidding, we've boiled it down to six - Six Elements of Open Source Governance laid out and discussed right here. Everything you need to know in a few thousand printable, portable, highlightable words about open source policies, managing inventory, provisioning, scanning, reporting, and more.]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a rumor going around that the be-all-end-all of open source governance is scanning. Scanning an effective CYA on governance? Bollocks, we say. One component, but not the whole story. Scanning will help you figure out what you&#8217;ve got, alright, but then what? How do you know if what you&#8217;ve got and what you&#8217;re doing with it are copacetic without a policy or two? And once you&#8217;ve done the work of figuring out what you&#8217;ve got, how you&#8217;re using it, and you&#8217;ve got those policies in place, how do you keep that information current?</p>
<p>Each of these questions scratches the surface of concerns we think are urgent, and they&#8217;re not addressed by scanning alone.</p>
<p>The rumor mongers have an agenda, and you&#8217;d be right to suspect that we do, too. We are, after all, the company behind <a href="https://olex.openlogic.com" target="_blank">OpenLogic Exchange (OLEX)</a>, which comes in an <a href="http://www.openlogic.com/products/olex-features.php#enterprise-edition">Enterprise Edition</a> that&#8217;s designed to cover all the bases of open source governance. However, rest assured that the point of this article is not to push our solution so much as to share the thinking behind our solution. If you can put together another stack that covers the bases we lay out for you here, more power to you.</p>
<h3>Governance of Open Source in the Enterprise -  Six Elements</h3>
<p>What you really want is open source governance that&#8217;s so easy you (and your users) will barely know it&#8217;s there. We&#8217;ve done this a gazillion times, and we&#8217;ve boiled it down to Six Elements:</p>
<ol>
<li><strong>Policies</strong> &#8211; First, decide what Is OK and what Is Not OK</li>
<li><strong>Inventory </strong> &#8211; Figure out what you got</li>
<li><strong>Provisioning</strong> &#8211; Figure out how you&#8217;re gonna get more&#8230;</li>
<li><strong>Managing</strong> &#8211; &#8230;while following the rules from #1</li>
<li><strong>Auditing</strong> &#8211; Circle back and confirm that everything&#8217;s still going ok</li>
<li><strong>Reporting</strong> &#8211; Gift-wrap that &#8220;OK&#8221; to show you care (and give them sparkle for the board slides)</li>
</ol>
<p>Approach these elements roughly as steps and they&#8217;ll lead you through a set of exercises that determine comfort level and current usage, establish monitoring and control of what&#8217;s used and where going forward, and result in the creation of a sustainable system going forward.</p>
<p>You&#8217;ll notice &#8217;scanning&#8217; is not mentioned at all here.  That&#8217;s because we believe scanning is a means, not an end.</p>
<h3>Policies</h3>
<p>Scan to your heart&#8217;s content, but unless you&#8217;ve got a policy or policies in place, how in the world do you know if the open source you find in use in your enterprise is &#8220;okay&#8221;, or not? What&#8217;s &#8220;okay&#8221;?</p>
<p>To answer that question, you need to know some stuff, and then you need to <a href="http://olex.openlogic.com/wazi/2009/create-open-source-policy/">create an open source policy</a>.  The questions below include the basic questions you and your organization need to be able to answer.  A comprehensive open source policy includes bits of items #2 through #6 in this list, and we&#8217;ll get you more detail on each of those later.</p>
<p><strong>1. Legal Stuff:</strong>  How and why are you using open source software?  Policies should reflect a broader strategy &mdash; do you have one?  Has your legal team vetted open source licenses?  Which open sources licenses are considered enterprise friendly for your use case?  Are different licenses acceptable for open source packages that are used in-house versus packages that are embedded in distributed products (e.g., products given to partners or offered for sale)?  Distribution is the key concept here, as many open source licenses contain special clauses invoked only in situations where code is distributed downstream.</p>
<p><strong>2. Getting It:</strong> How is open source currently evaluated and approved in your organization?  Where do users get the source once a package has been approved for use?  Is there an open source review board that defines the request and approval process, or are requests submitted to department managers, each with a different review process and risk tolerance threshold?  Is there a repository where users can find and download approved packages, or do employees download open source from the Internet whenever they want?  Where is all this usage information tracked?  Who is the responsible party within the organization?  The goal of these questions is to determine what the standards are across the enterprise.  Key to governance is ensuring that users all follow same process by making it policy.</p>
<p><strong>3. Using It:</strong> Are employees allowed to modify open source code, and can they contribute code changes back to open source communities?  If code contributions are allowed, can employees use company email addresses when posting changes?  Are employees allowed to participate in online discussions using their corporate email address?  How do any of these policies apply to contractors, offshore resources, or partners?</p>
<p><strong>4. Updating It:</strong> What are the guidelines for managing version updates?  Open source projects typically release more often than commercial software companies, and most CIOs don&#8217;t want 30 different versions of a particular package deployed throughout the enterprise.  Do new version releases need to go back through the evaluation and approval process before they can be deployed?  Version upgrades are often necessary for security reasons, but multiple versions can also present problems when it comes to support.  Which brings us to&#8230;</p>
<p><strong>5. Supporting It:</strong> Is <a href="http://www.openlogic.com/products/open-source-support.php">open source support</a> required for some of the packages you use, all packages, or just specific ones?  Can employees get support from the open source community mailing lists, and, if so, can they post questions using company email addresses?  Or do some/all/specific packages require commercial-grade technical support (which, by the way, you can get from OpenLogic &mdash; just an FYI because, seriously, we&#8217;re in this for money as well as the glory).</p>
<p><strong>6. Communicating:</strong> How does the organization track and audit all of the above (or at least the most relevant parts), and how are results reported?  Also, how often are audits conducted, and who&#8217;s responsible for auditing and reporting?  How does your policy apply to software already in use vs. software currently in development?</p>
<p>Not to toot our own horn, but we know a thing or two about this stuff.  We&#8217;ve been teaching Fortune 500 companies how to realize the benefits of open source software for ten years.  We offer <a href="http://www.openlogic.com/products/professional-services.php" target="_blank">open source policy workshops</a> as well as one-on-one guidance for organizations looking to create or improve their open source policy.  We also help organizations evaluate and select the open source packages that best fit their needs.  Just sayin&#8217;.</p>
<p>Ok, so once you&#8217;ve got your policies in place, it&#8217;s time for a scan.</p>
<h3>Inventory</h3>
<p>All an inventory does is tell you open source software you got, and where you are using it.</p>
<p>Not to get all existential on you, but before you go crazy with an inventory, we suggest you first ask WHY. Why do you, X guy at Y company, why do YOU want or need an inventory of your open source?  Here are some of the reasons we&#8217;ve heard in our work:</p>
<ul class="unIndentedList">
<li>kickstart an open source policy</li>
<li>establish a baseline for ongoing auditing efforts</li>
<li>plan for support</li>
<li>manage security updates</li>
<li>manage risk</li>
<li>prepare to distribute, divest, or donate software</li>
<li>prepare for a merger or acquisition</li>
<li>comply with internal policies</li>
<li>comply with regulations</li>
<li>comply with open source licenses</li>
<li>manage intellectual property issues</li>
</ul>
<p>The significance of these issues is weighted differently if the open source is intended for use internally, or it will be distributed.  For example, your company may not have to worry too much about &#8220;intellectual property&#8221; issues if you only use open source internally.  Generally speaking, it&#8217;s more important to scan for licenses or code snippets when it comes to open source that is distributed outside the enterprise, and concerns around technical support are more relevant to scanning for open source software used internally.</p>
<p>WHY simplifies HOW.  There are two main approaches to how: ask people or scan.  Asking people to tell you which open source packages, licenses, and/or code snippets they&#8217;ve got in use has obvious limitations.  Scanning tools are more reliable, but there are a bunch of options available with varying levels of cost and complexity.  With your &#8220;why&#8221; information in hand, you can select the scanning tools that give you the information you need that fit in the context of the resources (both time and dollars) you&#8217;ve got.  There are several open source scanning tools you can use, but the options listed below are usually a good place to start if you are just a normal user of open source &mdash; since you can&#8217;t beat the price (FREE).</p>
<ul class="unIndentedList">
<li>To scan for installed open source packages on a server or desktop, your best option is to go with <a href="http://www.openlogic.com/products/scanners.php">OSS Discovery</a>, a scanning application developed by OpenLogic that is both free and open source.  OSS Discovery will tell you what&#8217;s installed on your machines, or what libraries your application is composed of, and it&#8217;s easy to download and run. OpenLogic also offers a free open source inventory analysis for up to 500 systems using OSS Discovery. Relatively painless.</li>
<li>To scan for open source licenses, you might want to try a solution like HP&#8217;s <a href="http://fossology.org/" target="_blank">FOSSology</a>. FOSSology finds open source licenses in source code or binaries and it&#8217;s a free and open source application.  The learning curve on this one is a little high, but still well below planetary physics.</li>
</ul>
<p>If you&#8217;re part of a software company or a company that distributes hardware that contains open source software, you may want to consider shelling out the bucks for a proprietary scanning tool.  Keep in mind, though, that this option will also require some expert analysts to run the tools and sort through the results, so make sure you&#8217;ve got that in your budget.</p>
<ul class="unIndentedList">
<li>The most complicated scanning options available look for open source code snippets in addition to installed open source packages and licenses.  OpenLogic&#8217;s <a href="http://www.openlogic.com/products/scanners.php"OSS Deep Discovery</a> scanner, as well as scanners from Black Duck and Palamida, are the main options if you need this type of tool. Because the learning curve on these solutions is high, and the costs associated, you don&#8217;t want to go this route unless absolutely necessary.  &#8220;Absolute necessity&#8221; might be, for example, if you need to be 100% sure that you won&#8217;t be obligated to release as open source the code in, say, the missile defense system your company is planning on selling to the government.  If you need this level of coverage, there aren&#8217;t a lot of options, so be prepared to spend.  Fortunately, most folks can get by with a more practicable level of diligence.</li>
</ul>
<p>The important thing when picking a scanning solution is to start by defining your scanning goals.  Once you do that, you can pick the right level of scanning that meets your needs.  Be selective and avoid overkill, yet ensure you&#8217;ve covered all your bases &mdash; it&#8217;s quite possible that you could end up using different scanning tools to create the result desired in different realms of the organization.  Also, keep in mind that creating an inventory won&#8217;t be a one time activity.  Depending on your goals, you&#8217;ll want to inventory again in the future &mdash; for example when putting a new application into production or releasing a new product. </p>
<p>Next, you&#8217;ll want a place to report on and store your inventory results.  You&#8217;ll also want to compare your inventory against your policy in order to see where you might have, let&#8217;s say, &#8220;circumvented&#8221; the policy.  Once you&#8217;ve got your inventory cross-checked against your policies, you&#8217;ll need to do a little remediation, but then you&#8217;re caught up, up-to-date, and in the clear.</p>
<p>And what will you do with the results of cross-checking between policy and scan results?  It would be best if there were a place to load the scan results that would log usage.  If this place applied your policies, or checked against your policies and provided you a report on infractions, that would be best. A central open source governace tool, say for instance OLEX, might be a good option, but we&#8217;ll get a little further into that in a minute.</p>
<h3>Provisioning</h3>
<p>As you&#8217;re taking inventory of the open source you&#8217;ve already got, consider establishing a go-forward process that will govern the use of any new open source users need.  Presuming you&#8217;ve taken our advice and put your policies in place, what you need now is a comprehensive <a href="http://www.openlogic.com/products/certified-library.php">repository of open source</a> that&#8217;s safe, secure, and ready for deployment in the enterprise.</p>
<p>Funnily enough, the OpenLogic Library of open source is just such a place. We provide a tidy one-stop-shop that&#8217;s freely accessible through OpenLogic Exchange (OLEX). The OpenLogic Library offers the most extensive repository of enterprise-ready open source software on the planet.  And &#8220;enterprise-ready&#8221; is not just marketing buzz in this case.  If you download a &#8220;certified&#8221; open source package from the OpenLogic Library, you know that it has passed our <a href="http://www.openlogic.com/solutions/provisioning.php#certification_process" target="_blank">42-point certification process</a> and meets basic standards of quality, usability, and community backing.  OLEX provides you all the information you need to determine whether or not a package fits into your policies, and we also check daily for security issues and provide patches as they are released for all business-critical projects.  When we find such an issue, we notify you via <a href="http://www.openlogic.com/products/openupdate.php" target="_blank">OpenUpdate</a> &mdash; an HTML newsletter available to subscribers of OLEX Enterprise Edition.  We also sell <a href="http://www.openlogic.com/products/open-source-support.php" target="_blank">support on open source</a> in case you find yourself needing such services.</p>
<p>The Request and Approval mechanism in OLEX provides part of the go-forward audit trail governance requires.  You can, by policy, decide if a particular project can be used with abandon, requires approval, or should be denied.  Policies can be applied to specific open source packages, specific versions of packages, and/or licenses.  Users simply submit online forms, which are routed to reviewers for approval (if necessary) and stored for future auditing purposes.  End result: OLEX ensures that all open source in the enterprise comes from a single source, adheres to the same policy, and can be easily audited at any point in the future. Again, access to the library is free, but the additional governance features require a subscription.)</p>
<h3>Managing</h3>
<p>So, now:</p>
<ul class="unIndentedList">
<li>you&#8217;ve got your open source policies in place</li>
<li>you&#8217;ve scanned all machines and applications for installed open source in your enterprise and cross-referenced the results against your policies</li>
<li>you&#8217;ve done some remediation and established accepted baselines of open source packages in use</li>
<li>you&#8217;ve got a go-forward solution in place and employees are using a system like OLEX to enter requests to use specific open source packages</li>
</ul>
<p>This all takes you a long way toward effective management of open source usage in your company, and we can all agree that management is the key aspect of governance.  But at this point you&#8217;ll also want to take a look at your build and development practices and pull the scanning option back in.  Add a scan of source code to your practices, and also scan any third party source code if you&#8217;ll be distributing the project downstream.</p>
<p>This set of scans is really the only way to be certain you’re meeting all <a href="http://www.openlogic.com/products/license-obligation-analysis.php" target="_blank">open source license obligations</a>, which is a key element in the effective, legal use of open source.  Different licenses require different actions on behalf of the user, from nothing at all to acknowledgment of the original author to the inclusion of modified source code.  Establishing and maintaining a firm hold on your license obligations is key to successful use of open source in your enterprise. </p>
<h3>Auditing</h3>
<p>Policy?  Check.  Inventory?  Check.  Repository for provisioning?  Check.  Approval process?  Check.</p>
<p>By now you should have a good handle on your open source usage.  But, you&#8217;re going to still want to check up on yourself every now and then.  An audit will tell you how well all of your policies and processes are working.</p>
<p>You may want to <a href="http://www.openlogic.com/products/application-audit.php" target="_blank">audit a software application</a> or solution based on development milestones at the end-stage of the development process, just before a new application goes into production or gets released.  You may also want to audit a sampling of systems on a regular basis, such as quarterly or annually.</p>
<p>Typically you&#8217;ll use one or more <a href="http://www.openlogic.com/products/scanners.php" target="_blank">scanning tools</a> to conduct the audit.  All the results should get tracked, stored, and compared to what your policy says and what&#8217;s been approved.  You can look for any red flags &mdash; where what&#8217;s being used is different than what you thought &mdash; so that you can work on improving your process (and maybe having a friendly little chat with the offender). OLEX Enterprise Edition lets you upload scan results and provides reports showing any place where open source usage doesn&#8217;t match your policy and approvals.</p>
<p>The point is, scanning should play a continued role in your go-forward strategy.  You&#8217;ll want to establish a process by which scans are routinely (annually, or more often) run on machines and applications, and the results are compared against reports of what&#8217;s been approved.  OLEX provides these reports based on the open source usage requests submitted and approved, and it will also give you a heads-up if any in-use packages violate your policies.  Further, OLEX can help you to see if you are falling behind in terms of released versions, and alert you to any security vulnerabilities that exist in the open source packages you are using.  Pretty cool, huh?</p>
<p>With this information in hand, you&#8217;ll also want a process in place to evaluate corrections to the results of infractions indicated by auditing results.</p>
<h3>Reporting</h3>
<p>One client we&#8217;ve worked with has 4,000 machines in play &mdash; definitely not information that the most competent systems administrator can keep in her head.  That&#8217;s why, whatever solution you choose for your governance needs, you&#8217;ll want a stack that includes reports.  Lots of reports.  For instance, you&#8217;ll want:</p>
<p><strong>1. Inventory Reports:</strong> What open source packages are used, on which machines, as part of which internal development project.  This will enable you to</p>
<ul class="unIndentedList">
<li>Assess technical support needs</li>
<li>Manage security patches and version updates</li>
<li>Assess potential risks</li>
<li>Assess version aging and proliferation</li>
</ul>
<p><strong>2. Policy Compliance Reports:</strong> Where am I out of compliance with internal policy?</p>
<p><strong>3. License Compliance Reports:</strong> Where am I out of <a href="http://www.openlogic.com/products/scanning-compliance.php" target="_blank">compliance with open source licenses</a>?</p>
<p>And that&#8217;s just a start. OLEX Enterprise Edition can provide these reports for you, so you can keep the &#8220;suits&#8221; happy and the developers developing.</p>
<h3>Conclusion</h3>
<p>What more can we say?  We&#8217;ve given this a lot of thought.  It&#8217;s our business.</p>
]]></content:encoded>
			<wfw:commentRss>http://olex.openlogic.com/wazi/2008/the-six-elements-of-open-source-governance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Framework Project Comparison Matrix</title>
		<link>http://olex.openlogic.com/wazi/2008/web-framework-comparison-matrix/</link>
		<comments>http://olex.openlogic.com/wazi/2008/web-framework-comparison-matrix/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 23:57:17 +0000</pubDate>
		<dc:creator>Kimberly McClintock</dc:creator>
				<category><![CDATA[Comparisons]]></category>
		<category><![CDATA[jboss-seam]]></category>
		<category><![CDATA[myfaces]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[shale]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[struts]]></category>
		<category><![CDATA[webwork]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://olex.openlogic.com/wazi/?p=383</guid>
		<description><![CDATA[We've developed this comparison matrix to help you learn about the differences between - and relative benefits of - the most popular open source Web frameworks: Shale, Struts, Wicket, WebWork, Rails, JBossSeam, MyFaces and Spring. Although Rails is not a Java project, we included it given its popularity.  To help you make a decision about which Web Framework to use, we went to the experts -- members of the OpenLogic Expert Community who are committers and expert users of the projects -- and asked them to answer a bunch of questions about each project.]]></description>
			<content:encoded><![CDATA[<p>A Web Framework speeds development by providing libraries to satisfy the common development needs of Web applications, and by promoting code reuse among engineers and over projects. For example, many frameworks provide libraries for establishing database access and managing user sessions. We&#8217;ve developed this comparison matrix to help you learn about the differences between &#8211; and relative benefits of &#8211; the most popular open source Web frameworks: Shale, Struts, Wicket, WebWork, Rails, JBossSeam, MyFaces and Spring. Although Rails is not a Java project, we included it given its popularity.</p>
<p>To help you make a decision about which Web Framework to use, we went to the experts &#8212; members of the OpenLogic Expert Community who are committers and expert users of the projects &#8212; and asked them to answer a bunch of questions about each project.</p>
<h2>The Five Questions</h2>
<p>The five questions we asked the experts appear below. To view more detail on the projects* compared across each question, <a id="Questions">click the question</a>.</p>
<ol>
<li><a href="#QuestionOneSummary">What&#8217;s the &#8217;sweet spot&#8217; of your project? For what type of projects should users strongly consider it? </a></li>
<li> <a href="#QuestionTwoSummary">What type of scenarios does your project not fit into as well?  Would you recommend another project in this scenario? If so, which one? </a></li>
<li><a href="#QuestionThreeSummary"> Of the projects included here, which have you tried? Of those, which ones did you like or dislike, and why?</a></li>
<li><a href="#QuestionFourSummary"> What is the future of this project? What&#8217;s coming that will ease development?</a></li>
<li><a href="#QuestionFiveSummary"> Are there myths about this project that you&#8217;d like to challenge? </a></li>
</ol>
<p>For comprehensive information on each project, search the OLEX Open Source Library. For a list of the open source developers we interviewed, click <a title="Acknowledgments" href="#Acknowledgments">here</a>.</p>
<p>*While no version of the projects is specified, you can assume that the information relates to the latest version in our library at the time of the last update.</p>
<h2>Summarized Responses</h2>
<h3 id="QuestionOneSummary" class="section">What&#8217;s your project&#8217;s &#8217;sweet spot&#8217;?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question One -- Full Answers" href="#QuestionOne">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MyFaces</th>
<td>
<ul>
<li>Separation of MVC layers reduces developer effort.</li>
<li>Framework addresses every complex aspect of Web development.</li>
<li>Developers can create new components or use existing ones.</li>
<li>Many sources for additional components.</li>
</ul>
</td>
</tr>
<tr>
<th>JBoss SEAM</th>
<td>
<ul>
<li>Complex Web applications that need to integrate with other open source projects.</li>
<li>Applications that have a long running business context.</li>
<li>Complex applications</li>
<li>Supports RESTful pages</li>
<li>Supports AJAX functionality</li>
<li>Uses new EJB 3.0 programming artifacts</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Spring MVC</th>
<td>
<ul>
<li>Projects that use &#8211; or intend to use &#8211; Spring</li>
<li>Projects that need to expose business logic as HTTP addressable URLs</li>
<li>Projects that must provides multiple view rendering techniques</li>
</ul>
</td>
</tr>
<tr>
<th>Stripes</th>
<td>
<ul>
<li>Projects in which developers must get productive fast</li>
<li>Sensible defaults reduce the need for configuration</li>
<li>Contains all basic components necessary for enterprise Web development tasks; avoids feature bloat</li>
<li>Stable code base</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Struts 1*</th>
<td>
<ul>
<li>Struts 1 has essentially been replaced by Struts 2 and is not recommended for new projects unless the development team already has expertise</li>
</ul>
</td>
</tr>
<tr>
<th>Struts 2* (WebWork)</th>
<td>
<ul>
<li>Projects with developers familiar with Struts 1</li>
<li>Projects using Struts 1 who need productivity increase</li>
</ul>
</td>
</tr>
<tr class="odd">
<th> Wicket</th>
<td>
<ul>
<li>Projects that must create the typical stateful Web application that must track session state and perform services for the user.</li>
<li>Ideal for developers who prefer a very clean separation of concerns and object-oriented programming</li>
<li>New projects that need to get up and going fast</li>
<li>Projects with teams that have UI members and programmers, working independently</li>
<li>Single developer  projects</li>
<li>Projects requiring mailing list support</li>
</ul>
</td>
</tr>
<tr>
<th> Shale*</th>
<td>
<ul>
<li>Projects requiring exceptional JUnit /JMock based testing framework</li>
<li>Projects requiring an XML-based alternative to JSP</li>
</ul>
</td>
</tr>
<tr class="odd">
<th> Rails</th>
<td>
<ul>
<li>Web applications depending on REST and/or AJAX</li>
<li>Standalone Web sites</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionTwoSummary" class="section">What sorts of projects does this package not work as well for?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Two -- Full Answers" href="#QuestionTwo">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MyFaces</th>
<td>
<ul>
<li>No native AJAX support</li>
<li>No support for REStful pages</li>
<li>Standard component set too limited for complex enterprise applications</li>
</ul>
</td>
</tr>
<tr>
<th>JBoss SEAM</th>
<td>
<ul>
<li>Stiff learning curve makes it a challenge for projects with junior developers</li>
<li>Developers will need knowledge of JSF and some EJB 3.0 framework.</li>
<li>Simple CRUD applications.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Spring MVC</th>
<td>
<ul>
<li>Projects with a complex business model</li>
</ul>
</td>
</tr>
<tr>
<th>Stripes</th>
<td>
<ul>
<li>Projects that need to run in a context where Java5 is not available</li>
<li>Established projects</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Struts 1*</th>
<td>Struts 1 has essentially been replaced by Struts 2  and is not recommended for new projects.</p>
<p>The following is included for purposes of comparison:</p>
<ul>
<li> Projects that will be deployed to a 1.5 JVM</li>
<li>A lot of boilerplate code needs to be written for simple tasks</li>
<li>A Struts application will always have more classes than an equivalent application written in a different framework</li>
</ul>
</td>
</tr>
<tr>
<th>Struts 2* (WebWork)</th>
<td>Not recommended for any but new projects.</td>
</tr>
<tr class="odd">
<th> Wicket</th>
<td>
<ul>
<li>Nearly completely static or completely stateless sites should avoid Wicket</li>
<li>Projects with existing code</li>
</ul>
</td>
</tr>
<tr>
<th>Shale*</th>
<td>
<ul>
<li>Shale is &#8220;on-top-of-JSF&#8221; so can&#8217;t be used outside a JSF-app</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Rails</th>
<td>
<ul>
<li>Projects that require lots of enterprise integration</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionThreeSummary" class="section">Of the projects we&#8217;re comparing, which have you tried?</h3>
<p>These are summarized answers. For more detail, click <a title="Full Answer - Question Three" href="#QuestionThree">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MyFaces</th>
<td>Seam: didn&#8217;t like</p>
<ul>
<li>Steep learning curve for the developer, including JSF + EJB 3.0.</li>
<li>Its many libraries make it challenging to successfully deploy.</li>
</ul>
</td>
</tr>
<tr>
<th>JBoss SEAM</th>
<td>No information available.</td>
</tr>
<tr class="odd">
<th>Spring MVC</th>
<td>Struts: liked</p>
<ul>
<li>A simple, mature web framework. Struts 1 is a bit heavy and tedious, but the newest version (Struts 2) blends the robustness of Struts with the benefits of WebWork and many lessons learned from the Rails framework.</li>
</ul>
<p>Webwork: liked</p>
<ul>
<li>A simple, mature, and lightweight framework. Configuration can be arduous. Development has merged with Struts and benefits from the experience and community of that project.</li>
</ul>
<p>Rails: liked</p>
<ul>
<li>Rails favors convention over configuration and goes a long way to making web application development simpler. However, it is still immature and lacks the breadth of features of Java web application frameworks.</li>
</ul>
</td>
</tr>
<tr>
<th>Stripes</th>
<td>Spring: MVC: didn&#8217;t like</p>
<ul>
<li>Overly complex, too much configuration outside the code.</li>
</ul>
<p>Struts 1: didn&#8217;t like</p>
<ul>
<li>Hamstrung by the backward compatibility requirements.</li>
</ul>
<p>WebWork / Struts 2: didn&#8217;t like</p>
<ul>
<li>WebWork learned a lot from Struts 1, but still suffers from configuration pain.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Struts 1*</th>
<td>Spring MVC: didn&#8217;t like</p>
<ul>
<li>Overly complex, too much configuration outside the code.</li>
</ul>
<p>WebWork / Struts 2: didn&#8217;t like</p>
<ul>
<li>WebWork learned a lot from Struts 1, but still suffers from configuration pain.</li>
</ul>
<p>Stripes: liked</p>
<ul>
<li>Excellent framework, clean and simple, it simply keeps out of the way.</li>
</ul>
</td>
</tr>
<tr>
<th>Struts 2* (WebWork)</th>
<td>Spring MVC: liked</p>
<ul>
<li>Respectable effort that no one should be ashamed of using.</li>
</ul>
<p>Stripes: liked</p>
<ul>
<li>Very compelling. Either would be a good choice for a project getting a fresh start.</li>
</ul>
<p>Wicket: liked</p>
<ul>
<li>Very compelling. Either would be a good choice for a project getting a fresh start.</li>
</ul>
<p>JSF: didn&#8217;t like</p>
<ul>
<li>is the EJB of web frameworks. Cool in theory. Hell in practice.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Wicket</th>
<td>Spring: liked</p>
<ul>
<li>I use it to configure my entire middle-tier, and it allows me to operate many similar sites by overriding pieces of configuration that may be different for that particular site.  I’ve also used it for configuring custom back-office applications based on many components that I wrote, and wired together via Spring.</li>
</ul>
<p>Tapestry: didn&#8217;t like</p>
<ul>
<li>Worked with it for two years on an enterprise project at work.  It had absolutely no transparency as to what was going on underneath the covers.  It forced you to do things a certain way – the “HLS” way.  Everyone involved with the project seemed religiously addicted to it, and only to doing it the “HLS” way, like he was a deity.  It forced tons of configuration on you.  Every release is a complete rewrite, and backwards-compatibility is constantly thrown out the window to suit the author’s current whims.  The learning curve is extremely steep.  I hear that version 4 is better, but I gave it up with version 3.</li>
</ul>
<p>Trails: didn&#8217;t like</p>
<ul>
<li>Didn&#8217;t try very hard. Couldn’t ever really get it to work well, although with more effort, that would’ve likely changed.  Did not like Tapestry, so did not pursue further.</li>
</ul>
</td>
</tr>
<tr>
<th> Shale*</th>
<td>Spring MVC: liked</p>
<ul>
<li>Cool, nice glue code, but there is a little overlap in Shale&#8217;s dialog and Spring Web-Flow (their JSF-version).</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Rails</th>
<td>No information available. TODO</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFourSummary">What is the future of this project?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Four -- Full Answers" href="#QuestionFour">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MyFaces</th>
<td>
<ul>
<li>Community is writing the new JSR 314</li>
<li>Artifacts from Shale will probably make it into JSF 2.0</li>
</ul>
</td>
</tr>
<tr>
<th>JBoss SEAM</th>
<td>
<ul>
<li>Developers are simplifying this project by separating the add-on parts</li>
<li>Project is related to the JSR Web Beans</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Spring MVC</th>
<td>
<ul>
<li>Easier configuration and better validation</li>
</ul>
</td>
</tr>
<tr>
<th>Stripes</th>
<td>
<ul>
<li>No major architectural changes</li>
<li>Community has expanded to ensure response to requests</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Struts 1*</th>
<td>
<ul>
<li>Bug fixes</li>
</ul>
</td>
</tr>
<tr>
<th>Struts 2* (WebWork)</th>
<td>No information available.</td>
</tr>
<tr class="odd">
<th>Wicket</th>
<td>
<ul>
<li>Improvements to scalability</li>
<li>Better support for stateless applications</li>
<li>Full-featured Java 1.5 version planned</li>
<li>More tightly-integrated support for Spring</li>
<li>Role-based authorization</li>
</ul>
</td>
</tr>
<tr>
<th>Shale*</th>
<td>
<ul>
<li>Some artifacts from Shale will probably make it into JSF 2.0</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Rails</th>
<td>
<ul>
<li>Rails 2.0 is expected to be released by the end of 2007</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFiveSummary">What is the future of this project?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Five -- Full Answers" href="#QuestionFive">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Projecth</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>MyFaces</th>
<td>No information available.</td>
</tr>
<tr>
<th> JBoss SEAM</th>
<td>
<ul>
<li>Some developers think that JBoss SEAM is a J2EE standard, but it is not.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Spring MVC</th>
<td>
<ul>
<li>Spring MVC and Spring WebFlow are not competing projects.</li>
</ul>
</td>
</tr>
<tr>
<th>Stripes</th>
<td>
<ul>
<li>Stripes has been dismissed as a &#8220;one man band&#8221; but it has a very helpful and constructive user and development community</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Struts 1*</th>
<td>
<ul>
<li>Struts has no support for AJAX.</li>
<li>Developers also think that they will be required to use JSPs.</li>
</ul>
</td>
</tr>
<tr>
<th>Struts 2* (WebWork)</th>
<td>No information available.</td>
</tr>
<tr class="odd">
<th>Wicket</th>
<td>
<ul>
<li>URLs are ugly.</li>
<li>That this framework is an infant version of Tapestry.</li>
</ul>
</td>
</tr>
<tr>
<th>Shale*</th>
<td>
<ul>
<li>That Shale is a JSF implementation</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>Rails</th>
<td>
<ul>
<li>That Rails is all about code generation</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h2>Complete Responses</h2>
<h3 id="QuestionOne" class="section">What&#8217;s your project&#8217;s &#8217;sweet spot&#8217;?</h3>
<p>This is the full response. For a summary of the response, click <a href="#QuestionOneSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> MyFaces</th>
<td>The JSF/MyFaces Web Framework reduces developer effort by cleanly  						separating MVC layers. The framework addresses every complex  						aspect of Web development, including page flows, model  						validations, model conversions and page actions. Developers have  						the freedom to create new components from scratch, or launch  						development from existing components. Because JSF/MyFaces  						represents the standard implementation, developers have another  						resource for components: the many open source solutions available.  						The list include ICEFaces, Ajax4JSF, Apache Trinidad and Sun  						Sandbox.</td>
</tr>
<tr>
<th> JBoss SEAM</th>
<td>JBoss SEAM allows developers to code many types of complex,  						multi-window, transactional web applications more easily using EJB  						3.0 as M(Model) layer and JSF as VC(View-Controller) layer part of  						the project.</p>
<p>It supports RESTful pages, provides AJAX functionality, and eases  						the development life cycle by using the Java annotations heavily.  						It provides new EJB 3.0 programming artifacts easily, so while  						developers need to learn this functionality, they do not have to  						be experts to begin.</p>
<p>This set of tools works well on projects aspiring to integration  						with other open source projects.</p>
<p>Finally, SEAM extends the classical session, request, and  						application scope with new defined context. This makes it a good  						choice for applications that have a long running business context  						containing more than one request.</td>
</tr>
<tr class="odd">
<th> Spring MVC</th>
<td>Because the Spring MVC Web application framework is tightly  						integrated with the Spring application framework, it is best  						suited for projects that use &#8211; or intend to use &#8211; Spring as the  						basis. It provides a simple way of exposing business logic as HTTP  						addressable URLs and provides multiple view rendering techniques.</td>
</tr>
<tr>
<th> Stripes</th>
<td>Stripes, a Java servlet presentation framework, is an ideal fit  						for many Web based applications, large or small. Stripes offers a  						clean design with simple concepts that allow developers to get  						productive fast. Annotation based configuration was designed into  						the tool, and sensible defaults reduce the need for configuration  						to be explicitly stated. Finally, a carefully controlled code base  						keeps the tools from the feature-bloat that makes competitors  						unwieldy while not compromising on the basic components developers  						will need to do the classic enterprise Web development tasks.</td>
</tr>
<tr class="odd">
<th> Struts 1*</th>
<td>Although Struts 1 has essentially been replaced by Struts 2 (also  						in this list), and is not recommended for projects commencing  						today, it is still in use and extremely popular with enterprises  						so we&#8217;ve included it here.</p>
<p>Struts 1 provided an excellent fit for projects that involved  							form submission. When Struts was first released developers  							migrated to it from home grown servlet frameworks. Struts gave  							the industry a defacto standard for developing browser-based  							applications.<br />
Two notable sites using Struts 1 are  						http://www.virgin-atlantic.com and https://www.21st.com/.</td>
</tr>
<tr>
<th> Struts 2 (WebWork)</th>
<td>Struts 2, WebWork renamed, is an excellent web application  						framework of the &#8220;action controller&#8221; family. Due to  						similarity of paradigm, those tens-of-thousands of developers out  						there that are familiar with Struts 1 can learn Struts 2/WebWork  						in a matter of a day, realizing huge productivity increases. At  						the time my team made that transition about 3 years ago, we  						estimated about a 40% productivity increase in work on the web  						application. This is due to the (what was at the time WebWork was  						built) &#8220;next generation&#8221; features that WebWork  						introduced upon the &#8220;action controller framework&#8221;  						paradigm. Validation, auto-form handling, type conversion,  						interceptors, etc. all add up to having a real usable tool set,  						without having to entirely change the way you &#8220;think&#8221;.</p>
<p>If a team is coming from Struts 1 and looking for a quick worth  						while change, WebWork/Struts 2 is for you. It vastly improves upon  						Struts 1, and has features that are quite competitive against the  						newer frameworks.</td>
</tr>
<tr class="odd">
<th> Wicket</th>
<td>Wicket, out-of-the-box, provides everything teams need to create  						the typical stateful Web application that must track session state  						and perform services for the user.</p>
<p>This Web framework is ideal for developers who prefer a very clean  						separation of concerns and object-oriented programming and need to  						get going fast. Developers can be productive in Wicket quickly.  						Teams that have UI members and programmers working independently  						of each other find Wicket exceptionally friendly. Since the HTML  						is all regular HTML, with no weird additional syntax, the UI  						designers can write the HTML / CSS and leave the implementation  						completely to the programmers.</p>
<p>Although it sounds like the opposite of the previous point, Wicket  						is also great for one-man shops where one developer must program  						and write her own HTML. The developer can focus on object-oriented  						programming, and then add the basic HTML once she&#8217;s figured the  						implementation out. Projects that need or desire excellent mailing  						list support will find that the wicket-users mailing list first  						rate.</p>
<p>If you just want to do object oriented programming and not worry  						about jumping through hoops to work with “the framework”, Wicket  						is for you.  Once you understand a few basic concepts of how  						Wicket operates, you can start to figure out most of it on your  						own.</td>
</tr>
<tr>
<th> Shale*</th>
<td>The Shale Web framework offers an exceptional JUnit /JMock based  						testing framework that provides developers the possibility of  						testing their JSF-application. Other goodies include the  						view-controller which follows the common JSF-pattern of one  						&#8216;backing bean&#8217; behind the page. For teams that need an XML-based  						alternative to JSP, Shale provides CLAY.</td>
</tr>
<tr class="odd">
<th> Rails</th>
<td>The sweet spot for Rails is any web application, especially ones  						that involve REST and/or AJAX. It should be strongly considered  						for stand-alone web sites.</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionTwo" class="section">What sorts of projects does this package not work as well for?</h3>
<p>This is the full response. For a summary of the response, click <a href="#QuestionTwoSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> MyFaces</th>
<td>If developers need to create an application that requires static   						pages using HTML+ CSS + JavaScript, then JSF/MyFaces is not the   						best choice. It does not natively support AJAX functionality and   						developers will have to use one of the AJAX-enabled JSF components   						available in the community. JSF/MyFaces does not support REStful   						pages and the standard component set is probably not enough for   						implementing complex enterprise applications.</p>
<p>Users say, JSF &#8220;is the EJB of web frameworks. Cool in theory.   						Hell in practice.&#8221;</td>
</tr>
<tr>
<th> JBoss SEAM</th>
<td>Although this project tries to address all the challenges of   						developing dynamic web projects, the stiff learning curve makes it   						a challenging set of tools for junior teams. Developers will need   						some knowledge of the JSF (it uses JSF as view) and some familiarity with the EJB 3.0   						framework.</p>
<p>Its dependence on libraries makes JBoss SEAM challenging to deploy.   						Suitable for very complex and transactional dynamic web projects,   						it should not be used in simple CRUD applications.</td>
</tr>
<tr>
<th> Spring MVC</th>
<td>A relatively new framework, Spring MVC is missing some of the   						features of more mature frameworks. If developers are building a   						project with an established, complex business model, it is   						somewhat arduous in Spring MVC to bind request parameters to a   						complex model. WebWork would be a better choice in this scenario because of its OGNL binding framework.</td>
</tr>
<tr class="odd">
<th> Stripes</th>
<td>Because Stripes requires Java 5, it will not work in any context   						where Java 5 is not available. Developers think this would be a   						great choice for brand new projects, not as good for those with   						existing code.</td>
</tr>
<tr>
<th> Struts 1*</th>
<td>Any projects that will be deployed to a 1.5 JVM should use Stripes   						instead.</p>
<p>One of the biggest complaints about Struts 1.x is the amount of   						boilerplate code that needs to be written for simple tasks. For   						instance, there is configuration required in struts-config.xml,   						possibly a form class to be written, and action class, possibly a   						Tiles configuration, and the a JSP. None of these things can be   						changed without introducing backward-compatibility problems with   						earlier Struts releases and so Struts 1.x is not able to overcome   						these weaknesses.</p>
<p>The lack of annotations can be mitigated with the use of tools   						such as XDoclet, and smart design can reduce the pain involved   						with adding new classes. However, the separation of form and   						action that many of the newer frameworks have avoided can only be   						handled, can&#8217;t be fixed. This means a Struts application will   						always have more classes than an equivalent application written in   						one of the other newer frameworks.</p>
<p>Given all of this, Struts 1.x makes a poor choice for most   						projects commencing today, with one exception: if the team is   						already familiar with Struts 1.</td>
</tr>
<tr class="odd">
<th> Struts 2* (WebWork)</th>
<td>Not recommended for any but new projects.</td>
</tr>
<tr>
<th> Wicket</th>
<td>Nearly completely static or completely stateless sites should   						avoid Wicket.  Wicket does perform well even for this sort of   						site, but it provides a lot of things that developers will not   						need in this situation. Wicket is a great   						choice for brand new projects, not as good for those with existing   						code.</td>
</tr>
<tr class="odd">
<th> Shale*</th>
<td>Requires JSF/MyFaces as it provides the runtime   						environment for Shale. Since Shale is &#8220;on-top-of-JSF&#8221;, the   						usage of Shale outside a JSF-application is pretty limited.</td>
</tr>
<tr>
<th> Rails</th>
<td>Rails does not particularly excel at projects that require lots of   						enterprise integration, such as performing a transaction across   						multiple databases or message queues. In these situations,   						Java-based Web application frameworks are probably the best   						choice. This may change in the future, however, as JRuby can   						already run Rails applications and also use Java&#8217;s high-end   						integration facilities.</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionThree" class="section">Of the projects we&#8217;re comparing, which have you tried?</h3>
<p>This is the full response. For a summary of the response, click <a href="#QuestionThreeSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> MyFaces</th>
<td>Seam: didn&#8217;t like</p>
<ul>
<li> Steep learning curve for the developer, including JSF + EJB 3.0.</li>
<li> Its many libraries make it challenging to successfully deploy.</li>
</ul>
</td>
</tr>
<tr>
<th> JBoss SEAM</th>
<td>No information available.</td>
</tr>
<tr class="odd">
<th> Spring MVC</th>
<td>Struts: liked</p>
<ul>
<li>A simple, mature web framework. Struts 1 is a bit   								heavy and tedious, but the newest version (Struts 2) blends the   								robustness of Struts with the benefits of WebWork and many   								lessons learned from the Rails framework.</li>
</ul>
<p>Webwork: liked</p>
<ul>
<li> A simple, mature, and lightweight framework. Configuration can   								be arduous. Development has merged with Struts and   								benefits from the experience and community of that project.</li>
</ul>
<p>Rails: liked</p>
<ul>
<li> Rails favors convention over configuration and goes a long way   								to making web application development simpler. However, it is   								still immature and lacks the breadth of features of Java web   								application frameworks.</li>
</ul>
</td>
</tr>
<tr>
<th> Stripes</th>
<td>Spring: MVC: didn&#8217;t like</p>
<ul>
<li> Overly complex, too much configuration outside the code.</li>
</ul>
<p>Struts 1: didn&#8217;t like</p>
<ul>
<li> Hamstrung by the backward compatibility requirements.</li>
</ul>
<p>WebWork / Struts 2: didn&#8217;t like</p>
<ul>
<li> WebWork learned a lot from Struts 1, but still suffers from   								configuration pain.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th> Struts 1*</th>
<td>Spring MVC: didn&#8217;t like</p>
<ul>
<li> Overly complex, too much configuration outside the code.</li>
</ul>
<p>WebWork / Struts 2: didn&#8217;t like</p>
<ul>
<li> WebWork learned a lot from Struts 1, but still suffers from   								configuration pain.</li>
</ul>
<p>Stripes: liked</p>
<ul>
<li> Excellent framework, clean and simple, it simply keeps out of   								the way.</li>
</ul>
</td>
</tr>
<tr>
<th> Struts 2* (WebWork)</th>
<td>Spring MVC: liked</p>
<ul>
<li> Respectable effort that no one should be ashamed of using.</li>
</ul>
<p>Stripes: liked</p>
<ul>
<li> Very compelling. Either would be a good choice for a project   								getting a fresh start.</li>
</ul>
<p>Wicket: liked</p>
<ul>
<li> Very compelling. Either would be a good choice for a project   								getting a fresh start.</li>
</ul>
<p>JSF: didn&#8217;t like</p>
<ul>
<li> is the EJB of web frameworks. Cool in theory. Hell in practice.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th> Wicket</th>
<td>Spring: liked</p>
<ul>
<li> I use it to configure my entire middle-tier, and it allows me to   								operate many similar sites by overriding pieces of configuration   								that may be different for that particular site.  I’ve   								also used it for configuring custom back-office applications   								based on many components that I wrote, and wired together via   								Spring.</li>
</ul>
<p>Tapestry: didn&#8217;t like</p>
<ul>
<li> Worked with it for two years on an enterprise project at   								work.  It had absolutely no transparency as to what was   								going on underneath the covers.  It forced you to do things   								a certain way – the “HLS” way.  Everyone   								involved with the project seemed religiously addicted to it, and   								only to doing it the “HLS” way, like he was a   								deity.  It forced tons of configuration on you.  Every   								release is a complete rewrite, and backwards-compatibility is   								constantly thrown out the window to suit the author’s   								current whims.  The learning curve is extremely   								steep.  I hear that version 4 is better, but I gave it up   								with version 3.</li>
</ul>
<p>Trails: didn&#8217;t like</p>
<ul>
<li> Didn&#8217;t try very hard. Couldn’t ever really get it to work   								well, although with more effort, that would’ve likely   								changed.  Did not like Tapestry, so did not pursue further.</li>
</ul>
</td>
</tr>
<tr>
<th> Shale*</th>
<td>Spring MVC: liked</p>
<ul>
<li> Cool, nice glue code, but there is a little overlap in Shale&#8217;s   								dialog and Spring Web-Flow (their JSF-version).</li>
</ul>
</td>
</tr>
<tr class="odd">
<th> Rails</th>
<td>No information available.</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFour" class="section">What is the future of this project? What&#8217;s coming that will ease   						development?</h3>
<p>This is the full response. For a summary of the response, click <a href="#QuestionFourSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> MyFaces</th>
<td>The JSF 2.0 community is writing the new JSR 314. Interested   						parties can find it here: http://jcp.org/en/jsr/detail?id=314.   						This effort solves a number of the problems addressed in other   						questions.</p>
<p>Some artifacts from Shale will probably make it into JSF 2.0. For   						instance, there are the Shale-Tiger extensions that allow the   						usage of annotations to register a managed bean.</td>
</tr>
<tr>
<th> JBoss SEAM</th>
<td>Developers are simplifying this project by separating the add-on   						parts. It is also related to the  new JSR Web Beans. For more   						information, see http://jcp.org/en/jsr/detail?id=299.</td>
</tr>
<tr class="odd">
<th> Spring MVC</th>
<td>Spring MVC continues to benefit from the improvements made to the   						core Spring framework. Future improvements include easier   						configuration and better validation.</td>
</tr>
<tr>
<th> Stripes</th>
<td>There has been an expansion of the developer base recently to   						ensure that Stripes continues to be in a position to respond to   						the community&#8217;s requests. However, the community plans no major   						architectural changes. Users can adopt Stripes confident in the   						knowledge that the codebase has stabilized.</td>
</tr>
<tr class="odd">
<th> Struts 1*</th>
<td>Struts 1.x has a very limited future. Whilst officially new   						functionality is being added to the 1.x releases if backward   						compatibility can be maintained, in reality only very minor   						functionality improvements are being added. Having said this,   						bugfixes are still released. Thirdparty tools (eg XDoclet, IDE   						support) are mature and unlikely to offer any significant changes   						from the functionality offered today.</td>
</tr>
<tr>
<th> Struts 2* (WebWork)</th>
<td>No information available.</td>
</tr>
<tr class="odd">
<th> Wicket</th>
<td>The community plans to improve scalability, and provide better   						support for stateless applications. A full Java 1.5 version of   						Wicket is planned (current version works on 1.5, of course, but   						does not take advantage of 1.5 features so that 1.4 projects can   						still use it). Additionally, more tightly-integrated support for   						Spring and role-based authorization is in the works. Manning Early   						Access Program publishers released a   						Wicket-in-Action in July 2007.</td>
</tr>
<tr class="odd">
<th> Shale*</th>
<td>Some artifacts from Shale will probably make it into JSF 2.0. For   						instance, there are the Shale-Tiger extensions that allow the   						usage of annotations to register a managed bean.</td>
</tr>
<tr>
<th> Rails</th>
<td>Rails 2.0 is expected to be released by the end of 2007. It will   						make REST-based web application development even easier. It will   						also provide improvements in these areas: performance, security,   						formatting content for multiple clients (e.g., iPhone and Atom   						readers), testing, database schema migrations, XML handling,   						debugging, plug-in processing, and much more.</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFive" class="section">Are there myths about this project that you&#8217;d like to 						challenge?</h3>
<p>This is the full response. For a summary of the response, click <a href="#QuestionFiveSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th>Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> MyFaces</th>
<td>No information available.</td>
</tr>
<tr>
<th> JBoss SEAM</th>
<td>Some developers think that JBoss SEAM is a J2EE standard, but it 						is not. It is developed on top of two important J2EE standards, 						namely, JSF and EJB 3.0.</td>
</tr>
<tr class="odd">
<th> Spring MVC</th>
<td>Spring MVC and Spring WebFlow are sometimes seen as competing projects. Spring WebFlow is actually complimentary in that  						it  						solves a particular problem with long web conversations.</td>
</tr>
<tr>
<th> Stripes</th>
<td>Stripes (like many other good frameworks) was started by one person,  						Tim Fennell, and concerns have been raised about it being  						a  						&#8220;one man band&#8221;. Earlier this year Tim stated that he  						wanted to  						open the framework up to more developers, his reasoning  						was so  						that Stripes could continue to grow. Stripes now has a very  						helpful  						and constructive user and development community.</td>
</tr>
<tr class="odd">
<th> Struts 1*</th>
<td>Developers think they need to use AJAX in their application and 						think that older frameworks like Struts have no support for AJAX. 						This is a myth, any framework can integrate with AJAX, see 						<a href="http://wiki.apache.org/struts/AjaxStruts">http://wiki.apache.org/struts/AjaxStruts</a> for details on how AJAX interacts with a server side 						implementation based on Struts. It should be noted that existing 						applications written on Struts should not be ported to a newer 						framework purely in order to add AJAX using some AJAX support from 						another framework.</p>
<p>Developers also think that they will be required to use JSPs. Struts, like all popular frameworks, uses JSP as the default templating engine. It is possible to use Struts tags with both Freemarker ( <a href="http://cwiki.apache.org/WW/freemarker-tags.html">http://cwiki.apache.org/WW/freemarker-tags.html</a>) 						and Velocity ( 						<a href="http://cwiki.apache.org/WW/velocity-tags.html">http://cwiki.apache.org/WW/velocity-tags.html</a>).</td>
</tr>
<tr class="odd">
<th> Struts 2 (WebWork)</th>
<td>No information available.</td>
</tr>
<tr>
<th> Wicket</th>
<td>All of the URLs are ugly.  This is easily configured.  						Developers can literally do whatever they want with the URLs to 						fit the project&#8217;s needs.</p>
<p>That this framework is an infant version of Tapestry.  Wicket 						supports so many things out-of-the-box, and is a very mature 						framework in that “it just works” and has few 						bugs.  It has excellent AJAX support, again, out-of-the-box.</td>
</tr>
<tr class="odd">
<th> Shale*</th>
<td>Developers think that Shale is a JSF implementation, but it&#8217;s not.  						It is a lightweight framework on-top of JSF.</td>
</tr>
<tr>
<th> Rails</th>
<td>Some people think that Rails is all about code generation. Although  						code generation in Rails, called &#8220;scaffolding&#8221;,  						is  						convenient, that&#8217;s really just a tiny fraction of a very robust  						package.  						Code generation gets you started quickly and lets new  						Rails  						users learn how the basics work, but in most cases the generated  						code will be replaced by hand-written code one method at  						a time.  						This makes sure your application is always ready to run  						and test  						while you&#8217;re implementing it.</td>
</tr>
</tbody>
</table>
<p><a href="#More">*More information on the relationship between Struts, Shale and WebWork.</a></p>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="More">Struts, Shale and WebWork</h3>
<p>In the early 2000&#8217;s, WebWork broke off from Apache Struts 1. In 2006, WebWork 2.2  			was pulled back in to the Apache Struts project and became Struts 2.  			Shortly thereafter, development on WebWork ceased. All releases after  			after 2.2 consist of patches. Active development is taking place  			on the Struts 2 code base.</p>
<p>Shale also began life as an Apache Struts subproject. Based on the  			JSF standard (which did not exist when Struts 1 development commenced  			in 2000), the Shale project broke off on its own in late 2006.</p>
<p>A word about the relationship between Struts, WebWork and Shale in the OLEX Library.  			Although the entries in this table are organized into Struts 1 and  			Struts 2/Webwork, downloadable code in the OLEX library is organized  			differently. Under the Struts project, you will find Struts versions  			1.0.2 through 2.0.9, and under the Webwork project you will find  			versions 2.1.7 through 2.2.4. OpenLogic policy is to offer all of a  			project&#8217;s versions &#8211; regardless of the significance of the changes &#8211;  			together. Project developers, when asked to answer our &#8216;Sweet Spot&#8217;  			questions, found it more natural to talk about in terms of Struts 1  			and WebWork/Struts 2 given that the code bases are so closely 			related.</p>
<p>For access to Struts 1 and Struts 2   			code lines in the OLEX library, search for Struts. WebWork code is   			kept under the WebWork project.</p>
<h3 id="Acknowledgments">Acknowledgments</h3>
<p>OpenLogic would like to thank the following members of the OpenLogic 	Expert Community for their contributions to this effort and invite the 	community to email us (docs-at-openlogic-dot-com) if they&#8217;d like to augment, correct, update, 	refute or dispute any of the information included herein.</p>
<table class="help_table" border="0" width="300">
<tbody>
<tr>
<th> Project</th>
<th> Contributer</th>
</tr>
<tr class="odd">
<td>JSF/MyFaces</td>
<td>Gurkan Erdogdu</td>
</tr>
<tr>
<td>JBoss SEAM</td>
<td>Gurkan Erdogdu</td>
</tr>
<tr class="odd">
<td>Spring MVC</td>
<td>Andres March</td>
</tr>
<tr>
<td>Stripes</td>
<td>Dmitri Colebatch</td>
</tr>
<tr class="odd">
<td>Struts 1</td>
<td>Dmitri Colebatch</td>
</tr>
<tr>
<td>Struts 2 (Webwork)</td>
<td>James House</td>
</tr>
<tr class="odd">
<td>Wicket</td>
<td>Jeremy Thompson</td>
</tr>
<tr>
<td>Shale</td>
<td>Mathias Wessendorf</td>
</tr>
<tr class="odd">
<td>Rails</td>
<td>Internal Expertise</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://olex.openlogic.com/wazi/2008/web-framework-comparison-matrix/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Open Source Application Server Comparison Matrix</title>
		<link>http://olex.openlogic.com/wazi/2008/application-server-comparison-matrix/</link>
		<comments>http://olex.openlogic.com/wazi/2008/application-server-comparison-matrix/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 19:46:42 +0000</pubDate>
		<dc:creator>Kimberly McClintock</dc:creator>
				<category><![CDATA[Comparisons]]></category>
		<category><![CDATA[glassfish]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://olex.openlogic.com/wazi/?p=51</guid>
		<description><![CDATA[The following tables represent research completed in the fall of 2007 by OpenLogic. We went to the experts -- members of the OpenLogic Expert Community who are committers and expert users of the projects -- and asked them to answer a set of questions. Members of Tomcat, JBoss, Jetty and GlassFish responded. Use the resulting information as a tool to plan your projects.
]]></description>
			<content:encoded><![CDATA[<p>Use this comparison matrix to learn about the differences between and relative benefits of the popular  open source application servers JBoss, Tomcat, Glassfish, and Jetty.</p>
<p>From the generally thin-featured offerings and questions of security of the early 2000&#8217;s, the Application Server category of open source project has matured to compete squarely with their commercial counterparts. Sometimes the terms &#8216;Application Server&#8217; and &#8216;Web Application Framework&#8217; are used interchangeably; we&#8217;ve distinguished between them for our research. By Application Server here we mean &#8217;servers of Web based applications&#8217;. You&#8217;ll want to look to the Web Frameworks SweetSpot for more information on the web application frameworks developed by the open source community.</p>
<p>The following tables represent research completed in the fall of 2007 by OpenLogic. We went to the experts &#8212; members of the OpenLogic Expert Community who are committers and expert users of the projects &#8212; and asked them to answer a set of questions. Members of Tomcat, JBoss, Jetty and GlassFish responded. Use the resulting information as a tool to plan your projects.</p>
<p>For comprehensive information on each project compared, locate it in the OpenLogic Enterprise Exchange library by accessing the &#8216;Browse Open Source&#8217; tab.</p>
<p>The five questions we asked the experts appear below. To view more detail on the projects* compared across each question, <a id="Questions">click the question</a>.</p>
<ol>
<li><a href="#QuestionOneSummary">What&#8217;s the &#8217;sweet spot&#8217; of your project? For what type of projects should users strongly consider it? </a></li>
<li><a href="#QuestionTwoSummary">What type of scenarios does your project not fit into as well? Would you recommend another project in this scenario? If so, which one? </a></li>
<li><a href="#QuestionThreeSummary"> Of the projects included here, which have you tried? Of those, which ones did you like or dislike, and why?</a></li>
<li><a href="#QuestionFourSummary"> What is the future of this project? What&#8217;s coming that will ease development?</a></li>
<li><a href="#QuestionFiveSummary"> Are there myths about this project that you&#8217;d like to challenge? </a></li>
</ol>
<p>For comprehensive information on each project, search the OLEX Open Source Library. For a list of the open source developers we interviewed, click <a title="Acknowledgments" href="#Acknowledgments">here</a>.</p>
<p><a id="What_version?">*While no version of the projects is specified, you can assume that the information relates to the latest version in our library at the time of the last update.</a></p>
<h2 class="section">Summarized Responses</h2>
<h3 id="QuestionOneSummary" class="section">What&#8217;s your project&#8217;s &#8217;sweet spot&#8217;?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question One -- Full Answers" href="#QuestionOne">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th>Project</th>
<th> Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>GlassFish</th>
<td>
<ul>
<li>Web services</li>
<li>Enterprise level support for clustering</li>
<li> Enterprise level administration console (CLI, Web based GUI and JMX)</li>
<li>Installation profiles</li>
<li>Tight integration with a wide variety of software packages</li>
</ul>
</td>
</tr>
<tr>
<th>Tomcat</th>
<td>
<ul>
<li>Extremely configurable and pluggable design</li>
<li>Popularity results in large user base</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>JBoss</th>
<td>
<ul>
<li>Ease of use</li>
<li>Development environments</li>
</ul>
</td>
</tr>
<tr>
<th>Jetty</th>
<td>
<ul>
<li> Small size</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionTwoSummary" class="section">What sorts of projects does this package not work as well for?</h3>
<p>This is a summary of the responses. For full detail, click  <a title="Question Two -- Full Answers" href="#QuestionTwo">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th> Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>GlassFish</th>
<td>
<ul>
<li>Any scenario requiring a full Java EE application server or Servlet container is good for GlassFish</li>
<li>GlassFish does not fit in a scenario requiring a container embedded</li>
</ul>
</td>
</tr>
<tr>
<th>Tomcat</th>
<td>
<ul>
<li>Tomcat does not fit well into fullblown J2EE applications</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>JBoss</th>
<td>
<ul>
<li>Will fit in any scenario</li>
</ul>
</td>
</tr>
<tr>
<th>Jetty</th>
<td>
<ul>
<li> Scenarios requiring J2EE support beyond servlets should be avoided</li>
<li>Scenarios requiring business logic to housed in a separate EJB tier</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionThreeSummary" class="section">Of the projects we&#8217;re comparing, which have you tried?</h3>
<p>This is a summary of the responses. For full detail, click  <a title="Question Three -- Full Answers" href="#QuestionThree">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th> Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>GlassFish</th>
<td>Tomcat: liked</p>
<ul>
<li> Tomcat is an optimized Servlet container with clustering 						capability and a very good http/https module implemented using 							non blocking NIO package. Tomcat is suitable if project is not 							going to host EJBs.</li>
</ul>
<p>Geronimo:liked</p>
<ul>
<li> Geronimo has all features that GlassFish has except that it does not provide any of those five features mentioned in question one. 	Although Geronimo has an administration interface, Web service support and very small level of clustering support (using Terracotta), it is far behind what GlassFish provides out of the 	box. Geronimo fits best in scenarios where there is no need for 	clustering and cluster management.</li>
</ul>
</td>
</tr>
<tr>
<th>Tomcat</th>
<td>CauchoResin: didn&#8217;t like</p>
<ul>
<li> Commercial.</li>
<li> Poor documentation.</li>
</ul>
<p>Jetty: liked</p>
<ul>
<li> Small and efficient, but has a smaller user base than some of the alternatives.</li>
</ul>
<p>GlassFish: disliked</p>
<ul>
<li> Worst configuration files ever</li>
<li> Hard to work with.</li>
</ul>
<p>Geronimo: liked</p>
<ul>
<li> Wraps Tomcat inside a J2EE server.</li>
</ul>
<p>JBoss: liked</p>
<ul>
<li> Same as Geronimo</li>
<li> Though I dislike the tyrant community of JBoss.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>JBoss</th>
<td>Tomcat: liked</p>
<ul>
<li> Easy to install, although can be tricky to configure in 							some aspects.</li>
</ul>
<p>Jetty: liked</p>
<ul>
<li> A great option if what you need is a simple web container.</li>
<li> It can be embedded (which makes deployment of the project as a 							whole easier).</li>
<li> Very fast startup (useful during development).</li>
</ul>
<p>GlassFish: didn&#8217;t like</p>
<ul>
<li> Hard to use, and very slow to start (especially when integrated 							with NetBeans).</li>
</ul>
</td>
</tr>
<tr>
<th>Jetty</th>
<td>Tomcat: liked</p>
<ul>
<li> Excellent community support.</li>
<li>Solid Web server</li>
<li>In my experience,  							the development community can be somewhat unhelpful and  							unfriendly.  					However, I have seen many many excellent  					examples of community support in Tomcat, both from users and  					developers. In particular, I have  					always found people such as Filip Hanik to be extremely helpful.</li>
</ul>
<p>JBoss: liked</p>
<ul>
<li>Strong community.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFourSummary" class="section">What is the future of this project? What&#8217;s coming that will ease development?</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Four -- Full Answers" href="#QuestionFour">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th> Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>GlassFish</th>
<td>
<ul>
<li> Support for AIX</li>
<li> Faster startup</li>
<li> High availability (JMS high availability, in particular) using 							HADB</li>
<li> Enhancements to auto update feature</li>
</ul>
</td>
</tr>
<tr>
<th>Tomcat</th>
<td>
<ul>
<li> Faster and more stable</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>JBoss</th>
<td>
<ul>
<li> No information available.</li>
</ul>
</td>
</tr>
<tr>
<th>Jetty</th>
<td>
<ul>
<li><a title="link to Continuations information" href="http://docs.codehaus.org/display/JETTY/Continuations">Continuations</a> and 							Async SSL</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFiveSummary" class="section">Myths</h3>
<p>This is a summary of the responses. For full detail, click <a title="Question Five -- Full Answers" href="#QuestionFive">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th> Summarized Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th>GlassFish</th>
<td>
<ul>
<li>Poor performance.</li>
</ul>
</td>
</tr>
<tr>
<th>Tomcat</th>
<td>
<ul>
<li>Tomcat is great for development, but should not be used from production.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>JBoss</th>
<td>
<ul>
<li>Lack of support, and an inability to handle mission-critical projects. Neither of these are true.</li>
</ul>
</td>
</tr>
<tr>
<th>Jetty</th>
<td>
<ul>
<li>Jetty can only be run as part of JBoss or Geronimo.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<p><!-- COMPLETE RESPONSES --></p>
<h2>Complete Responses</h2>
<h3 id="QuestionOne" class="section">What&#8217;s your project&#8217;s &#8217;sweet spot&#8217;?</h3>
<p>This is the full response. For a summary of the response, click <a title="title=" href="#QuestionOneSummary">here</a>.</p>
<table class="help_table" style="height: 890px;" border="0" width="680">
<thead>
<tr>
<th> Project</th>
<th>Full Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> GlassFish</th>
<td>
<ul>
<li>Web services: It has a well designed and implemented Web service stack which supports the latest WS-* standards like Reliable Messaging, Secure Conversation, Trust, Security, SecurityPolicy, MetadataExchange, Atomic Transaction, Coordination, etc. The GlassFish Web services stack is fully Interoperable with the .Net framework, and has been adopted by some other big players like IBM for its JDK version 6, BEA as Web service stack for BEA application server 10, JBoss WS 2.1.0, etc.</li>
<li>Enterprise level support for clustering: GlassFish has a very well designed and implemented clustering and high availability mechanism which distinguishes it as an open source application server. GlassFish supports in-memory replication for http sessions, stateful EJB session states, single sign on states, and container states (Timer…). Although the default replication mechanism between instances is based on JXTA (in-memory replication), it is possible to use HADB (a high performance database optimized for high availability use cases)to achieve 99.99% uptime.</li>
<li>Enterprise level administration console (CLI, Web based GUI and JMX): The GlassFish administration console allows full control over application server configuration and behavior from detailed configuration of an ORB listener to monitoring and diagnosis. Web based console can be used to manage and configure a cluster and deploy application or resource to entire cluster. Per-Web service, JDBC resource, web resource, etc monitoring provide detailed statistics about that resource usage.</li>
<li>Installation profiles: GlassFish can be installed using one of several profiles: Developer, Cluster or Enterprise. Each profile has special features that make it suitable for a specific purpose.For example, the Developer profile will not carry modules that are required for clustered environments and this allows for faster database stops and starts. The Developer profile also uses an embedded broker to serve JMS requirements. It uses the JKS format rather than the CertDB used by the Enterprise profile. These and other differences between the profiles let each role in an enterprise to have an installation suited for its purpose.</li>
<li> GlassFish is tightly integrated with a wide range of software, including:
<ul>
<li> OpenESB &#8211; a first class JBI implementation with tens of<br />
binding components and service engines.</li>
<li> OpenSSO &#8211; an open source version of Sun Java Access Manager.</li>
<li> OpenDS &#8211; an open source version of the Sun Directory Server.</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<th> Tomcat</th>
<td>Tomcat&#8217;s sweet spot is it&#8217;s extremely configurable and pluggable design. This means that every  component inside of Tomcat can be exchanged with one you or someone else has developed without<br />
changing Tomcat code. This is all managed via the configuration file. This ease of use has contributed to making Tomcat the most popular servlet engine today. This popularity results in a very<br />
large user base and access to lots of expertise. Additionally, and it&#8217;s easy to find developers with the Tomcat skill set.</td>
</tr>
<tr class="odd">
<th> JBoss</th>
<td>The biggest advantage of JBoss is ease of use. Installation is as simple as unzipping a file; deploying the application is as simple as copying a WAR/EAR. Support for expanded deployments makes development more productive.</p>
<p>JBoss should be considered for any Java EE project. Even if the project officially uses another application server, developers could use JBoss during development to increase productivity.</td>
</tr>
<tr>
<th> Jetty</th>
<td>Whilst Jetty is an excellent servlet engine on any measure, it is extremely lightweight and so easy to embed into another application. We have a number of applications that require embedded HTTP servers in which we have used Jetty very successfully.</p>
<p>The entire Jetty codebase is only a few hundred KB, and as such it is ideal for environments where memory is a premium. For example, many devices such as routers and modems have Web<br />
interfaces for managing the device. Jetty would be an ideal fit for this sort of deployment due to its compact footprint.</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionTwo" class="section">What sorts of projects does this package not work as well for?</h3>
<p>This is the full response. For a summary of the response, click <a title="Question Two -- Summary" href="#QuestionTwoSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th> Full Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> GlassFish</th>
<td>Generally speaking, GlassFish fits any type of scenario requiring a full Java EE application server or Servlet container. In older versions of GlassFish (Sun Java application servers), it was not suitable to replace a Servlet container like Tomcat or Jetty but the new Grizzly engine used in GlassFish allows it to operate as<br />
well as Tomcat and Jetty in place of a Servlet container. In addition, it has a very easy and reliable cluster management and failover recovery which make it a wise choice.</p>
<p>The one scenario that current versions of GlassFish does not fit is any embedded use case where a container should be embedding in-process. For this scenario Tomcat fits well.</td>
</tr>
<tr>
<th>Tomcat</th>
<td>Any that is no java, of course. And, fullblown J2EE applications, for this you can use JBoss, Geronimo or Glassfish, all of which run a version of Tomcat inside.</td>
</tr>
<tr class="odd">
<th> JBoss</th>
<td>Technically speaking, I don&#8217;t know any scenario into which JBoss would not fit (that doesn&#8217;t mean such a scenario doesn&#8217;t exist, I&#8217;m just not familiar with any).</td>
</tr>
<tr>
<th> Jetty</th>
<td>If J2EE support beyond servlets is required, something like JBoss or Geronimo would be a better choice. It should be noted that technically speaking, neither of those are Servlet containers but instead include a Servlet container (typically Tomcat or Jetty) that is used to handle HTTP requests. Given that Jetty is only a servlet container, it does not support EJBs and other J2EE components except servlets.</p>
<p>Some applications may require that business logic be housed in a separate EJB tier which Jetty does not support. In these cases something like JBoss or Geronimo would be a better choice. Note that even in this case Jetty would still be an excellent choice for the HTTP/Servlet component of the application. I do not<br />
believe there are any projects where Jetty would not be an excellent fit for the HTTP/Servlet layer if Java is a requirement.</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionThree" class="section">Of the projects included here, which have you tried? Of those, which ones did you like or dislike, and why?</h3>
<p>This is the full response. For a summary of the response, click <a href="#QuestionThreeSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th> Full Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> GlassFish</th>
<td>Tomcat: liked</p>
<ul>
<li> Tomcat is an optimized Servlet container with clustering capability and a very good http/https module implemented using non blocking NIO package. Tomcat is suitable if project is not going to host EJBs.</li>
</ul>
<p>Geronimo:liked</p>
<ul>
<li>Geronimo has all features that GlassFish has except that it does not provide any of those five features mentioned in question one. Although Geronimo has an administration interface, Web<br />
service support and very small level of clustering support (using Terracotta), it is far behind what GlassFish provides out of the box. Geronimo fits best in scenarios where there is no need for clustering and cluster management.</li>
</ul>
</td>
</tr>
<tr>
<th> Tomcat</th>
<td>CauchoResin: didn&#8217;t like</p>
<ul>
<li>Commercial.</li>
<li> Poor documentation.</li>
</ul>
<p>Jetty: liked</p>
<ul>
<li> Small and efficient, but has a smaller user base than some of the alternatives.</li>
</ul>
<p>GlassFish: disliked</p>
<ul>
<li> Worst configuration files ever</li>
<li>Hard to work with.</li>
</ul>
<p>Geronimo: liked</p>
<ul>
<li> Wraps Tomcat inside a J2EE server.</li>
</ul>
<p>JBoss: liked</p>
<ul>
<li> Same as Geronimo</li>
<li> Though I dislike the tyrant community of JBoss.</li>
</ul>
</td>
</tr>
<tr class="odd">
<th>JBoss</th>
<td>Tomcat: liked</p>
<ul>
<li> Easy to install, although can be tricky to configure in some aspects.</li>
</ul>
<p>Jetty: liked</p>
<ul>
<li> A great option if what you need is a simple web container.</li>
<li> It can be embedded (which makes deployment of the project as a whole easier).</li>
<li>Very fast startup (useful during development).</li>
</ul>
<p>GlassFish: didn&#8217;t like</p>
<ul>
<li> Hard to use, and very slow to start (especially when integrated with NetBeans).</li>
</ul>
</td>
</tr>
<tr>
<th> Jetty</th>
<td>Tomcat: liked</p>
<ul>
<li> Excellent community support.</li>
<li>Solid Web server</li>
<li> In my experience, the development community can be somewhat unhelpful and unfriendly (see<br />
http://issues.apache.org/bugzilla/show_bug.cgi?id=37424 for an example). However, I have seen many many excellent examples of community support in Tomcat, both from users and developers. In particular, I have always found people such as Filip Hanik to be extremely helpful.</li>
</ul>
<p>JBoss: liked</p>
<ul>
<li> Strong community.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFour" class="section">What is the future of this project? What&#8217;s coming that will ease<br />
development?</h3>
<p>This is the full response. For a summary of the response, click <a href="#QuestionFourSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th>Full Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> GlassFish</th>
<td>The GlassFish kernel is slated for redesign in version 3. The new kernel is based on an HK2 module sub-system which makes it possible to start GlassFish in a cell phone or embed it<br />
in-process. Other enhancements include some to performance: GlassFish will start within few seconds (less than 5) using a lazy loading mechanism for its module and sub systems.</p>
<p>There will be an upgrade for GlassFish in early 2008 which make it possible to use GlassFish on AIX operating system. GlassFish version 3 will support Java EE 6 profiles in addition to support for scripting languages like JRuby, PHP, JavaScript (server side). Support for these languages will be available through containers which are already implemented to some degree.</p>
<p>The next version will include improvements for high availability (JMS high availability, in particular) using HADB.</p>
<p>GlassFish has an auto update mechanism that allows administrators to create an update center with new or updated application server artifacts and update all server instance from that update center. This feature allows the update of application servers or install of new modules on the server. In next version of GlassFish, it will be possible to update deployed applications using this update center.</td>
</tr>
<tr>
<th>Tomcat</th>
<td>Continue along the same path, it is now a commodity software, no revolutions inline but to make it better, more stable and faster.</p>
<p>JSR-315 is next on the list, which is servlet 3.0.</td>
</tr>
<tr class="odd">
<th> JBoss</th>
<td>No information available.</td>
</tr>
<tr>
<th> Jetty</th>
<td>Jetty is still under active development and a number of new features are being added to fulfill today&#8217;s requirements of a servlet container, including <a title="link to Continuations information" href="http://docs.codehaus.org/display/JETTY/Continuations">Continuations</a> and Async SSL.</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h3 id="QuestionFive" class="section">Are there myths about this project that you&#8217;d like to challenge?</h3>
<p>This is the full response. For a summary of the response, click <a href="#QuestionFiveSummary">here</a>.</p>
<table class="help_table" border="0" width="700">
<thead>
<tr>
<th> Project</th>
<th> Full Response</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th> GlassFish</th>
<td>The most insidious myths about GlassFish were allayed by SUN&#8217;s release of the SpecJ benchmark reports. SpecJ reports debunking myths about GlassFish performance are worth looking at &#8211; <a title="Glassfish performance" href="http://www.spec.org/jAppServer2004/results/res2007q3/jAppServer2004-20070703-00073.html" target="_blank">here</a> and <a href="http://weblogs.java.net/blog/sdo/archive/2007/07/sjsas_91_glassf.html" target="_blank">here</a>.</td>
</tr>
<tr>
<th>Tomcat</th>
<td>There is one myth, and it was around for a long time: Tomcat is great for development, but should not be used from production. While this may persist in some companies, many have realized the cost benefit of Tomcat, and its maturity.</td>
</tr>
<tr class="odd">
<th> JBoss</th>
<td>Lack of support, and an inability to handle mission-critical projects. Neither of these are true.</td>
</tr>
<tr>
<th> Jetty</th>
<td>One is that Jetty can only be run as part of JBoss or Geronimo. This is not true, the only reason Jetty would need to run as part of JBoss or Geronimo is if EJB support is required.</p>
<p>Jetty doesn&#8217;t have support for JNDI or LDAP integration. This is not true, JettyPlus (http://jetty.mortbay.org/jetty5/plus/index.html) has support for JTA, JNDI, JAAS and Javamail.</td>
</tr>
</tbody>
</table>
<p><a href="#Questions">Return to the questions list</a>.</p>
<h2 id="Acknowledgments">Acknowledgments</h2>
<p>OpenLogic would like to thank the following members of the OpenLogic Expert Community for their contributions to this effort and invite the 	community to email us if they&#8217;d like to augment, correct, update, refute or dispute any of the information included herein.</p>
<table class="help_table" border="0" width="300">
<tbody>
<tr>
<th> Project</th>
<th> Contributer</th>
</tr>
<tr class="odd">
<td>Glassfish</td>
<td>Masoud Kalalil</td>
</tr>
<tr>
<td>JBoss</td>
<td>Felipe Leme</td>
</tr>
<tr class="odd">
<td>Jetty</td>
<td>Dmitri Colebatch</td>
</tr>
<tr>
<td>Tomcat</td>
<td>Filip Hanik</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://olex.openlogic.com/wazi/2008/application-server-comparison-matrix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Touchier Points of Determining the License of an Open Source Project</title>
		<link>http://olex.openlogic.com/wazi/2008/open-source-licensing/</link>
		<comments>http://olex.openlogic.com/wazi/2008/open-source-licensing/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 16:47:32 +0000</pubDate>
		<dc:creator>Kimberly McClintock</dc:creator>
				<category><![CDATA[Open Source Licensing]]></category>
		<category><![CDATA[AcegiSecurity]]></category>

		<guid isPermaLink="false">http://annasorchids.wordpress.com/?p=43</guid>
		<description><![CDATA[Figuring out the licensing terms of the open source gadget you'd like to use in in the widget you're prototyping (and hope to offer for sale next quarter) is not as difficult as, say, absorbing the details of evolutionary biology, but neither is it a guaranteed walk in the park. In other words, it's not dreadfully difficult, but often...]]></description>
			<content:encoded><![CDATA[<p>Figuring out the licensing terms of the open source gadget you&#8217;d like to use in the widget  you&#8217;re prototyping (and hope to offer for sale next quarter) is not as difficult as, say, absorbing the details of evolutionary biology, but neither is it a guaranteed walk in the park. In other words, it&#8217;s not dreadfully difficult, but often it&#8217;s not as easy as you might hope, either. As walks go, it&#8217;s closer to the legerdemain accomplished by a professional dog walker (picture all that threading and unthreading as the dogs fan out and weave grass patch to tree trunk). At its worst, it&#8217;s maybe just a bit more complex.</p>
<p>OpenLogic&#8217;s researchers work diligently to confirm the accuracy of licenses for the open source projects included in the OpenLogic Certified Library. They follow a process carefully crafted from many years experience, refined and sauced liberally with intuition, creativity and not-a-little tenacious detective work. As they&#8217;d be the first to tell you, this work is not for weenies and is best left to the professionals. However, if you insist on trying your hand, there are a few tricks they&#8217;re willing to share.</p>
<h3>Where to look</h3>
<p>About half the time, getting an initial sense of the licensing of an open source project is as simple as navigating to the project&#8217;s home page, and taking a gander at the menu options scrolled variously down the left or across the top. Much of the time, if  &#8216;License&#8217; is one of them, you can follow the link and, voila: license text.</p>
<p>Even this simplest case, though, is not always as simple as it seems. Our legal department issued the edict that &#8216;distribution is King&#8217; which means that, regardless of what the Web site claims, the license found in the distribution is the license the project is released under. To be certain you&#8217;re using the correct license, you always want to locate and download the distribution to determine a match. Later in this article, we talk about typical filenames given to license files, and where in the distribution they&#8217;re most often found.</p>
<p>Projects that use a hosting site such as SourceForge will have a summary page that lists basic project information. This information typically includes the license. AcegiSecurity, for instance. Their Web site (<a title="AcegiSecurity" href="http://www.acegisecurity.org" target="_blank">www.acegisecurity.org</a>) does not appear to include a link to the license information. But, notice in the upper right hand corner the link to Acegi on SourceForge:</p>
<p><a href="http://annasorchids.files.wordpress.com/2008/09/acegi_fp_circle.png"><img class="alignnone size-large wp-image-13" src="http://annasorchids.files.wordpress.com/2008/09/acegi_fp_circle.png?w=500" alt="" width="500" height="308" /></a></p>
<p>A couple more clicks, and you&#8217;ve arrived at Acegi&#8217;s summary page which reports the license as Apache 2.0. In this case, this information is correct, however, sometimes the SourceForge information is out-of-date.  If the project you&#8217;re researching will be modified and included in work for sale, you should confirm the license by checking the distribution.</p>
<p>If none of these paths result in license information, check the project documentation for a FAQ, for instance, the <a title="MozillaFAQ" href="http://www.mozilla.org/faq.html" target="_blank">Mozilla License FAQ</a>. If there is one, it will often have an intuitively titled entry covering license terms. If there&#8217;s no FAQ, search for &#8216;license&#8217; first on the home page, and then by using the site&#8217;s search function if there is one. If none of this turns up information, follow with a general Google search (project name + version + &#8216;license&#8217;)  and often the appropriate page on the project site will appear in the results.</p>
<h3>Why you shouldn&#8217;t stop there</h3>
<p>We mentioned quickly the possibility of downloading the distribution and confirming the licensing of a project by exploring it. You might think that, given all of this, downloading the distribution first would be the most reasonable approach. This is risky for a couple of reasons.  In many instances the Web site and the distribution will conflict for one reason or another. While legal says the &#8216;distro is king&#8217;, there are situations in which a conflict between the two licenses could cause problems. If, for example, the distribution contained a permissive license like Apache 2.0, but the Web site included text that indicated commercial use of their work required the Gnu Public License (GPL) and they hadn&#8217;t included a FLOSS Exception <a title="GPL FLOSS Exception" href="http://www.mysql.com/about/legal/licensing/foss-exception.html" target="_blank">like MySQL</a>.</p>
<p>Additionally, some enterprises restrict the download of distributions based on licenses like the Gnu Public License (GPL). As an engineer or manager researching the licensing issues around using a certain project, you&#8217;ve got a textbook chicken/egg situation: in order to be certain on the license, you need a peek at the distro, in order to get access to the distro, you need to know if the license is safe.</p>
<h3>What you&#8217;ll find</h3>
<p>If you&#8217;re a developer of more than a little experience, you won&#8217;t be surprised at the range of organizational strategies at work inside the distributions. The rest of us have experienced symptoms such as cold sweats and dizziness and, in one instance, actually fainting dead away when faced with Yet Another variation on the theme. You can pad the room and go on alone, or you can make use of some of these set ups our researchers have seen.</p>
<p>Sometimes you&#8217;ll find the license information at the top level and sometimes you&#8217;ll have to dig. Some of the locations we have found license files:</p>
<ul>
<li>Licenses directory</li>
<li>Copying directory</li>
<li>Legal directory</li>
<li>Docs directory</li>
<li>Lib directory</li>
<li>Project-name directory</li>
<li>License-name directory</li>
</ul>
<p>Some of the file names that may contain license information:</p>
<ul>
<li>License.txt</li>
<li>Copying.txt</li>
<li>Legal.txt</li>
<li>Readme.txt</li>
<li>Copyright.txt</li>
<li>Notices.txt</li>
<li>Specific License Name.txt</li>
</ul>
<h3>What you should do with what you find &amp; how</h3>
<p>So, say the Web site and the distribution of the project you&#8217;re interested in using both claim that the project uses Apache Software License version 1.1? Now you&#8217;ll need to eyeball the text and make sure that, in fact, they are the same license. It is not uncommon for projects to modify standard licenses to include custom text. Here, again, the Web site version and the distro version might differ. More likely, though, the Web site and distro will match, but the license will deviate from the standard version of the license. For examples of the standards, see the <a title="OSI" href="http://www.opensource.org/licenses" target="_blank">Open Source Initiative</a> site and the <a title="FSF" href="http://www.fsf.org/licensing/" target="_blank">Free Software Foundation</a>.</p>
<p>For short and relatively uncomplicated licenses such as <a title="BSD" href="https://olex.openlogic.com/license_classes/13" target="_blank">BSD</a> and <a title="MIT" href="https://olex.openlogic.com/license_classes/12" target="_blank">MIT</a>, an eyeballing to make sure that the licenses match the standard is probably good enough. But, for more complex licenses like the <a title="MPL" href="https://olex.openlogic.com/license_classes/6" target="_blank">MPL</a>, you&#8217;ll want to use a &#8216;diff tool&#8217; like <a title="KDiff3" href="http://kdiff3.sourceforge.net/" target="_blank">KDiff </a>to compare the text a project uses against the standard.</p>
<p>Other tools OpenLogic researchers leverage include Fossology and OhCount.</p>
<h3>Other tidbits</h3>
<p>You&#8217;ll also want to make sure to read carefully any text on the license page of the project Web site that <a title="FOP" href="http://xmlgraphics.apache.org/fop/license.html" target="_blank">specifies the versions</a> of the project to which a particular license or license version applies.</p>
<h3>And, finally</h3>
<p>OpenLogic researchers perform all of this analysis, and more, on every version of every project in the Certified Library. We&#8217;re happy to do the heavy lifting on research, but if you&#8217;ve got access to a legal team, you should run what we&#8217;ve found by them, too. We rely heavily on our legal team to interpret anything remotely questionable. Look for &#8216;Special Notes&#8217; on any package that qualifies as such.</p>
]]></content:encoded>
			<wfw:commentRss>http://olex.openlogic.com/wazi/2008/open-source-licensing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
