Over the past couple weeks I have gotten a lot of help from StackOverflow users on a project, and rather than keep the finished product to myself I wanted to share it unencumbered by licenses, but don't want there to be so much legwork during installation that users shy away from trying it.

I am about to post it to Github and choosing public domain licensing. I would like to to be super simple for users to make use of and just FTP it up and go.

That being said, do I need to make sure I remove things like the JQuery file, and other GPL / MIT licensed dependencies that I didn't write but that my code depends on? I haven't removed any copyright notices from the other code and all of it open source, it would just be nice if users could download everything at once while of course not trying to represent that I am the license holder of the dependencies.

Inside my files are also some snippets, do those have to be externalized with installation instructions or can it be posted as is? Here is an example, my nav.php file is 115 lines long and I have these at the top:

<script type="text/javascript" src="./js/ddaccordion.js">
* Accordion Content script- (c) Dynamic Drive DHTML code library (www.dynamicdrive.com)
* Visit http://www.dynamicDrive.com for hundreds of DHTML scripts
* This notice must stay intact for legal use
<link href="css/admin.css" rel="stylesheet">
<script type="text/javascript">
    headerclass: "submenuheader", //Shared CSS class name of headers group
    contentclass: "submenu", //Shared CSS class name of contents group
    revealtype: "click", //Reveal content when user clicks or onmouseover the header? Valid value: "click", "clickgo", or "mouseover"
    mouseoverdelay: 200, //if revealtype="mouseover", set delay in milliseconds before header expands onMouseover
    collapseprev: false, //Collapse previous content (so only one open at any time)? true/false 
    defaultexpanded: [], //index of content(s) open by default [index1, index2, etc] [] denotes no content
    onemustopen: false, //Specify whether at least one header should be open always (so never all headers closed)
    animatedefault: false, //Should contents open by default be animated into view?
    persiststate: true, //persist state of opened contents within browser session?
    toggleclass: ["", ""], //Two CSS classes to be applied to the header when it's collapsed and expanded, respectively ["class1", "class2"]
    togglehtml: ["suffix", "<img src='./images/plus.gif' class='statusicon' />", "<img src='./images/minus.gif' class='statusicon' />"], //Additional HTML added to the header when it's collapsed and expanded, respectively  ["position", "html1", "html2"] (see docs)
    animatespeed: "fast", //speed of animation: integer in milliseconds (ie: 200), or keywords "fast", "normal", or "slow"
    oninit:function(headers, expandedindices){ //custom code to run when headers have initalized
        //do nothing
    onopenclose:function(header, index, state, isuseractivated){ //custom code to run whenever a header is opened or closed
        //do nothing
  • 4
    You might as well attach a license to your code. This gives people permission to use it; Public Domain's legal status is murky at best. Phew! Now that you have a license, just make sure it is compatible with all of the libraries you're using. May 1 '14 at 23:51
  • 2
    I agree with Robert, I wanted to go the Public Domain route but through help from others, it is difficult to impossible since there are so many countries with so many rules with access to the internet. going with a MIT or other license is cleaner. Instead of "it is everyones and you can do with it what you will" then "it is mine but you can do what you want with it and you dont have to tell me"
    – old_timer
    May 2 '14 at 2:30
  • For reference: legally, at least in the US, there's no such thing as "public domain licensing". Putting something in the public domain (where legal) means giving up ownership and/or abandoning copyright. And only the owner of a copyrighted work can control its distribution. (Which is what licensing does.) </pedantry>
    – cHao
    May 2 '14 at 5:40

I'm not a lawyer, but if your project depends on a single thing that's licensed under GPL then your entire project must be licensed under GPL. At this point, it doesn't really matter license-wise if you keep the licensed open-source files in the repo.

That was the legal side(again - I'm not a lawyer). From the technical side, you should try using a dependency manager - or at least Git Submodules - for those files. These will allow you to avoid storing those external files in your repository, make upgrading them to newer versions easier, and gives you control over which versions to use in your project. Those things introduce the work overhead of the initial configuration, but once you do that it's super easy to use them for adding more dependencies, so if you have many dependency it's worth the extra work of setting it up.

  • If your project depends directly on code that's licensed under the GPL (either included from source, or linked in statically), and the license doesn't provide an exception for your type of use, then your project is a derivative work and must be GPLed. Whether dynamic linking qualifies is debatable. (RMS thinks it should. I think he's a wingnut.)
    – cHao
    May 2 '14 at 5:23
  • 2
    Dynamic linking qualifies in GPL but not in LGPL. The project's author chooses between the two and decides if he wants to exempt dynamic linking from the copyleft or not.
    – Idan Arye
    May 2 '14 at 10:21
  • 1
    I'd get a kick out of seeing anyone try to argue in court (with a straight face) that a program (a) containing none of the copyrighted code, that merely uses a mechanism built into every modern OS to "run" whatever library with the same name is on the end user's machine, which (b) might not even be a covered work -- and (c) even if it is, would be licensed under the GPL for unlimited use -- is somehow infringing on copyright.
    – cHao
    May 2 '14 at 12:25
  • @cHao: There is a big difference between binary and source. GPL only applies to source if it directly contains covered parts. But it applies to binary that is linked to the GPL code. Since the process of linking uses information from the library being linked to, arguing that the linked binary is a derived work seems possible.
    – Jan Hudec
    Jul 31 '14 at 8:02
  • @Jan: The information used is the same information any library provides. If i write a program that links dynamically against my own reimplementation of some GPL library's API, same names and all, it'll link against the GPLed version if you have that instead. How can you prove i didn't do exactly that?
    – cHao
    Jul 31 '14 at 8:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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