Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

My company has problem A, lets say, face recognition. We find a nice algorithm like this one. We implement it and go home happy. Problem is, once home I cant sleep because I wonder if we should make the implementation public. After all the algorithm was public. Someone did intensive research and did half ( or more ) the work for us. I feel like we should help back and make our efforts public too. But then our commercial product would not be very commercial, just image our banner:

Hey customer please buy our grunt master 6000 software, its only $1,000.00 ! Oh by and by the way, you can download the main algorithms here for free !

Is there some sort of licence of derivative work from these academic research papers ? Is it my duty to make my implementations public ? Or is it up to me ? Can I make money from the algorithm ?

share|improve this question

migrated from Sep 4 '11 at 8:36

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

up vote 4 down vote accepted

In the vast majority of occasions, publishing code can even be positive towards your company. The people who are willing to buy your software will do so anyway, because they are simply not programmers and do not care about algorithms, but results.

If you are worried about competitors, then you may need to rethink about publishing. However, since you say that this is just a simple implementation, i don't really see a clear benefit for possible competitors, unless you thought of something really innovative.

Generally, you don't need to publicize your own work if you don't want to, but if you are thinking of doing it, mostly judge based on competition and not your clients.

share|improve this answer

Alanboy, I am afraid you are mixing two totally distinct things.

One thing is to implement a known algorithm for your company, while hiding the fact it was researched by another entity (that does not seem to be the case). This may be in some contexts be ethically reprehensible.

Other totally distinct thing is to make the code you created public just because it was based on research done by another entity. I don't see any valid reason why should you publish your code. Were we programmers publishing all the code we've wrote that used algorithms read from books or the internet, and virtually every single line of our code would have to be made public! 7/9 of windows would have to be open source!

I'll now turn the question around. Would you, as a face recognition researcher that publishes his results to the public, expect that any person alive that implements the algorithm to have to turn it public? I don't think so.

It is important to discern what is at stake here. Are you in any way effectively ripping off the author of the algorithm? It does not seem so.

I therefore see no good reason for publishing your code implementation. What you could, and should do, is to reference the name (and possibility, the author) of the algorithm in your application or its documentation.

share|improve this answer

The whole purpose of scientific publication is to disseminate new ideas so that others can benefit from them, either by using the ideas for practical purposes or as a basis for further research. Certainly the researchers would be happy to know if you are using their ideas, and if you make improvements on the algorithm it would be appreciated if you published them (perhaps in collaboration with the original researchers), but there is absolutely no obligation to publish your code. It would also be nice to mention the algorithm publically, perhaps in your documentation or even a workshop presentation.

However, in the modern world the ideals of scientific progress are not always appreciated, and there is the unfortunate possibility that the research institute has patented the algorithm. The legal implications of that are the responsibility of your company managers and lawyers.

share|improve this answer
Indeed. You do not need to publish your implementation of Quicksort, Dijkstra, A*, Branch and bound search or whatever. Those "published algorithms" (and many others) are implemented a lot of proprietary software and the code of the implementation is not released. – ysdx Sep 4 '11 at 22:54

It is not an "all or nothing" proposition. Perhaps it would be easier to convince management if you release the code under a license which does not allow for commercial use. This does not prevent you from using your own code any way you like. A public implementation for acadmic use only is pesky for many users, but might be an easier sale still with management.

There is certainly no obligation to publish just because you used someone's research paper to guide your implementation. I like how you feel that you should contribute back, though. If the code is not part of your company's key IPR, there are also actual benefits from making it open source, though (provided you can reach users who are able and willing to help improve the code).

Your valuation of the research paper's share of the product's cost is way inflated, by the way. The typical bean counter will calculate no more than approximately 30% of the commercial product's value from the actual code (so that's 15% tops from the research effort, if your 50% estimate is correct; but I speculate it is also much too high); the rest is the productization, packaging, support, marketing, sales, administrative overhead, margin, etc.

"Margin" means "profit" and is quite okay, legally and morally. If you attempt to make an unreasonable profit, you risk creating a niche for a hungrier competitor who charges less. So at least according to the theory of supply and demand.

share|improve this answer

Even should the algorithm be published, your company has no obligation to supply it with UI and other functions. So it would not affect the sales of your program.

share|improve this answer

Here's some problems that could happen in these situations:

  1. Since you used someone elses work for it, you don't know how much effort there is to create it again
  2. If your product becomes very popular, and everyone in the world absolutely needs it, it's based on work amount estimates that are not known
  3. once your competitors try to do the same, it fails => they cannot help you with handling the amount of customers
  4. then you'll have big problem because serving the whole world from your small company is pretty much impossible
  5. You'll receive large amounts of money as a substitute to limit the amount of damage your actions have caused -- and then you need to work very hard or the world is going to suffer
  6. but then you need to figure out how to create improvements to the core work, and it's going to fail if the work amount you rely on is too large

Of course the competition sometimes also makes this same mistake, and gets better product out in very short time; and the people who could actually handle the amount of customers is losing their position.

Making the algorithm public just invites other people to do the same mistake.

On the other hand, some stuff is absolutely impossible to do at all without large amount of previous effort. Some stuff that could be so much more useful than what stuff already exists.

Being very successful is not very nice thing. That's why the work amount usually restricts the scope of how widely the products can be distributed. You should aim to take over the world obviously, but try to rely on as little external work as possible.

share|improve this answer

Your Answer


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

Not the answer you're looking for? Browse other questions tagged or ask your own question.