I have a very specific question in this seemingly gray area.
There is a very popular MIT-licensed PyPI academic Python package calfem-python.
There is another very very popular GPLv2-or-later-licensed PyPI Python package gmsh.
calfem-python lists gmsh as a dependency in its build-package.py file.
Let's imagine a hypothetical commercial app built upon a closed-sourced Python package that has calfem-python (but not any of its source code directly) as it dependency in its setup.py file and calls at least one calfem-python class (calfem.mesh.GmshMeshGenerator) from calfem-python.mesh module that in its turn imports and uses gmsh.
That hypothetical closed-sourced Python package doesn't explicitly list gmsh at its dependency in its setup.py file.
Both MIT-licensed calfem-python and GPLv2-or-later-licensed gmsh are installed from PyPI after being triggered in chain by setup.py of that hypothetical closed-sourced Python package and by build-package.py of calfem-python, respectively, only at the time of the installation of that hypothetical closed-sourced Python package on a final user's machine.
What do you think about this situation and applicability of the GPLv2-or-later license to this distributed closed-sourced Python package with no code from calfem-python or gmsh included in its distribution?
To provide more context (a follow-up): After writing this question, I noticed that the source code of the calfem-python.mesh module has two options:
- A default hard-coded option (it cannot be switched with arguments when importing calfem-python, only re-hardcoded in a fork or by inserting its code into the new project)
self.use_gmsh_module = True, which leads to using the imported gmsh Python package and its functionality. - And re-hardcoded
self.use_gmsh_module = False, which leads to finding (presumably separately installed) gmsh.exe in the file system and using its functionality viagmshExe = which("gmsh.exe")andoutput = subprocess.Popen(r'"%s" "%s" %s' % (gmshExe, geoFilePath, options), shell=True, stdout=subprocess.PIPE).stdout.read().
My assumption is that this 2nd option, if re-hardcoded, can allow using a separately installed gmsh.exe (this product is distributed not only as a Python package) at arm's length via subprocess.Popen() and subprocess.PIPE and not violate the GPLv2-or-later license.
I am very curious to hear your opinions on this 2nd option if the 1st option is not good for that hypothetical scenario?