Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

My company has been licensing a commercial application to fulfill our need for the past few years. The programmers (myself included) have been modifying (with permission) the software to better suit our needs. Now we're talking about replacing the licensed software with an in-house solution we create ourselves. We want to be fair (and legal) in our dealings, but we've all been influenced by the ideas we've had while hacking.

I'm sure this isn't the first time this has happened, and I wondered if there are common practices or development patterns which are followed in such situations?

share|improve this question

migrated from stackoverflow.com Jun 8 '11 at 13:16

This question came from our site for professional and enthusiast programmers.

1  
I don't think the answers on here are right. If you aren't going to sell, license, or distribute the software outside your company, you can do anything you want. –  Richard DesLonde Jun 8 '11 at 17:01

4 Answers 4

For legal issues here, consult a lawyer specializing in software development. You're talking about finding the legal line you cannot cross, and that should always be done by consulting a lawyer in your jurisdiction with the appropriate specialty. Only in cases of clear legality or clear illegality is the opinion of random people on the Internet useful, but remember that they make mistakes and some are plain wrong or malicious, and that they aren't giving actual legal advice.

For fairness, I'd have to know more about the license you signed and the vendor to even venture a guess. You could talk to the vendor, I suppose.

Finally, buying is almost always cheaper than building. If you're planning to build your own whatever for some sort of strategic purpose, fine. If it's just to reduce costs, forget it. It won't, assuming you value developer time at any vaguely reasonable rate.

share|improve this answer

Really depends on the type of software. For example if the software provides an implementation of a proprietary algorithm for fingerprint recognition, encryption etc. you should definitely talk to a lawyer.

If on the other hand it provides only generic functionality like a website forum etc. Then you are typically free to write your own as long as you are not using the other software's source as a reference in any way. It goes without saying that you cannot copy/paste ANYTHING. And you should still talk with a lawyer. After all, if the other company thinks you lifted their code, they could very well go after you regardless of whether or not you did anything illegal.

share|improve this answer

When you were giving the permission to use the commercial application's source code, this is usually associated with a contract that establishes what can and can't be done with it.

If you don't have a contract or the contract is not clear about your limitations, I would definitely consult a lawyer. The company that owns the software could still try to do something about it, because they will probably lose a support contract from your company and they will resent this.

share|improve this answer

We tend to place something between a third party component an our software, normally called an adapter or façade. This thing would implement an interface which our software is interested in and talk to the third party component. This allows you to develop another thing that implements the same interface and when you are ready you SHOULD be able to swap the old one out.

public class UberCoolThirdPartyThing
{
    public UberCoolResponse DoSomethingUberCool(UberCoolStuff stuff)
    { ... }
}

public interface ICoolThing
{
    ICoolResponse DoSomethingCool(CoolStuff stuff);
}

public class UberCoolThirdPartyThingFacade : ICoolThing
{
    public ICoolResponse DoSomethingCool(CoolStuff stuff)
    {
        UberCoolStuff thirdPartyStuff = MapCoolStuff(stuff);

        UberCoolResponse response = new UberCoolThirdPartyThing().DoSomethingUberCool(thirdPartyStuff );

        return MapUberCoolResponse(response);
    }
}

public class CoolThing : ICoolThing
{
    public ICoolResponse DoSomethingCool(CoolStuff stuff)
    {
        //Cool implementation
    }
}

Hope I'm not teaching you to suck eggs.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.