<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki.apidesign.org/skins/common/feed.css?116"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.apidesign.org/index.php?action=history&amp;feed=atom&amp;title=Modular_library</id>
		<title>Modular library - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.apidesign.org/index.php?action=history&amp;feed=atom&amp;title=Modular_library"/>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;action=history"/>
		<updated>2026-04-12T19:34:38Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.12.0rc1</generator>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=9995&amp;oldid=prev</id>
		<title>JaroslavTulach at 13:29, 7 May 2019</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=9995&amp;oldid=prev"/>
				<updated>2019-05-07T13:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 13:29, 7 May 2019&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;s&lt;/del&gt;. While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;es (or these days interfaces with [[DefaultMethods]])&lt;/ins&gt;. While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around than to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around than to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5762&amp;oldid=prev</id>
		<title>JaroslavTulach at 19:41, 12 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5762&amp;oldid=prev"/>
				<updated>2012-05-12T19:41:03Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:41, 12 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]s. While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|Many to Many]] and [[Vendor library|One to Many]] and [[Semantic versioning|Few to Many]] cases. However, without having [[experience]] with the [[Modular library|Many to Many]] case, they fallback to most obvious solution: Use of [[abstract class]]s. While extending [[abstract class]]es with new methods is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;then &lt;/del&gt;to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;than &lt;/ins&gt;to admit they are [[proximity|distant]]. Then the best thing to do is to accept the design style suitable for [[modular library]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5760&amp;oldid=prev</id>
		<title>JaroslavTulach at 19:37, 12 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5760&amp;oldid=prev"/>
				<updated>2012-05-12T19:37:21Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:37, 12 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;M-N&lt;/del&gt;]] and [[Vendor library|&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;1-N&lt;/del&gt;]] &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;case&lt;/del&gt;. However, without having [[experience]] with the [[Modular library|&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;M-N&lt;/del&gt;]] case, they fallback to most obvious solution: Use of &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''&lt;/del&gt;abstract &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classes''&lt;/del&gt;. While extending &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''&lt;/del&gt;abstract &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classes'' &lt;/del&gt;is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Many to Many&lt;/ins&gt;]] and [[Vendor library|&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;One to Many&lt;/ins&gt;]] &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;and [[Semantic versioning|Few to Many]] cases&lt;/ins&gt;. However, without having [[experience]] with the [[Modular library|&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Many to Many&lt;/ins&gt;]] case, they fallback to most obvious solution: Use of &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;abstract &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;class]]s&lt;/ins&gt;. While extending &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;abstract &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;class]]es with new methods &lt;/ins&gt;is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distant]]. Then &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;one has &lt;/del&gt;to accept the design style suitable for [[modular library]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distant]]. Then &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the best thing to do is &lt;/ins&gt;to accept the design style suitable for [[modular library]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5758&amp;oldid=prev</id>
		<title>JaroslavTulach at 19:25, 12 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5758&amp;oldid=prev"/>
				<updated>2012-05-12T19:25:02Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:25, 12 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;and even [[semantic versioning]] may be too restricting&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5736&amp;oldid=prev</id>
		<title>JaroslavTulach at 21:36, 8 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5736&amp;oldid=prev"/>
				<updated>2012-05-08T21:36:50Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:36, 8 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use of ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use of ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;distinct&lt;/del&gt;]]. Then one has to accept design style suitable for [[modular library]]. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library|M-N]] style all the time?&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;distant&lt;/ins&gt;]]. Then one has to accept &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/ins&gt;design style suitable for [[modular library]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5735&amp;oldid=prev</id>
		<title>JaroslavTulach at 21:34, 8 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5735&amp;oldid=prev"/>
				<updated>2012-05-08T21:34:24Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:34, 8 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proximity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;of &lt;/ins&gt;''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular library]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library|M-N]] style all the time?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular library]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library|M-N]] style all the time?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5733&amp;oldid=prev</id>
		<title>JaroslavTulach at 21:31, 8 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5733&amp;oldid=prev"/>
				<updated>2012-05-08T21:31:40Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:31, 8 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In some cases one needs to have multiple [[ProviderAPI|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;proxymity&lt;/del&gt;]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;proximity&lt;/ins&gt;]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library|M-N]] and [[Vendor library|1-N]] case. However, without having [[experience]] with the [[Modular library|M-N]] case, they fallback to most obvious solution: Use ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate API for clients and providers]] (taken to extreme, while demonstrating all benefits, in the extensible [[visitor]] case).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;libraries&lt;/del&gt;]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library]] style all the time?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then one has to accept design style suitable for [[modular &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;library&lt;/ins&gt;]]. As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;|M-N&lt;/ins&gt;]] style all the time?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5732&amp;oldid=prev</id>
		<title>JaroslavTulach at 21:29, 8 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5732&amp;oldid=prev"/>
				<updated>2012-05-08T21:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:29, 8 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In some cases one needs to have multiple [[&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ProviderSPI&lt;/del&gt;|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In some cases one needs to have multiple [[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ProviderAPI&lt;/ins&gt;|different implementations]] of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment, they may not be written against the same version of the [[library]] at all. The [[proximity]] between the [[API]] and the implementations is very weak. As a result trying to mimic the principles used while designing [[vendor library]] will not work. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proxymity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In case of [[modular library]] the [[proximity]] of the [[API]] designer and the implementers is almost the same as the [[proxymity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This requires the [[API]] vendor to prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5727&amp;oldid=prev</id>
		<title>JaroslavTulach at 21:26, 8 May 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5727&amp;oldid=prev"/>
				<updated>2012-05-08T21:26:17Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:26, 8 May 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;contrast &lt;/del&gt;to [[&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;simple library&lt;/del&gt;]], the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;modular &lt;/del&gt;[[library]] is &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ready for being extended&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;It contains &lt;/del&gt;[[API]]&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, but often it &lt;/del&gt;requires &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;(or allows) someone else &lt;/del&gt;to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;provide useful implementation&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Classical example can be {{JDK&lt;/del&gt;|&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;javax/xml/parsers&lt;/del&gt;|&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;DocumentBuilderFactory}} which just defines &lt;/del&gt;the [[API]] &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;but allows others &lt;/del&gt;to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;plug &lt;/del&gt;in &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;various implementations of &lt;/del&gt;the [[&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;XML&lt;/del&gt;]] &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;parsers (and requires at least &lt;/del&gt;one &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;provider &lt;/del&gt;to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;be present)&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;some cases one needs &lt;/ins&gt;to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;have multiple &lt;/ins&gt;[[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ProviderSPI|different implementations&lt;/ins&gt;]] &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;of some [[API]] being used at once. These implementations are being written in [[distributed development]] environment&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;they may not be written against the same version of &lt;/ins&gt;the [[library]] &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;at all. The [[proximity]] between the [[API]] and the implementations &lt;/ins&gt;is &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;very weak&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;As a result trying to mimic the principles used while designing [[vendor library]] will not work. &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;In case of [[modular library]] the [[proximity]] of the &lt;/ins&gt;[[API]] &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;designer and the implementers is almost the same as the [[proxymity]] of the [[API]] designer and the [[ClientAPI|users of the API]]. This &lt;/ins&gt;requires &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the [[API]] vendor &lt;/ins&gt;to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;prepare [[evolution]] plan for both - the [[ClientAPI]] as well as [[ProviderAPI]]&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;As my discussion at [[OSGiCon]] revealed, people facing this situation realize the difference between the [[Modular library&lt;/ins&gt;|&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;M-N]] and [[Vendor library&lt;/ins&gt;|&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;1-N]] case. However, without having [[experience]] with &lt;/ins&gt;the [[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Modular library|M-N]] case, they fallback to most obvious solution: Use ''abstract classes''. While extending ''abstract classes'' is definitely more compatible than [[final interface|extending interfaces]], it can never be 100% safe. The safest solution is to [[APIvsSPI|separate &lt;/ins&gt;API &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;for clients and providers&lt;/ins&gt;]] &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;(taken &lt;/ins&gt;to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;extreme, while demonstrating all benefits, &lt;/ins&gt;in the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;extensible &lt;/ins&gt;[[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;visitor&lt;/ins&gt;]] &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;case).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Weak [[proximity]] changes everything. An [[API]] designer can simplify its life by claiming all [[ProviderAPI|providers]] are [[proximity|close]]. However sometimes there is just no way around then to admit they are [[proximity|distinct]]. Then &lt;/ins&gt;one &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;has &lt;/ins&gt;to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;accept design style suitable for [[modular libraries]]&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;As it is clear that the [[modular library|M-N]] case is a superset of [[vendor library|1-N]] case, I'd like to ask: Why not use the [[modular library]] style all the time?&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5665&amp;oldid=prev</id>
		<title>JaroslavTulach at 22:19, 24 April 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=Modular_library&amp;diff=5665&amp;oldid=prev"/>
				<updated>2012-04-24T22:19:11Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 22:19, 24 April 2012&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In contrast to [[simple library]], the modular [[library]] is ready for being extended. It contains [[API]], but often it requires (or allows) someone else to provide useful implementation. Classical example can be javax&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;.&lt;/del&gt;xml&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;.&lt;/del&gt;DocumentBuilderFactory which just defines the [[API]] but allows others to plug in various implementations of the [[XML]] parsers (and requires at least one provider to be present).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In contrast to [[simple library]], the modular [[library]] is ready for being extended. It contains [[API]], but often it requires (or allows) someone else to provide useful implementation. Classical example can be &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;{{JDK|&lt;/ins&gt;javax&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;xml&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;/parsers|&lt;/ins&gt;DocumentBuilderFactory&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;}} &lt;/ins&gt;which just defines the [[API]] but allows others to plug in various implementations of the [[XML]] parsers (and requires at least one provider to be present).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	</feed>