9 ms·
It seems like the problem here stems from the project owner taking the source code as-is and essentially re-licensing it as proprietary, which is a big no-no.
by julianlam 6y ago
It seems like the problem here stems from the project owner taking the source code as-is and essentially re-licensing it as proprietary, which is a big no-no.
For context, when NodeBB faced this possibility, we simply contacted every single contributor and asked nicely if they'd assign over their ownership of their contribution to us (note the use of the word "assign", not "license", a license is revocable, an assignment is not).
Future contributions by new parties required signing of the same Contributor Assignment Agreement.
Here's the CAA if you're interested in reading legalese: https://cla-assistant.io/NodeBB/NodeBB https://cla-assistant.io/NodeBB/NodeBB
All in all it took us under a week to secure the assignments, and any who did not sign we simply rewrote their lines of code, or we would have, but everybody signed.
The bar of effort to clear is so low to avoid this kind of controversy!
Reason we went this route: we wanted the flexibility to deliver a proprietary version of NodeBB for those clients that needed it. We get asked often whether there's a difference between the proprietary version and the open source version, but there isn't, it's just for legal reasons.
- avmich 6y ago> and any who did not sign we simply rewrote their lines of code, or we would have Why wouldn't you rewrite all lines of code instead?
- gilrain 6y agoYou seem to be asking "why not do something harder instead of something easier." If that's not what you mean, try rephrasing? If it is what you mean, the answer should be obvious.
- avmich 6y agoNo, this is not what I meant. Alternatively, I'd consider full rewrite as potentially an easier action than untangling individual rights. Imagine a person A worked on a project together with persons B, C..., and over time they all have dependence on each other code. If B, C etc. at some moment changed licensing of their code, but person A didn't, 1) A's work will become at least partially meaningless, as it depends on B, C... work 2) B, C... would be in violation of previous agreement with A (as at least some of their code depends on A's code). Even worse, assume A doesn't want to significantly modify the project structure, and starts talking with B, C... asking them not to change the license. While it's formally possible to find last modifier for each line, it doesn't usually make much sense from programming logic point of view. So, NodeBB seem to get quite lucky getting everybody - at least everybody with complex contribution - simultaneously changing their license terms in accord. I'd assume in general it could be easier to rewrite all code.
- julianlam 6y agoOf our contributors? Because we value the work our contributors have made to NodeBB. To rewrite to code would be (besides being hard) essentially to replace the attribution of the code from the original owner to a company employee, etc. When a contributor assigns their contribution to us, we own it in a legal sense but we still very much want to let others know that they did it.
- kemitchell 6y agoNit: Licenses are not by definition revocable. They can be revocable or irrevocable.
- dragonwriter 6y ago> Nit: Licenses are not by definition revocable. They can be revocable or irrevocable. Not: Gratuitous (not contract) licenses are, by strong legal precedent, revocable by notice at will by the licensor. The content and context of the license (including the statement that it is irrevocable) may impact the effect given to revocation due to other legal principles, particularly promissory estoppel, but those are separate from revocability.
- ajarmst 6y agoI don't have a horse in this race, but I've become curious. Can you identify the cases and jurisdictions that provide this strong precedent? I.e. who has successfully cancelled a permanent irrevocable license, even having provided it gratuitously? If true, your claim would seem to make some of the principles open source licenses are based on untenable. I would think I would already be aware of that.
- andi999 6y agoI would also like to hear that. It sounds almost like if Linus wanted to cash in, he could just revoke the license? I doubt that.
- webmaven 6y ago> I would also like to hear that. It sounds almost like if Linus wanted to cash in, he could just revoke the license? I doubt that. That would be the implication only if Linus was the sole copyright owner. As it is, no one is asked to assign their copyright when contributing code to the Linux kernel, and the amount of code still remaining in the kernel that Linus has personally written himself is a rather small portion. So if Linus were to "take his ball and go home" as it were, the affected code could be replaced. That said, the multiplicity of contributors that retain their copyright to their contributions is also why relicensing the kernel to GPL 3 is largely a non-starter, even if Linus weren't opposed to it (and he is).
- ljm 6y agoI had the same when I ported the gruvbox theme (that was for vim) to emacs. I used the same license and also added full credit, since the elisp was mine but the selection of colours wasn't. One contributor decided to fork straight away and then link to it in an issue rather than adding a pull request. Eh, whatever, I didn't like it so much at the time but we came to an agreement, and the person who forked did a great job maintaining the theme. It became popular enough that some more prolific emacsers caught wind, and the project became more integrated. As you might know, emacs is hardcore GPL, so this basically demanded a relicense. This was a few years after I started the project back in 2013 (I think), but I got pinged on the issue and messaged privately, and that was enough. Turns out it wasn't necessary at the end of it all, but the process was quick and easy. Everything was cordial and I still have my name attached to it, which I guess is nice.
- nsajko 6y ago> All in all it took us under a week to secure the assignments, and any who did not sign we simply rewrote their lines of code, or we would have, but everybody signed. IANAL, but this doesn't make much sense. Changing all lines that come from a single author can still result in a derivative work. In fact that even seems like a probable outcome, assuming that author's contributions were copyrightable in the first place.
- amenod 6y agoI guess the proper process here is that one starts with the code as it was before the contribution, with a ticket describing what needs to be done, and writes the missing code. Preferably this is done by a person who never saw the contributed code. Then you merge all future commits on top of this. If there are merge conflicts, it can be a lot of work for small (== no) gain, but it would put you in clear.
- julianlam 6y agoGood point. Barring something like a `git revert` (which depending on age of the commit might not even be possible), I would imagine a manual revert done to the best of your ability (followed by a rewrite) would be considered a good faith attempt. Whether or not this would get you into legal trouble is left as an exercise to the reader. IA(also)NAL.
- ThePhysicist 6y agoIf you wrote most of the code yourself and received only minor contributions (which is common for most OS projects) it is possible to remove those contributions and rewrite them, legally it would be hard to challenge. We almost had to do this once for our own proprietary codebase as we discovered during due diligence that we didn't have a proper copyright transfer agreement from several of our interns. Fortunately we were able to resolve this with them (by paying them some extra money to sign a CLA), if it wouldn't have worked we would've removed and rewritten the code instead. It's silly but legally it's doable. Of course this strategy doesn't work if a large part of your codebase originates from third-party contributors, but from my experience Github projects receive mostly small/cosmetic PRs from non-core developers (not saying that those contributions are not valuable btw).
- wbl 6y agoWhy wouls someone need a proprietary version?
- abrookewood 6y agoSome larger companies are concerned that they will be 'caught' by the Open Source licences and either be forced to release their proprietary code or face a legal challenge. As a result, some companies have a blanket rule that any code has to either be written in house, or come with a clear purchased licence granting them the right to use it. I can't recall who it was now, but I remember reading about an open source project that makes considerable money from selling these licences, even though they weren't necessary (the licence was MIT). The licence even had an explanation around it stating (paraphrasing) "Hey, this isn't required, but if it makes you feel better, you can pay for it".
- messe 6y agoWas it sqlite that you were thinking of? It's public domain, but offers licenses. > The core SQLite database software is in the public domain. No license is necessary to use SQLite or to build SQLite into your products. However, licenses are available to satisfy the following needs: > - You want indemnity against claims of copyright infringement. > - You are using SQLite in a jurisdiction that does not recognize the public domain. > - You are using SQLite in a jurisdiction that does not recognize the right of a authors to dedicate their work to the public domain. > - You want to hold a tangible legal document as evidence that you have the legal right to use and distribute SQLite. Your legal department tells you that you have to purchase a license. https://www.sqlite.org/purchase/license https://www.sqlite.org/purchase/license
- user5994461 6y agoIt's ironic considering a good chunk of the world outside of the US doesn't recognize public domain. :D To be more specific. Public domain is intended to mean "after copyrights have expired". It is not a sort of license that can be put on a creation.
- simias 6y ago> All in all it took us under a week to secure the assignments, and any who did not sign we simply rewrote their lines of code, or we would have, but everybody signed. I've always heard about this possibility but I wonder how one would rewrite code, should the need arise. Wouldn't it be hard to do without effectively making a derivative work? Suppose that you remove the code, reimplement it but end up with something that's extremely similar to the original (which is very likely since after all you're doing the same thing). Couldn't the original author argue that it's still their code? How do you prove that you did the work and just happened with the same code because that's just the most straightforward way to do it? It seems like the only way to avoid the problem altogether would be to have some sort of clean room design: - Dev A reads the code to be removed, writes a spec for the functionality. - Dev A removes the code. - Dev B takes the truncated code and the spec and implements the feature. But that seems very painful to do cleanly, in particular one could argue that B should be a third party who is not intimately familiar with the codebase, otherwise it could be argued that they knew the previous code.
- girst 6y agoThe plan you've described is exactly what https://jshint.com/relicensing-2020/ https://jshint.com/relicensing-2020/ did. ETA: discussed here, with a more in-depth link: https://news.ycombinator.com/item?id=24051655 https://news.ycombinator.com/item?id=24051655
- julianlam 6y agoThanks! We did this with guidance from a lawyer, but didn't check to see how other projects handled it. I'm glad to see we followed the lead of other similar projects.
- peteradio 6y agoThere is no Dev A and Dev B, just Dev 1 renaming the variables so none of the words are the same LOL. Could probably make a plugin for IDEs to do this automatically called "uncopywrite" or "breaklicense" which does it automatically. Maybe it already exists? I kid... but doesn't it all seem a bit ... stupid?
- garmaine 6y agoWhy would someone assign their open source code to you? I wouldn’t. That makes no sense.
- ajarmst 6y agoIt makes sense to nearly everyone who has contributed to GNU projects, as GNU makes that a requirement for significant contributions (i.e. those that aren't likely already owned by GNU as trivial and thus derivative changes). Remember that if what you are creating is a derivative work of the original, which it very likely is, you copyright on your portion of the work--if it even exists--is of little value to you outside the context of the project.
- garmaine 6y agoI never sign contributor license agreements. If I wanted a 3rd party to be able to relicense my GPL code, I wouldn't have released it under the GPL.
- julianlam 6y agoHi! I want to respond to you personally, because we did have someone raise a bit of hell about our CAA for these reasons. They did not have any contributed code, however. They were just a vocal third party. In the end, if they have opposition to the CAA, they don't sign it, and we make sure that we don't merge pull requests whose contributors have not signed the CAA. You have a moral opposition to the concept of the CAA or a CLA, and that's perfectly fine, it just means you will not be able to contribute to NodeBB. Unfortunate, but our butts are protected and your rights are not potentially infringed upon.
- garmaine 6y agoWhy do you need a CAA/CLA? The common reason given is to have standing in an infringement dispute. But for that you just need some ownership, which you have. The reason for full ownership is to be able to relicense. That’s what I object to, and I don’t see why a project specific group with partial ownership like NodeBB needs that. What protections are you seeking? To be clear though, the context was that you found your own work had included the work of others and THEN went out and sought their copyright assignment. This isn’t someone seeking contribution. I fail to see why they would agree to that.
- ckastner 6y ago> It seems like the problem here stems from the project owner taking the source code as-is and essentially re-licensing it as proprietary, which is a big no-no. > For context, when NodeBB faced this possibility, we simply contacted every single contributor and asked nicely if they'd assign over their ownership of their contribution to us (note the use of the word "assign", not "license", a license is revocable, an assignment is not). This is certainly the correct way to do hit. However, in this specific case, it appears that as of the current code, not many external contributions remain. The author of the original issue in the meantime forked the repo and continued to document the issue there [1] as it was being constantly closed, but as is evident from his own `git blame` analysis, most of the contributions are from staff, and the external contributions are basically negligible. There's one author with 30 LOC, one with 10 LOC, and the remaining 12 contributors average less then 4 LOC each. [1] https://github.com/christianbundy/octotree/issues/1#issuecomment-719981875 https://github.com/christianbundy/octotree/issues/1#issuecom...
- formerly_proven 6y agoWith some of these minor contributions there is probably a debate about threshold of originality to be had: something that's not protected by copyright is in the public domain.
- solomatov 6y agoIANAL, but my understanding is that simply reverting the contributions by these folks, and then independently reimplementing them should make the full copyright to be owned by the original author. Could anyone comment here? What's the threshold for this?
- aidenn0 6y agoI am also not a lawyer, but I have heard conflicting advice from different lawyers about what qualifies as "independent" so if the stakes are high, tread carefully.
- ww520 6y agoThis is the reason I don't accept pull requests for my projects. I don't want to lose control over them.
- j1elo 6y agoSomething I wonder, doesn't require copyright assignment reduce the number of contributions? What is the philosophical standpoint behind requiring copyright assignment, wrt. being part of the OSS community? A copyright assignment gives power to the project owner to end up relicensing all those contributions as proprietary, effectively extracting free labor from contributions that were originally written under the implicit social contract of being part of the OSS community and all the Good Things that come with it.
- pabs3 6y agoIf you had needed to rewrite some of the code, cregit would have been useful, it tracks authorship of code on a per-token basis using the git history. https://github.com/cregit/cregit https://github.com/cregit/cregit https://lwn.net/Articles/698425/ https://lwn.net/Articles/698425/ https://cregit.linuxsources.org/ https://cregit.linuxsources.org/
- AnonHP 6y ago> For context, when NodeBB faced this possibility, we simply contacted every single contributor and asked nicely if they'd assign over their ownership of their contribution to us (note the use of the word "assign", not "license", a license is revocable, an assignment is not). 1. Could you expand on how you asked the contributors and what reasons (and justifications) you gave them for it? 2. Didn’t they feel like their work was being “stolen” (sorry for using such an extreme word) for proprietary use?
- zaarn 6y agoWhat would you do in , for example , Germany , where Copyright is not assignable? In this case all the copyright owner could do is license it...