<?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>Bob on Medical Device Software &#187; Tools</title>
	<atom:link href="http://rdn-consulting.com/blog/category/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://rdn-consulting.com/blog</link>
	<description>Software Development and Biomedical Engineering</description>
	<lastBuildDate>Thu, 02 Sep 2010 22:41:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<cloud domain='rdn-consulting.com' port='80' path='/blog/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Guest Article: Static Analysis in Medical Device Software (Part 3) — Formal specifications</title>
		<link>http://rdn-consulting.com/blog/2010/03/07/guest-article-static-analysis-in-medical-device-software-part-3-formal-specifications/</link>
		<comments>http://rdn-consulting.com/blog/2010/03/07/guest-article-static-analysis-in-medical-device-software-part-3-formal-specifications/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 10:15:01 +0000</pubDate>
		<dc:creator>Pascal</dc:creator>
				<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Frama-C]]></category>
		<category><![CDATA[static analysis]]></category>

		<guid isPermaLink="false">http://rdn-consulting.com/blog/?p=362</guid>
		<description><![CDATA[The third and last guest post by Pascal Cuoq on software verification. This part is about formal specifications.]]></description>
			<content:encoded><![CDATA[<p><em><strong>Pascal Cuoq</strong> at <a href="http://frama-c.cea.fr/" target="_blank">Frama-C</a> continues </em><em>his discussion of static analysis for medical device software</em><em>. Also see <a href="http://rdn-consulting.com/blog/2009/05/15/guest-article-static-analysis-in-medical-device-software-part-1-the-traps-of-c/" target="_blank">Part 1</a> and <a href="http://rdn-consulting.com/blog/2009/06/04/guest-article-static-analysis-in-medical-device-software-part-2-methodology/" target="_blank">Part 2</a>.</em></p>
<p>In May 2009, I alluded to a three-part blog post on the general topic of static analysis in medical device software. The ideas I hope will emerge from this third and last part are:</p>
<ol>
<li>Formal specifications are good,</li>
<li>Partial formal specifications are underrated, and</li>
<li>One should never commit in advance to writing anything, however easy it seems it will be at the time.</li>
</ol>
<p>Going back to point one, a &#8220;functional specification&#8221; is a description of what a system/subsystem does. I really mostly intend to talk about formal versions of functional specifications.  This only means that the description is written in a machine-parsable language with an unambiguous grammar. The separation between formal and informal specifications is not always clear-cut, but this third blog entry will try to convince you of the advantages of specifications that can be handled mechanically.</p>
<p>Near the bottom of the V development cycle, &#8220;subsystem&#8221; often means software: a function, or a small tree of functions.  A functional specification is a description of what a function (respectively, a tree of functions) does and does not (the time they take to execute, for instance, is usually not considered part of the functional specification, although whether they terminate at all can belong in it. It is only a matter of convention). The <a href="http://en.wikipedia.org/wiki/Design_by_contract">Wikipedia page on &#8220;Design by Contract&#8221;</a> lists the following as making up a function contract, and while the term is loaded (it may evoke <a href="http://en.wikipedia.org/wiki/Eiffel_(programming_language)">Eiffel</a> or <a href="http://eprints.ucl.ac.uk/4991/1/4991.pdf">run-time assertion checking</a>, which are not specifically the topic here), the three bullet points below are a good categorization of what functional specifications are about:</p>
<ul>
<li>What does the function <em>expect</em>, what rules should the caller obey at the time of calling it?</li>
<li>What does the function <em>guarantee</em>, what is the caller allowed to expect from the function&#8217;s results?</li>
<li>What properties does the function <em>maintain</em>?</li>
</ul>
<p>I am tempted to point out that invariants maintained by a function can be encoded in terms of things that the function expects and things that the function guarantees, but this is exactly <a href="http://www.stanford.edu/~pgbovine/geek-behaviors.htm">the kind of hair-splitting that I am resolved to give up on</a>.</p>
<p>The English sentence &#8220;when called, this function may modify the global variables <code>G</code> and <code>H</code>, and no other&#8221; is almost unambiguous and rigorous — assuming that we leave aliasing out of the picture for the moment. Note that while technically something that the function <em>ensures</em> on return (it ensures that for any variable other than <code>G</code> or <code>H</code>, the value of the variable after the call is the same as its value before the call), this property can be thought of more intuitively as something that the function <em>maintains</em>.</p>
<p>The enthusiastic specifier may like the sentence &#8220;this function may modify the global variables <code>G</code> and <code>H</code>, and no other&#8221; so much that he may start copy-pasting the boilerplate part from one function to another. Why should he take the risk to introduce an ambiguity accidentally? Re-writing from memory may lead him to forget the &#8220;may&#8221; auxiliary, when he does not intend to guarantee that the function will overwrite <code>G</code> and <code>H</code> each time it is called. Like for contracts of a more legal nature, copy-pasting is the way to go. The boilerplate may also include jargon that make it impossible to understand by someone who is not from the field, or even from the company, whence the specifications originate. Ordinary words may be used with a precise domain-specific meaning. All reasons not to try to paraphrase and to reuse the specification template verbatim.</p>
<p>The hypothetical specifier may particularly appreciate that the specification above is not only carefully worded but also that a list of possibly modified globals is part of any wholesome function specification. He may — rightly, in my humble opinion — endeavor to use it for all the functions he has to specify near the end of the descending branch of the V cycle.  This is when he is ripe for the introduction of a formal syntax for functional specifications. According to Wikipedia, Robert Recorde <a href="http://en.wikipedia.org/wiki/Equals_sign">introduced the equal sign</a> &#8220;to auoide the tediouſe repetition of [...] woordes&#8221;, and the sentence above is a tedious repetition begging for a sign of its own to replace it. When the constructs of the formal language are well-chosen, the readability is improved, instead of being diminished.</p>
<p>A natural idea for to express the properties that make up a function contract is to use the same language as for the implementation. Being a programming language, it is suitably formal; the specifier, even if he is not the programmer, is presumably already familiar with it; and the compiler can transform these properties into executable code that checks that preconditions are properly assured by callers, and that the function does its own part by returning results that satisfy its postconditions. This choice can be recognized in run-time assertion checking, and in Test-Driven Development (in Test-Driven Development, unit tests and expected results are written before the function&#8217;s implementation and are considered part of the specification).</p>
<p>Still, the choice of the programming language as the specification language has the disadvantages of its advantages: it is a programming language; its constructs are optimized for translation to executable code, with intent of describing algorithms. For instance, the &#8220;no global variable other than <code>G</code> and <code>H</code> is modified&#8221; idiom, as expressed in C, is a horrible way to specify a C function.  Surely even the most rabid TDD proponent would not suggest it for a function that belongs in the same C file as a thousand global variable definitions.</p>
<p>A dedicated specification language has the freedom to offer exactly the constructs that make it pleasant to write specifications in it. This means directly including constructs for commonly recurring properties, but also providing the building blocks that make it possible to define new constructs for advanced specifications. So a good specification language has much in common with a programming language.</p>
<p>A dedicated specification language may for instance offer</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*@ assigns G, H */</span></pre></div></div>

<p>as a synonym for the boilerplate function specification above, and while this syntax may seem wordy and redundant to the seat-of-the-pants programmer, I hope to have convinced you that in the context of structured development, it fares well in the comparison with the alternatives. Functional specifications give static analyzers that understand them something to chew on, instead of having to limit themselves to the absence of run-time errors. This especially applies to <em>correct</em> static analyzers as emphasized in <a href="http://rdn-consulting.com/blog/2009/06/04/guest-article-static-analysis-in-medical-device-software-part-2-methodology/">part 2 of this oversize blog post</a>.</p>
<p>Third parties that contact us often are focused on using static analysis tools to do things they weren&#8217;t doing before. It is a natural expectation that a new tool will allow you to do something new, but a more accurate description of our activity is that we aim to allow to do the same specification and verification that people are already doing (for critical systems), better. In particular, people who discover tools such as Frama-C/Jessie or other analysis tools based on Hoare-Floyd precondition computations often think these tools are intended for verifying, and can only be useful for verifying, complete specifications.</p>
<p>A complete specification for a function is a specification where <em>all</em> the properties expected for the function&#8217;s behavior have been expressed formally as a contract. In some cases, there is only one function (in the mathematical sense) that satisfies the complete specification. This does not prevent several implementations to exist for this unique mathematical function. More importantly, it is nice to be able to check that the C function being verified is one of them!</p>
<p>Complete specifications can be long and tedious to write.  In the same way that a snippet of code can be shorter than the explanation of what it does and why it works, a complete specification can sometimes be longer than its implementation. And it is often pointed out that these specifications can be so large that once written, it would be too difficult to convince oneself that they do not themselves contain a bug.</p>
<p>But just because we are providing a language that would allow you to write complete specifications does not mean that you have to. It is perfectly fine to write minimal formal specifications accompanied with informal descriptions. To be useful, the tools we are proposing only need to do better than testing (the most widely used verification technique at this level).  Informal specifications traditionally used as the basis for tests are not complete either. And there may be bugs in both the informal specification or in its translation into test cases.</p>
<p>If anything, the current informal specifications leave out more details and contain more bugs, because they are not machine-checked in any way. The static analyzer can help find bugs in a specification in the same way that a good compiler&#8217;s sanity checks and warnings help avoid the stupidest bugs in a program.</p>
<p>In particular, because they are written in a dedicated specification language, formal specifications have better composition properties than, say, C functions. A bug in the specification of one function is usually impossible to overlook when trying to use said specification in the verification of the function&#8217;s callers. Taking an example from the tutorial/library (authored by our colleagues at the applied research institute Fraunhofer FIRST) <a href="http://www.first.fraunhofer.de/owx_download/acslbyexample420.pdf">ACSL by example</a>, the specification of the <code>max_element</code> function is quite long and a bug in this specification may be hard to detect. The function <code>max_element</code> finds the index of the maximum element in an array of integers. The formal version of this specification is complicated by the fact that it specifies that if there are several maximum elements, the function returns the first one.</p>
<p>Next in the document a function <code>max_seq</code> for returning the <em>value</em> of the maximum element in an array is defined. The implementation is straightforward:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> max_seq<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">int</span><span style="color: #339933;">*</span> p<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> n<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> p<span style="color: #009900;">&#91;</span>max_element<span style="color: #009900;">&#40;</span>p<span style="color: #339933;">,</span> n<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>The verification of <code>max_seq</code> builds on the specification for <code>max_element</code>. This provides additional confidence: the fact that <code>max_seq</code> was verified successfully makes a bug in the specification of <code>max_element</code> unlikely. Not only that, but if the (simpler, easier to trust) specification for <code>max_seq</code> were the intended high-level property to verify, it wouldn&#8217;t matter that the low-level specification for <code>max_element</code> was not exactly what the specifier intended (say, if there was an error in the specification of the index returned in case of ties): the complete system still has no choice but to behave as intended in the high-level specification. Unlike a compiler that lets you put together functions with incompatible expectations, the proof system always ensures that the contract used at the call point is the same as the contract that the called function was proved to satisfy.</p>
<p>And this concludes what I have to say on the subject of software verification. The first two parts were rather specific to C, and would only apply to embedded code in medical devices. This last part is more generic — in fact, it is easier to adapt the idea of functional specifications for static verification to high-level languages such as C# or Java than to C. Microsoft is pushing for the adoption of its own proposal in this respect, Code Contracts. Tools are provided for the static verification of these contracts in the premium variants of Visual Studio 2010. And this is a good time to link to <a href="http://bit.ly/9B2ggG">this video</a>. Functional specifications are a high-level and versatile tool, and can help with the informational aspects of medical software as well as for the embedded side of things. I would like to thank again my host Robert Nadler, my colleague Virgile Prevosto and department supervisor Fabrice Derepas for their remarks, and twitter user rgrig for the video link.</p>
]]></content:encoded>
			<wfw:commentRss>http://rdn-consulting.com/blog/2010/03/07/guest-article-static-analysis-in-medical-device-software-part-3-formal-specifications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Challenges of Developing Software for Medical Devices</title>
		<link>http://rdn-consulting.com/blog/2010/02/08/the-challenges-of-developing-software-for-medical-devices/</link>
		<comments>http://rdn-consulting.com/blog/2010/02/08/the-challenges-of-developing-software-for-medical-devices/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 04:34:37 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[FDA]]></category>
		<category><![CDATA[Medical Devices]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Methods-based verification]]></category>
		<category><![CDATA[static analysis]]></category>

		<guid isPermaLink="false">http://rdn-consulting.com/blog/?p=357</guid>
		<description><![CDATA[Developing Software for Medical Devices – Interview with SterlingTech gives a good overview of the challenges that especially face young medical device companies. In particular (my emphasis): Make sure that your company has a good solid Quality System as it applies to software development. Do not put a Quality System into place that you can [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.klocwork.com/blog/2010/01/developing-software-for-medical-devices-interview-with-sterlingtech/" target="_blank"><img class="alignright size-full wp-image-358" title="medical-device-software" src="http://rdn-consulting.com/blog/wp-content/uploads/2010/02/medical-device-software-200x300.jpg" alt="" width="200" height="300" /></a><a href="http://www.klocwork.com/blog/2010/01/developing-software-for-medical-devices-interview-with-sterlingtech/" target="_blank">Developing Software for Medical Devices – Interview with SterlingTech</a> gives a good overview of the challenges that especially face young medical device companies. In particular (my emphasis):</p>
<blockquote><p>Make sure that your company has a good solid Quality System as it applies to software development. <strong>Do not put a Quality System into place that you can not follow.</strong> This is the cause of most audit problems.</p></blockquote>
<p>I couldn&#8217;t have said it better myself, though I think that focusing on the FDA may distract you from why you&#8217;re creating software quality processes in the first place. The real purpose of having software design controls is to produce a high quality, user friendly, robust, and reliable system that meets the intended use of the device.  If your quality system does that, you won&#8217;t have to worry about FDA audits.</p>
<p>Since <a href="http://www.klocwork.com/" target="_blank">Klocwork</a> is a static analysis tool company I also want to point out a recent related article that&#8217;s worth reading &#8212; and trying to fully understand:</p>
<p><a href="http://cacm.acm.org/magazines/2010/2/69354-a-few-billion-lines-of-code-later/fulltext" target="_blank">A Few Billion Lines of Code Later: Using Static Analysis to Find Bugs in the Real World</a></p>
<p>Note the user comment by <a href="http://www2.research.att.com/~bs/" target="_blank">Bjarne Stroustrup</a>.</p>
<p>UPDATE (2/9/10): Here&#8217;s another good code analysis article:</p>
<p><a href="http://www.embedded.com/design/opensource/222700533" target="_blank">A Formal Methods-based verification  approach to medical device software analysis</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rdn-consulting.com/blog/2010/02/08/the-challenges-of-developing-software-for-medical-devices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2009 Ultimate Developer and Power Users Tool List for Windows</title>
		<link>http://rdn-consulting.com/blog/2009/09/02/2009-ultimate-developer-and-power-users-tool-list-for-windows/</link>
		<comments>http://rdn-consulting.com/blog/2009/09/02/2009-ultimate-developer-and-power-users-tool-list-for-windows/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 21:03:32 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Scott Hanselman]]></category>
		<category><![CDATA[Windows Tools]]></category>

		<guid isPermaLink="false">http://rdn-consulting.com/blog/?p=296</guid>
		<description><![CDATA[This is a great list. I linked to it in 2007, but somehow forget in 2008. Anyway, there&#8217;s probably at least one tool you may not have seen before that would be worth trying out. Scott Hanselman&#8217;s 2009 Ultimate Developer and Power Users Tool List for Windows Oh, and read through the comments. Everyone has [...]]]></description>
			<content:encoded><![CDATA[<p>This is a great list. I linked to it in 2007, but somehow forget in 2008.  Anyway, there&#8217;s probably at least one tool you may not have seen before that would be worth trying out.</p>
<h4><a rel="bookmark" href="http://www.hanselman.com/blog/ScottHanselmans2009UltimateDeveloperAndPowerUsersToolListForWindows.aspx" target="_blank">Scott Hanselman&#8217;s 2009 Ultimate Developer and Power Users Tool List for Windows</a></h4>
<p>Oh, and read through the comments. Everyone has their own favorites, and opinions.</p>
]]></content:encoded>
			<wfw:commentRss>http://rdn-consulting.com/blog/2009/09/02/2009-ultimate-developer-and-power-users-tool-list-for-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top 10 Concepts That Every Software Engineer Should Know</title>
		<link>http://rdn-consulting.com/blog/2008/07/29/top-10-concepts-that-every-software-engineer-should-know/</link>
		<comments>http://rdn-consulting.com/blog/2008/07/29/top-10-concepts-that-every-software-engineer-should-know/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 04:08:00 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rdn-consulting.com/blog/?p=176</guid>
		<description><![CDATA[Check out Top 10 Concepts That Every Software Engineer Should Know. The key point here is concepts. These are (arguably) part of the foundation that all good software engineers should have: Interfaces Conventions and Templates Layering Algorithmic Complexity Hashing Caching Concurrency Cloud Computing Security Relational Databases From a practical point of view, this still comes [...]]]></description>
			<content:encoded><![CDATA[<p>Check out <a href="http://www.readwriteweb.com/archives/top_10_concepts_that_every_software_engineer_should_know.php" target="_blank">Top 10 Concepts That Every Software Engineer Should Know</a>. The key point here is <strong>concepts</strong>. These are (arguably) part of the foundation that all good software engineers should have:</p>
<ol>
<blockquote>
<li>Interfaces</li>
<li>Conventions and Templates</li>
<li>Layering</li>
<li>Algorithmic Complexity</li>
<li>Hashing</li>
<li>Caching</li>
<li>Concurrency</li>
<li>Cloud Computing</li>
<li>Security</li>
<li>Relational Databases</li>
</blockquote>
</ol>
<p>From a practical point of view, this still comes down to a <a href="http://rdn-consulting.com/blog/2008/05/26/selecting-books-about-programming/" target="_blank">Selecting Books About Programming</a> issue. This list is just more focused on specific software technologies and techniques.</p>
<p>So many books, so little time&#8230;</p>
<p>UPDATE (7/30/08):</p>
<p>Here&#8217;s a career related post with some good advice: <a href="http://ryanfarley.com/blog/archive/2008/07/30/becoming-a-better-developer.aspx" target="_blank">Becoming a Better Developer</a>.  Learn a New Technology <em>Each Month</em> (#5) seems like a little much. I guess it depends on what your definition of &#8220;learn&#8221; is.</p>
]]></content:encoded>
			<wfw:commentRss>http://rdn-consulting.com/blog/2008/07/29/top-10-concepts-that-every-software-engineer-should-know/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>One Reason Why Linux Isn&#8217;t Mainstream: ./configure and make</title>
		<link>http://rdn-consulting.com/blog/2008/06/22/one-reason-why-linux-isnt-mainstream-configure-and-make/</link>
		<comments>http://rdn-consulting.com/blog/2008/06/22/one-reason-why-linux-isnt-mainstream-configure-and-make/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 00:13:59 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rdn-consulting.com/blog/2008/06/22/one-reason-why-linux-isnt-mainstream-configure-and-make/</guid>
		<description><![CDATA[Bare with me, I&#8217;ll get to the point of the title by the end of the post. I primarily develop for Microsoft platform targets, so I have a lot of familiarity with Microsoft development tools and operating systems. I also work with Linux-based systems, but mostly on the systems administration side: maintaining servers for R&#38;D [...]]]></description>
			<content:encoded><![CDATA[<p>Bare with me, I&#8217;ll get to the point of the title by the end of the post.</p>
<p>I primarily develop for Microsoft platform targets, so I have a lot of familiarity with  Microsoft development tools and operating systems.  I also work with Linux-based systems, but mostly on the systems administration side: maintaining servers for R&amp;D tools like <a href="http://trac.edgewall.org/" target="_blank">Trac</a> and <a href="http://subversion.tigris.org/" target="_blank">Subversion</a>.</p>
<p>I recently had some interest in trying to use <a href="http://www.mono-project.com/Main_Page" target="_blank">Mono</a> running on Linux as .NET development platform.</p>
<p>This  also allowed me to try Microsoft Virtual PC 2007 (<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=28c97d22-6eb8-4a09-a7f7-f6c7a1f000b5&amp;displaylang=en" target="_blank">SP1</a>)  on XP-SP3.  I went to a local .NET Developer&#8217;s Group (<a href="http://sddotnetdg.org/default.aspx" target="_blank" class="broken_link">here</a>)  meeting a couple of weeks ago on Virtual PC technology. Being a Microsoft group most of the discussion was on running Microsoft OS&#8217;s, but I saw the potential for using VPC running Linux for cross-platform development. My PC is an older Pentium D dual core without virtualization support, but it has 3Gig of RAM and plenty of hard disk space, so I thought I&#8217;d give it a try.</p>
<p><a href="http://www.ubuntu.com/getubuntu/download" target="_blank">Download</a> and installation of Ubuntu 8.04 (Hardy Heron) LTS Desktop on VPC-2007 is a little quirky, but there are many blog posts that detail what it takes to create a stable system: e.g. <a href="http://arcanecode.wordpress.com/2008/04/24/installing-ubuntu-804-under-microsoft-virtual-pc-2007/" target="_blank">Installing Ubuntu 8.04 under Microsoft Virtual PC 2007</a>.  Other system optimizations and fixes are easily found, particularly on the <a href="http://ubuntuforums.org/" target="_blank">Ubuntu Forums</a>.</p>
<p>OK, so now I have a fresh Linux installation and my goal is to install a Mono development environment. I started off by following the instructions in the Ubuntu section from the Mono <a href="http://www.mono-project.com/Other_Downloads" target="_blank">Other Downloads</a> page. The base Ubuntu Mono installation does not include development tools. From some reading I found that I also had to install the compilers:</p>
<p><code># apt-get install mono-mcs<br />
# apt-get install mono-gmcs</code></p>
<p>So now I move on to <a href="http://www.monodevelop.com/Download" target="_blank">MonoDevelop</a>. Here&#8217;s what the download page looks like:</p>
<p><a title="Monodevelop Download" href="http://www.monodevelop.com/Download" target="_blank"></a></p>
<p style="text-align: center"><a title="Monodevelop Download" href="http://www.monodevelop.com/Download" target="_blank"><img src="http://rdn-consulting.com/blog/wp-content/uploads/2008/06/monodevelop.JPG" alt="Monodevelop Download" /></a></p>
<p>Here&#8217;s my first grip: Why do I have to download and  install <strong>four</strong> other dependencies (not including the Mono compiler dependency that&#8217;s not even mentioned here)?</p>
<p>Second grip: All of the packages require unpacking, going to a shell prompt, changing to the unpack directory, and running the dreaded:</p>
<p><code>./configure<br />
make</code></p>
<p>Also notice the line: &#8220;Compiling the following order will <strong>yield the most favorable response</strong>.&#8221; What does that mean?</p>
<p>So I download Mono.Addins 0.3, unpack it, and run <code>./configure</code>. Here&#8217;s what I get:</p>
<p><code>configure: error: No al tool found. You need to install either the mono or .Net SDK.</code></p>
<p>This is as far as I&#8217;ve gotten. I&#8217;m sure there&#8217;s a solution for this. I know I either forgot to install something or made a stupid error somewhere along the way. Until I spend the time searching through forums and blogs to figure it out, I&#8217;m dead in the water.</p>
<p>I&#8217;m not trying to single out the Mono project here. If you&#8217;ve even tried to install a Unix application or library you inevitably end up in <strong>dependency hell</strong> &#8212; having to install a series of other packages that in turn require some other dependency to be installed.</p>
<p>So, to the point of this post:  There&#8217;s a lot of talk about why Linux, which is free, isn&#8217;t more widely adopted on the desktop. Ubuntu is a great product &#8212; the UI is intuitive, system administration isn&#8217;t any worse than Windows, and all the productivity tools you need are available.</p>
<p>In my opinion, one reason is <strong><code>./configure</code></strong> and <strong><code>make</code></strong>. If the open source community wants more developers for creating innovative software applications that will attract a wider user base, <em>these have to go</em>.  I&#8217;m sure that the experience I&#8217;ve described here has turned away many developers.</p>
<p>Microsoft has their problems, but they have the distinct advantage of being able to provide a complete set of proprietary software along with excellent development tools (Visual Studio with <a href="http://www.jetbrains.com/resharper/" target="_blank">ReSharper</a> is hard to beat).  Install them, and you&#8217;re creating and deploying applications instantly.</p>
<p>The first step to improving Linux adoption has to be making it easier for developers to simply get started.</p>
]]></content:encoded>
			<wfw:commentRss>http://rdn-consulting.com/blog/2008/06/22/one-reason-why-linux-isnt-mainstream-configure-and-make/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>2007 Ultimate Developer And Power Users Tool List For Windows</title>
		<link>http://rdn-consulting.com/blog/2007/08/28/2007-ultimate-developer-and-power-users-tool-list-for-windows/</link>
		<comments>http://rdn-consulting.com/blog/2007/08/28/2007-ultimate-developer-and-power-users-tool-list-for-windows/#comments</comments>
		<pubDate>Tue, 28 Aug 2007 20:09:45 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Power User]]></category>
		<category><![CDATA[Windows Tools]]></category>

		<guid isPermaLink="false">http://rdn-consulting.com/blog/2007/08/28/2007-ultimate-developer-and-power-users-tool-list-for-windows/</guid>
		<description><![CDATA[If you do any Windows development work and haven&#8217;t seen it yet, this list is a must have: Scott Hanselman&#8217;s 2007 Ultimate Developer And Power Users Tool List For Windows]]></description>
			<content:encoded><![CDATA[<p>If you do any Windows development work and haven&#8217;t seen it yet, this list is a must have:</p>
<p><a href="http://www.hanselman.com/tools" target="_blank">Scott Hanselman&#8217;s 2007 Ultimate Developer And Power Users Tool List For Windows</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rdn-consulting.com/blog/2007/08/28/2007-ultimate-developer-and-power-users-tool-list-for-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>