bskinn/sphobjinv

Fuzzywuzzy is not MIT compatible

onerandomusername opened this issue · 9 comments

Description

Fuzzywuzzy is not compatible with an MIT license, even though this project is licensed as such.

However, rapidfuzz is compatible, so if the dependency is changed, there is no longer a violation of licensing.

Interesting -- I had assumed that since the modules weren't linked together, the GPL flow-through behavior didn't apply.

I see now that I was incorrect in this; e.g., per https://opensource.stackexchange.com/a/2148/1130.

I'll have to review my other projects for this -- thanks for bringing it to my attention!


In terms of a replacement, I don't especially like how rapidfuzz requires separate install of a VC++ redistributable on Windows. I think I'll have to either find another package, or just implement my own matcher. Either way, it would make sense to implement in tandem with #207, I think.

Thank you for trying to fix this, btw! I want to use this rather than write my own parser, but the fuzzer that means that I can't with my current project licensing.

  • Update docs
  • Update tox dependencies matrix (incl. removal of fuzzywuzzy) and Pythons (add 3.11)
  • Remove speedup extra
  • Remove fuzzywuzzy from requirements files
  • Freshen CI Pythons

Yeah, if I'd correctly understood the licensing implications, I never would have pulled fuzzywuzzy in in the first place.

Do I understand correctly that if fuzzywuzzy/python-Levenshtein had been licensed either as (i) LGPL or (ii) GPL+ClassPath, I could have used them and kept sphobjinv as MIT?

Do I understand correctly that if fuzzywuzzy/python-Levenshtein had been licensed either as (i) LGPL or (ii) GPL+ClassPath, I could have used them and kept sphobjinv as MIT?

I have no idea.

v2.2b1 is up on PyPI, with a MIT-compatible version of fuzzywuzzy vendored in and all dependence on current fuzzywuzzy and python-Levenshtein removed. pip install --pre sphobjinv, or pip install sphobjinv==2.2b1 should get it.

I'm pretty confident this resolves the license conflict ... once I've finished updating the docs and have a final v2.2 released, I'll go ahead and yank the rest of the v2 series to discourage further use.

Now that the Levenshtein speedup isn't available, though, I'll be taking a close look at #178 as an alternative speed boost....

I'm pretty confident this resolves the license conflict ... once I've finished updating the docs and have a final v2.2 released, I'll go ahead and yank the rest of the v2 series to discourage further use.

This could break other projects depending on this one, as I recall some issues with pip not being able to install packages within a provided range if all of them are yanked.

For example, someone is looking for any ~2.1.x releases, but all are yanked so pip won't be able to find a package.

That's exactly why I was thinking I'd yank them, to alert at least some users of the license conflict and the need to update their pins. 2.2 should be feature-identical to 2.1, and is a feature superset of 2.0.x, so it should be an easy fix.

Anybody with an open-ended >=2 pin would pick up 2.2 automatically, so non-issue there.

Anybody with a == pin to 2.0.x or 2.1.x would still get that version...yanks don't affect affect version pins... so these users wouldn't get notified by the yanking...they'd have to just happen to notice it...not sure what I can do

Not perfect, but it's the noisiest thing I can think of short of deleting those earlier 2.x versions, which I definitely don't want to do.

But, all that said, maybe that's more than I need to do? I don't really know what the proper response is in this situation, besides modifying the project to avoid the license conflict going forward.