Newsgroup: comp.software-eng


Date: Thu, 27 Apr 2006 15:46:29 +0300
From: Diomidis Spinellis <dds@aueb.gr>
Organization: Athens University of Economics and Business
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060404 SeaMonkey/1.0.1
MIME-Version: 1.0
Newsgroups: comp.software-eng
Subject: Re: Evolving open source systems vs. customer requirements
References: <1146136889.540197.309840@i40g2000cwc.googlegroups.com>
In-Reply-To: <1146136889.540197.309840@i40g2000cwc.googlegroups.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Karim Ratib wrote:
> A recurring problem we face at work is that of keeping up-to-date with
> open source applications, while customizing them to fit our clients'
> needs.
> 
> Our software delivery strategy is simple: given a customer need, find
> an open source Web application (or a mix of several ones) that most
> closely fits the need, then customize it into something the customer
> can use. Typically, this involves several changes to the original
> codebase:
> 
> 1. Graphic design and usability changes
> 2. Database model changes
> 3. Business logic additions
> 4. Workflow and security additions
> 5. Data migration and pre-population scripts
> 
> So what happens is that we fork a new branch of development on the
> system to suit the evolving needs of the customer, fix the bugs, add
> new functions, etc. while the original open source system is evolving
> outside of us, assumingly towards a more desirable state of
> correctness, functionality and reliability.
> 
> The problem is that to offer support and maintenance to the customer,
> we need to be able to update the system to the latest external stable
> release, in addition to executing customer-specific change requests.
> This is an error-prone and rework-full process, and we usually end up
> freezing the customer system at some snapshot of the external one,
> instead of upgrading it, to focus only on the customer-specific
> changes. In effect, we return to a closed-source development model at
> that point.
> 
> Is anyone here practicing that sort of development? Anybody cares to
> share their experiences or offer pointers? I feel Brad Appleton's
> configuration management pattern languages
> (http://www.cmcrossroads.com/bradapp/acme/) might help, but they're a
> mouthful and very abstract :-)

- Try to minimize the customer-specific changes.
- Avoid source code changes, concentrating your changes to configuration 
files that don't change between versions.
- Submit source code changes back to the corresponding open source 
project.  Hopefully in the next release you won't have to integrate them 
again.
- Try to change as few files as possible.
- Use environment variables to customize the makefiles for your and your 
customer's environment
- Use a version control system, like CVS.  Put the open source version 
in a "vendor branch", and commit your changes from that point onward. 
When a new version comes out, create a new vendor branch and apply to it 
the changes from the previous vendor branch to your current state.
- Select open-source systems that are mature and stable.  If a stable 
branch is actively maintained with security patches adopt that one, 
instead of a the bleeding edge development branch.
- Use open-source systems that are easy to configure and upgrade.  For 
example, FreeBSD comes with a mergemaster script that will merge new 
configuration files with their locally-applied changes.

I've used a mixture of those approaches over the years, and the outcome 
sometimes beats the upgrade path from some closed-source offerings.

-- 
Diomidis Spinellis
Code Quality: The Open Source Perspective (Addison-Wesley 2006)
http://www.spinellis.gr/codequality?cse



Newsgroup comp.software-eng contents
Newsgroup list
Diomidis Spinellis home page

Creative Commons License Unless otherwise expressly stated, all original material on this page created by Diomidis Spinellis is licensed under a Creative Commons Attribution-Share Alike 3.0 Greece License.