I am currently in process of writing a software application. In this application, I use another software project which is licensed by GNU GPL. I have widely modified the GNU licensed component and tailored it to fit my needs.

But I do not want my software application to be released under GNU GPL license, I would rather want it to be licensed by BSD. My question is that how is it possible?

The GNU website says something about an "arms length" but it is still very unclear to be that what they mean by the arms length. Is it possible if I use the modified component as a JAR in the main project?

  • 1
  • @gnat : His question deals with license texts and textfiles in practice. Jun 29, 2015 at 14:11
  • As you mention JAR in your question, can you tell us which GPL component you want to use? In Java, there are two versions of the GPL license in use, one of which gives you more freedom to do what you want, and we would need to check exactly which variant of the license is used. Jun 30, 2015 at 11:38
  • no its without the classpath exception Jun 30, 2015 at 13:46

1 Answer 1


If you absolutely must use the GPL code but want to keep your project BSD licensed, you can:

  • rewrite the GPL code base or use a different option if available
  • write binary wrappers around GPL code (something simple like stdin/stdout works)

By using a wrapper that operates on streams (or any form of inter process communication), you have the ability to configure any program that can perform the same task and you don't need any interface files from the original code. This would let you start off with a BSD licensed wrapper around the GPL code (creating a GPL derivative binary), but later shift to a more permissive code base if you have the time to write a replacement or happen to find a more permissive replacement (softwarerecs.stackexchange.com) and eventually include the permissive code replacement directly to avoid the overhead of the wrapper.

  • I have to use the GPL code, I can rewrite it as it will take me a year and that is not the main focus of my work either! I have to think how can I write a binary wrapper around it, as I am using alot of classes from that code and further doing work on them. So there is no option for me? Jun 30, 2015 at 9:32
  • I am using the class in the component through out my code Jun 30, 2015 at 9:42
  • @HamdaBinteAjmal yeah, you can't do that. Anywhere you use the class, you need replace it with a call to a binary wrapper with whatever data you need passed on the command line, stdin, environment variables etc... then implement that chunk of your binary wrapper and remove the offending code... rinse and repeat till GPL-ectome is complete. Jun 30, 2015 at 10:43

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