<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Monolithic vs. Modular Software Reuse Libraries (Part I)</title>
	<atom:link href="http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/</link>
	<description>an unfiltered stream of data flow consciousness</description>
	<pubDate>Fri,  5 Sep 2008 20:16:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
		<item>
		<title>By: Jim Kring</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-11719</link>
		<dc:creator>Jim Kring</dc:creator>
		<pubDate>Wed, 11 Jun 2008 03:01:01 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-11719</guid>
		<description>[Update] I have just posted &lt;a href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/ " rel="nofollow"&gt;part II&lt;/a&gt; of this article, here:

&lt;a href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/" rel="nofollow"&gt;Monolithic vs. Modular Software Reuse Libraries (Part II)&lt;/a&gt;

I hope it was worth the wait.</description>
		<content:encoded><![CDATA[<p>[Update] I have just posted <a href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/ " rel="nofollow">part II</a> of this article, here:</p>
<p><a href="http://thinkinging.com/2008/06/09/monolithic-vs-modular-software-reuse-libraries-part-ii/" rel="nofollow">Monolithic vs. Modular Software Reuse Libraries (Part II)</a></p>
<p>I hope it was worth the wait.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: crelf</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5519</link>
		<dc:creator>crelf</dc:creator>
		<pubDate>Mon, 18 Feb 2008 17:20:02 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5519</guid>
		<description>Looking forward to the next installment :)</description>
		<content:encoded><![CDATA[<p>Looking forward to the next installment <img src='http://thinkinging.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jim Kring</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5264</link>
		<dc:creator>Jim Kring</dc:creator>
		<pubDate>Wed, 13 Feb 2008 22:49:56 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5264</guid>
		<description>Wow! I'm amazed and all the great feedback.  Software reuse seems to be a hot topic, near and dear to many of us.

Yes, this article may have oversimplified things.  The terms "library" and "monolithic" can certainly signify different things to different people and there are some gray areas.  By reuse library, I meant the whole body of an individual or organization's reusable software assets.  And, when I said monolithic, I meant something that is a single unit, somewhat inseparable from it's parts, tending to be large, and having few (if any external dependencies).

The thing that defines (to me) whether a reuse library is modular or monolithic has more to do with the release/deployment to the users.  If a user of the reuse library must (or typically does out of convenience) obtain it as a single unit, then it is being treated as monolithic reuse system (all or nothing).

Michael Ashe also brings up a good point, that there are temporal as well as spatial dimensions to the reuse model.  A modular library brings with it a slew of management issues as we move towards a system of interdependent modules of varying versions.  Of course, as Michael hints, a package management system can provide a great solution to these problems.  And, it's probably no mystery that's where I'm headed with the discussion ;)</description>
		<content:encoded><![CDATA[<p>Wow! I&#8217;m amazed and all the great feedback.  Software reuse seems to be a hot topic, near and dear to many of us.</p>
<p>Yes, this article may have oversimplified things.  The terms &#8220;library&#8221; and &#8220;monolithic&#8221; can certainly signify different things to different people and there are some gray areas.  By reuse library, I meant the whole body of an individual or organization&#8217;s reusable software assets.  And, when I said monolithic, I meant something that is a single unit, somewhat inseparable from it&#8217;s parts, tending to be large, and having few (if any external dependencies).</p>
<p>The thing that defines (to me) whether a reuse library is modular or monolithic has more to do with the release/deployment to the users.  If a user of the reuse library must (or typically does out of convenience) obtain it as a single unit, then it is being treated as monolithic reuse system (all or nothing).</p>
<p>Michael Ashe also brings up a good point, that there are temporal as well as spatial dimensions to the reuse model.  A modular library brings with it a slew of management issues as we move towards a system of interdependent modules of varying versions.  Of course, as Michael hints, a package management system can provide a great solution to these problems.  And, it&#8217;s probably no mystery that&#8217;s where I&#8217;m headed with the discussion <img src='http://thinkinging.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Ashe</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5253</link>
		<dc:creator>Michael Ashe</dc:creator>
		<pubDate>Wed, 13 Feb 2008 16:39:48 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5253</guid>
		<description>Interesting article Jim. How to phrase this?

There are two aspects or "domains" here, a spatial one (how the library fits together) and a temporal one (how versioning and compatibility is handled over time.  In the monolithic library the spatial and temporal aspects are linked, one to one. As soon you start breaking the monolith up into modules you enable the separation of the two domains, and what was once representable with a linear model becomes more of a sparse tree hierarchy in 2D. (or even 3D+, more on that later after your next article)

 I'm assuming your second article will get into this a lot more, as you alluded.  I don't view the two patterns, mono vs module, as mutually exclusive, rather as a base root (vi.lib, etc) with branches. I have several layers to my reuse library, vi.lib, OpenG, other OpenSource and finally my own VIs from over the years.  I've been fortunate to get the OpenG libraries and BSD open source code in general to be included in my latest customers project (by the way, thanks for the latest version of VIPM 1.1 !!).  We are soon to be in the process of comverting some of the code we have developed for this customer's project into internal OpenG style packages.

Looking forward to your part 2!</description>
		<content:encoded><![CDATA[<p>Interesting article Jim. How to phrase this?</p>
<p>There are two aspects or &#8220;domains&#8221; here, a spatial one (how the library fits together) and a temporal one (how versioning and compatibility is handled over time.  In the monolithic library the spatial and temporal aspects are linked, one to one. As soon you start breaking the monolith up into modules you enable the separation of the two domains, and what was once representable with a linear model becomes more of a sparse tree hierarchy in 2D. (or even 3D+, more on that later after your next article)</p>
<p> I&#8217;m assuming your second article will get into this a lot more, as you alluded.  I don&#8217;t view the two patterns, mono vs module, as mutually exclusive, rather as a base root (vi.lib, etc) with branches. I have several layers to my reuse library, vi.lib, OpenG, other OpenSource and finally my own VIs from over the years.  I&#8217;ve been fortunate to get the OpenG libraries and BSD open source code in general to be included in my latest customers project (by the way, thanks for the latest version of VIPM 1.1 !!).  We are soon to be in the process of comverting some of the code we have developed for this customer&#8217;s project into internal OpenG style packages.</p>
<p>Looking forward to your part 2!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: zen</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5252</link>
		<dc:creator>zen</dc:creator>
		<pubDate>Wed, 13 Feb 2008 15:42:42 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5252</guid>
		<description>I have a set of reusalbe sub VIs.  They are basically collection of freaquently used VIs and I draw a little nice icon picture.  I did not explicitly design those codes either to be monolici or modular.  I do not install into LabVIEW folder but keep my library in a folder. Especially, LabVIEW 8.x has Project Manager.  I usally add my folder to my projects and refer library VIs in it.  I am working by myself or with only few colleagues, and distribution does not really matter to me.

The biggest problem rises when I upgrading LabVIEW.  Since my VIs depends on vi.lib and properties of front panel objects, upgrading can often cause the broken arrow.  Currently I find and fix broken VIs manually.  I am interested in how other people handle the situation.</description>
		<content:encoded><![CDATA[<p>I have a set of reusalbe sub VIs.  They are basically collection of freaquently used VIs and I draw a little nice icon picture.  I did not explicitly design those codes either to be monolici or modular.  I do not install into LabVIEW folder but keep my library in a folder. Especially, LabVIEW 8.x has Project Manager.  I usally add my folder to my projects and refer library VIs in it.  I am working by myself or with only few colleagues, and distribution does not really matter to me.</p>
<p>The biggest problem rises when I upgrading LabVIEW.  Since my VIs depends on vi.lib and properties of front panel objects, upgrading can often cause the broken arrow.  Currently I find and fix broken VIs manually.  I am interested in how other people handle the situation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5249</link>
		<dc:creator>Shane</dc:creator>
		<pubDate>Wed, 13 Feb 2008 14:17:36 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5249</guid>
		<description>I think there's a huge grey area here.

You can have a library which is monolithic.  You can have a library made up of lots of (individually seen) monolithic parts with clearly defined interfaces.  Is that modular? There's a whole universe in between.  The definition of the interfaces is probable the most important aspect.  Anything which may change an interface MUST be hidden from the user, otherwise compatibility problems occur.

I think it depends on what scale we look at the code.  If we zoom in close enough, everything becomes monolithic at one stage or another.  The question is how finely grained should the monolithic components be?

Shane.</description>
		<content:encoded><![CDATA[<p>I think there&#8217;s a huge grey area here.</p>
<p>You can have a library which is monolithic.  You can have a library made up of lots of (individually seen) monolithic parts with clearly defined interfaces.  Is that modular? There&#8217;s a whole universe in between.  The definition of the interfaces is probable the most important aspect.  Anything which may change an interface MUST be hidden from the user, otherwise compatibility problems occur.</p>
<p>I think it depends on what scale we look at the code.  If we zoom in close enough, everything becomes monolithic at one stage or another.  The question is how finely grained should the monolithic components be?</p>
<p>Shane.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dave Grimshire</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5247</link>
		<dc:creator>Dave Grimshire</dc:creator>
		<pubDate>Wed, 13 Feb 2008 13:14:37 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5247</guid>
		<description>I'm confused. What do you call a library made of Labview, C, C++, Fortran and assembler code compared to a library made only of Labviw vi's? It seems to me the library of only Labview is monolithic. 
  Modular to me means the ability to call various rouitines from the same library. It wouldn't be modular if you made one call with different parameters.
  Anyone want to define monolithic or modular?

Dave G.</description>
		<content:encoded><![CDATA[<p>I&#8217;m confused. What do you call a library made of Labview, C, C++, Fortran and assembler code compared to a library made only of Labviw vi&#8217;s? It seems to me the library of only Labview is monolithic.<br />
  Modular to me means the ability to call various rouitines from the same library. It wouldn&#8217;t be modular if you made one call with different parameters.<br />
  Anyone want to define monolithic or modular?</p>
<p>Dave G.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rolf Kalbermatter</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5240</link>
		<dc:creator>Rolf Kalbermatter</dc:creator>
		<pubDate>Wed, 13 Feb 2008 09:52:41 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5240</guid>
		<description>I think the lines between monolithic and modular are not as clear as we all would like to make them be. Take the OpenG libraries. Some of them are almost monolithic in that they provide everything they need to operate themselves, others are more modular in that they need other libraries from the OpenG pool. But in fact I think they are all modular in that they are usually based in some ways on the "monolithic" vi.lib library.

And the same with Instrument drivers. They are inherently self contained in that they do not need other LabVIEW libraries other than vi.lib to work and could be considered monolithic but they of course depend on a lot of things such as VISA, NI-DAQ and friends, and built in LabVIEW functions such as TCP/IP etc.

The problem is not so much about monolithic versus modular but about clearly defined and very stable interfaces. VISA is such an interface and that makes the Instrument Drivers sort of monolithic in their own since they can simply assume that VISA will work the way it does if it is there at all.

Once you start to change interfaces you always end up in big troubles unless you use a fully monolithic approach. And that approach does not scale at all nor is it manageable in the long run. So the problem is not so much about not using modular libraries but about making interfaces that are stable and can be used in a backwards compatible way and that is one of the real challenges to software design, since monolithic code only works well for a small and limited scope.</description>
		<content:encoded><![CDATA[<p>I think the lines between monolithic and modular are not as clear as we all would like to make them be. Take the OpenG libraries. Some of them are almost monolithic in that they provide everything they need to operate themselves, others are more modular in that they need other libraries from the OpenG pool. But in fact I think they are all modular in that they are usually based in some ways on the &#8220;monolithic&#8221; vi.lib library.</p>
<p>And the same with Instrument drivers. They are inherently self contained in that they do not need other LabVIEW libraries other than vi.lib to work and could be considered monolithic but they of course depend on a lot of things such as VISA, NI-DAQ and friends, and built in LabVIEW functions such as TCP/IP etc.</p>
<p>The problem is not so much about monolithic versus modular but about clearly defined and very stable interfaces. VISA is such an interface and that makes the Instrument Drivers sort of monolithic in their own since they can simply assume that VISA will work the way it does if it is there at all.</p>
<p>Once you start to change interfaces you always end up in big troubles unless you use a fully monolithic approach. And that approach does not scale at all nor is it manageable in the long run. So the problem is not so much about not using modular libraries but about making interfaces that are stable and can be used in a backwards compatible way and that is one of the real challenges to software design, since monolithic code only works well for a small and limited scope.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Uwe Frenz</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5239</link>
		<dc:creator>Uwe Frenz</dc:creator>
		<pubDate>Wed, 13 Feb 2008 09:44:41 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5239</guid>
		<description>Jim,
finally I am a single LabVIEW developer here, so my experience is somehow luimited. Anyway, here are  my answers:
I have a LabVIEW code reuse system and I use it. If it's effective(ly), who knows?
It is a mixed system, consisting of some modules of dedicated functionality (drivers, system and UI-tools) and a huge mix of common VIs. Those are usually simply copied to a new project folder to start the new project. 
My biggest project contains &#62;800 subVIs, where about  400 are statically linked selfe-made VIs &#38; Ctls and a huge more which are dynamically called or started. So the biggest 'library' is the project core that contains about 250 modules. We used to have a second develloper, but our coding style was not that compatible so just about some 20-30 VIs of that person are still in the libs.
Yes, A am unsatisfied about the situation. Some problems are selfe made- mostly out of lacjk of experience. But there must be a better way of good code re-use practice with LabVIEW!
My actual plan of resolving some of my problem is a to clean up my lbs and -maybe create some new libs. And - if my bosses accept itz, try to move ione or the other to GOOP.

Greetings from Germany!
-- Uwe</description>
		<content:encoded><![CDATA[<p>Jim,<br />
finally I am a single LabVIEW developer here, so my experience is somehow luimited. Anyway, here are  my answers:<br />
I have a LabVIEW code reuse system and I use it. If it&#8217;s effective(ly), who knows?<br />
It is a mixed system, consisting of some modules of dedicated functionality (drivers, system and UI-tools) and a huge mix of common VIs. Those are usually simply copied to a new project folder to start the new project.<br />
My biggest project contains &gt;800 subVIs, where about  400 are statically linked selfe-made VIs &amp; Ctls and a huge more which are dynamically called or started. So the biggest &#8216;library&#8217; is the project core that contains about 250 modules. We used to have a second develloper, but our coding style was not that compatible so just about some 20-30 VIs of that person are still in the libs.<br />
Yes, A am unsatisfied about the situation. Some problems are selfe made- mostly out of lacjk of experience. But there must be a better way of good code re-use practice with LabVIEW!<br />
My actual plan of resolving some of my problem is a to clean up my lbs and -maybe create some new libs. And - if my bosses accept itz, try to move ione or the other to GOOP.</p>
<p>Greetings from Germany!<br />
&#8211; Uwe</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomi Maila</title>
		<link>http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5220</link>
		<dc:creator>Tomi Maila</dc:creator>
		<pubDate>Tue, 12 Feb 2008 22:09:27 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2008/02/11/monolithic-vs-modular-software-reuse-libraries-part-i/#comment-5220</guid>
		<description>In the article a monolithic library was specified to be a library where the library is released as a single entity. However when shortcomings of monolithic library are considered, they seem to be shortcomings of non-modular architecture and not shortcomings of monolithic library. 

I don't consider monolithic library to be a bad thing per se. Monolithic library can be built-up from modules. However the modularity is simply hidden from the user. This causes no limitations to the upgrade process of the monolithic library. However the monolithicy gives the user a guarantee that the modules of which the library is built will always work together and that the library is tested as entity prior to releasing a patch. 

I think the difference is a little bit same as with OS X and Linux. Linux is a modular architecture. Everyone can choose which packages they prefer and built a suitable Linux system of their own. With OS X everything comes in a monolithic package and it simply works. The maintenance of OS X is therefore much simpler from the user point of view, still not functionality or modularity needs to be sacrified. The problem only arises if very esoteric configurations is needed such that an old version of one module needs to be mixed with a new version of another module. Then monolithic library cannot cope with the situation.</description>
		<content:encoded><![CDATA[<p>In the article a monolithic library was specified to be a library where the library is released as a single entity. However when shortcomings of monolithic library are considered, they seem to be shortcomings of non-modular architecture and not shortcomings of monolithic library. </p>
<p>I don&#8217;t consider monolithic library to be a bad thing per se. Monolithic library can be built-up from modules. However the modularity is simply hidden from the user. This causes no limitations to the upgrade process of the monolithic library. However the monolithicy gives the user a guarantee that the modules of which the library is built will always work together and that the library is tested as entity prior to releasing a patch. </p>
<p>I think the difference is a little bit same as with OS X and Linux. Linux is a modular architecture. Everyone can choose which packages they prefer and built a suitable Linux system of their own. With OS X everything comes in a monolithic package and it simply works. The maintenance of OS X is therefore much simpler from the user point of view, still not functionality or modularity needs to be sacrified. The problem only arises if very esoteric configurations is needed such that an old version of one module needs to be mixed with a new version of another module. Then monolithic library cannot cope with the situation.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
