I would like to release my R code under GPL-3. The code depends on a package (lme4) that itself uses "GPL >= 2", but which has upstream dependencies (minqa, numDeriv, rbibutils) that are GPL-2 only. According to what I've read (see below), GPL-2 and GPL-3 are incompatible. Are the GPL-2 upstream licenses a problem for my GPL-3 R code? If so, are there recommended ways of resolving this? This post is written from the perspective of an R-package user. I am not an R-package developer nor a lawyer. I want to comply with the software licenses with the best available understanding about the topic I have. How did I found the issue: I built a container image from my code, then I ran: write.csv(installed.packages(fields = "License")[,c(1,10)], "Licenses-of-R-packages.csv") After inspecting the above list I found out that the lme4, central to my code, imports the minqa package. The lme4 is licensed under the "GPL-2 | GPL-3 [expanded from: GPL (? 2)]" according to CRAN, and the minqa package under "GPL-2". Thus, there might be a license incompatibility. The GPL2 vs GPL3 incompatibility is stated for example here: https://www.gnu.org/licenses/gpl-faq.html#v2v3Compatibility Also if you select both the GPL2 and GPL3 licenses in the following license tool, it says they are incompatible: https://ufal.github.io/public-license-selector/ Here is one of the graphs trying to simplify the license relations. Notice that there is no downstream-compatibility arrow from the GPLv2 to the GPLv2+. https://dwheeler.com/essays/floss-license-slide.html Here is another figure lacking the compatibility arrow. On the other hand, there is no red arrow or cross either. The compatibility graph was obtained from the: "Georgia M. Kapitsaki, Nikolaos D. Tselikas, Ioannis E. Foukarakis: An insight into license tools for open source software systems. Journal of Systems and Software 102: 72-87 (2015)". https://gkapi.blogspot.com/2016/09/foss-license-compatibilities.html?m=1 The main question is: are there incompatibilities between the upper stream GPL2 and lower stream "GPL-2 | GPL-3 [expanded from: GPL (? 2)]" R packages (minqa vs lme4)? If so, how could I deal with the situation as an R-package user trying to publish my source code under the GPL3? Or could the issue be solved by removing the minqa-based bobyqa optimiser from the lme4 package (a solution not directly in my hands)? Lme4 also suggests the GPL2 numDeriv, is this an issue as well? Furthermore, it is notable how the R package installations also install the undirect dependencies by default, even if my code works without them, complicating the topic further. For example, if I rely on an R package licensed to me with GPL3, after the installation my setup (computer or a container image) can be full of other and possibly non-complying R packages. One of them being the GPL2 licensed rbibutils, which becomes installed with the lme4, but the CRAN page of the lme4 does not mention this as a direct dependency. Best regards
[R-pkg-devel] Possible open-source license incompatibilities within R packages
21 messages · Duncan Murdoch, Ivan Krylov, Hadley Wickham +7 more
On 2025-09-08 10:55 a.m., Ilmari Tamminen wrote:
I would like to release my R code under GPL-3. The code depends on a package (lme4) that itself uses "GPL >= 2", but which has upstream dependencies (minqa, numDeriv, rbibutils) that are GPL-2 only. According to what I've read (see below), GPL-2 and GPL-3 are incompatible. Are the GPL-2 upstream licenses a problem for my GPL-3 R code? If so, are there recommended ways of resolving this?
My understanding is that the licenses of other packages are only relevant if you are incorporating their code into yours and would like to release the combined work. If your code uses some other package but you are not distributing the other package then their license doesn't affect your package. For example, many packages (including R itself) are written to use Windows functions, but since they don't distribute copies of those functions the fact that Windows isn't open source doesn't matter. Duncan Murdoch
This post is written from the perspective of an R-package user. I am not an R-package developer nor a lawyer. I want to comply with the software licenses with the best available understanding about the topic I have. How did I found the issue: I built a container image from my code, then I ran: write.csv(installed.packages(fields = "License")[,c(1,10)], "Licenses-of-R-packages.csv") After inspecting the above list I found out that the lme4, central to my code, imports the minqa package. The lme4 is licensed under the "GPL-2 | GPL-3 [expanded from: GPL (? 2)]" according to CRAN, and the minqa package under "GPL-2". Thus, there might be a license incompatibility. The GPL2 vs GPL3 incompatibility is stated for example here: https://www.gnu.org/licenses/gpl-faq.html#v2v3Compatibility Also if you select both the GPL2 and GPL3 licenses in the following license tool, it says they are incompatible: https://ufal.github.io/public-license-selector/ Here is one of the graphs trying to simplify the license relations. Notice that there is no downstream-compatibility arrow from the GPLv2 to the GPLv2+. https://dwheeler.com/essays/floss-license-slide.html Here is another figure lacking the compatibility arrow. On the other hand, there is no red arrow or cross either. The compatibility graph was obtained from the: "Georgia M. Kapitsaki, Nikolaos D. Tselikas, Ioannis E. Foukarakis: An insight into license tools for open source software systems. Journal of Systems and Software 102: 72-87 (2015)". https://gkapi.blogspot.com/2016/09/foss-license-compatibilities.html?m=1 The main question is: are there incompatibilities between the upper stream GPL2 and lower stream "GPL-2 | GPL-3 [expanded from: GPL (? 2)]" R packages (minqa vs lme4)? If so, how could I deal with the situation as an R-package user trying to publish my source code under the GPL3? Or could the issue be solved by removing the minqa-based bobyqa optimiser from the lme4 package (a solution not directly in my hands)? Lme4 also suggests the GPL2 numDeriv, is this an issue as well? Furthermore, it is notable how the R package installations also install the undirect dependencies by default, even if my code works without them, complicating the topic further. For example, if I rely on an R package licensed to me with GPL3, after the installation my setup (computer or a container image) can be full of other and possibly non-complying R packages. One of them being the GPL2 licensed rbibutils, which becomes installed with the lme4, but the CRAN page of the lme4 does not mention this as a direct dependency. Best regards
______________________________________________ R-package-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
Thank you for the input. I have seen the same interpretation earlier, and it feels logical and intuitive to me as well. However, there is a lot of opposing opinions to it in different contexts of programming. For example, see the below question-answer, where the Free Software Foundation itself is also cited: https://opensource.stackexchange.com/questions/9085/can-i-distribute-non-gpl-code-that-uses-gpl-code-as-long-as-i-dont-distribute-m I think that the software aggregate is one central concept when considering the question: whether an R code/package using other R packages can be distributed without GPL "leaking" from one entity to another. Below is a link to the Free Software Foundation's interpretations about the aggregates. What do you think about these, how do they apply for the cases where GPL2+ or GPL3 -licensed R code calls GPL2package::function()? Or the installation of GPL2+ or GPL3 -licensed R package also installs a GPL2package? https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation Does the "shared address space" cover the typical case in R, where both my R code and the R package it loaded can access the same variable in the working memory? If so, then the Free Software Foundation seems to interpreter them as a single program, not an aggregate. And if the LGPL licenses are not used (allowing dynamic linking without the leakage, which is the default with R packages to my understanding), then the GPL licenses start to leak across R codes/packages. To my understanding. This might also be useful to look at: https://www.gnu.org/licenses/gpl-faq.en.html#GPLPlugins I am not familiar with Windows functions. But my gut feeling says that they are considered as separate entity, if standard command-line communication or similar is used (see the above link). The below lecture, from a real open-source legal expert, is titled for corporates, but the principles are the same. I link directly to the point where she discuss about the differences between the GPL and LGPL licenses. Soon after that she discusses how the operating system and its functionalities are considered as separate entity from the other software (with certain conditions). https://youtu.be/gF4b1TA5Q5w?t=831
On 8. Sep 2025, at 22.07, Duncan Murdoch <murdoch.duncan at gmail.com> wrote: On 2025-09-08 10:55 a.m., Ilmari Tamminen wrote:
I would like to release my R code under GPL-3. The code depends on a package (lme4) that itself uses "GPL >= 2", but which has upstream dependencies (minqa, numDeriv, rbibutils) that are GPL-2 only. According to what I've read (see below), GPL-2 and GPL-3 are incompatible. Are the GPL-2 upstream licenses a problem for my GPL-3 R code? If so, are there recommended ways of resolving this?
My understanding is that the licenses of other packages are only relevant if you are incorporating their code into yours and would like to release the combined work. If your code uses some other package but you are not distributing the other package then their license doesn't affect your package. For example, many packages (including R itself) are written to use Windows functions, but since they don't distribute copies of those functions the fact that Windows isn't open source doesn't matter. Duncan Murdoch
This post is written from the perspective of an R-package user. I am not an R-package developer nor a lawyer. I want to comply with the software licenses with the best available understanding about the topic I have. How did I found the issue: I built a container image from my code, then I ran: write.csv(installed.packages(fields = "License")[,c(1,10)], "Licenses-of-R-packages.csv") After inspecting the above list I found out that the lme4, central to my code, imports the minqa package. The lme4 is licensed under the "GPL-2 | GPL-3 [expanded from: GPL (? 2)]" according to CRAN, and the minqa package under "GPL-2". Thus, there might be a license incompatibility. The GPL2 vs GPL3 incompatibility is stated for example here: https://www.gnu.org/licenses/gpl-faq.html#v2v3Compatibility Also if you select both the GPL2 and GPL3 licenses in the following license tool, it says they are incompatible: https://ufal.github.io/public-license-selector/ Here is one of the graphs trying to simplify the license relations. Notice that there is no downstream-compatibility arrow from the GPLv2 to the GPLv2+. https://dwheeler.com/essays/floss-license-slide.html Here is another figure lacking the compatibility arrow. On the other hand, there is no red arrow or cross either. The compatibility graph was obtained from the: "Georgia M. Kapitsaki, Nikolaos D. Tselikas, Ioannis E. Foukarakis: An insight into license tools for open source software systems. Journal of Systems and Software 102: 72-87 (2015)". https://gkapi.blogspot.com/2016/09/foss-license-compatibilities.html?m=1 The main question is: are there incompatibilities between the upper stream GPL2 and lower stream "GPL-2 | GPL-3 [expanded from: GPL (? 2)]" R packages (minqa vs lme4)? If so, how could I deal with the situation as an R-package user trying to publish my source code under the GPL3? Or could the issue be solved by removing the minqa-based bobyqa optimiser from the lme4 package (a solution not directly in my hands)? Lme4 also suggests the GPL2 numDeriv, is this an issue as well? Furthermore, it is notable how the R package installations also install the undirect dependencies by default, even if my code works without them, complicating the topic further. For example, if I rely on an R package licensed to me with GPL3, after the installation my setup (computer or a container image) can be full of other and possibly non-complying R packages. One of them being the GPL2 licensed rbibutils, which becomes installed with the lme4, but the CRAN page of the lme4 does not mention this as a direct dependency. Best regards
______________________________________________ R-package-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
2 days later
On Mon, 8 Sep 2025 17:55:52 +0300
Ilmari Tamminen <ilmari.tamminen at icloud.com> wrote:
Are the GPL-2 upstream licenses a problem for my GPL-3 R code? If so, are there recommended ways of resolving this?
The _safest_ (possibly overly strict) assumption is that your package is a derived work of your GPL-2 dependencies even when they are not direct but transitive (which is the position taken by GPL FAQ), which necessitates licensing your code under GPL >= 2. This is not the only possibility. You could make various arguments that would let you keep your code licensed under GPL-3.0-only (e.g. does your GPL-3 code work even with the GPL-2 dependency uninstalled? do other non-GPL2 libraries implement the same interface?), but whether they are valid in your specific case, only a lawyer who specialises in software can say.
Best regards, Ivan
On Mon, Sep 8, 2025 at 2:08?PM Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
On 2025-09-08 10:55 a.m., Ilmari Tamminen wrote:
I would like to release my R code under GPL-3. The code depends on a
package (lme4) that itself uses "GPL >= 2", but which has upstream dependencies (minqa, numDeriv, rbibutils) that are GPL-2 only. According to what I've read (see below), GPL-2 and GPL-3 are incompatible. Are the GPL-2 upstream licenses a problem for my GPL-3 R code? If so, are there recommended ways of resolving this? My understanding is that the licenses of other packages are only relevant if you are incorporating their code into yours and would like to release the combined work. If your code uses some other package but you are not distributing the other package then their license doesn't affect your package. For example, many packages (including R itself) are written to use Windows functions, but since they don't distribute copies of those functions the fact that Windows isn't open source doesn't matter.
This is my belief too, and I've written a bit about it at https://r-pkgs.org/license.html#code-you-use Hadley
http://hadley.nz [[alternative HTML version deleted]]
Ilmari, there is a huge difference between opinions and law. Many of the statements your quoted are just opinions, they are not legally binding - in fact if you research the legal area you will find that they are often considered incompatible with the wording of the license (i.e., it has been argued that the courts are unlikely to take those views). However, none of these statements have been tested in court (AFAIK), so there is no definitive answer. The simple answer to your question is: consult your lawyer. It really makes no sense to speculate on your own unless you are very familiar with the law and legal system. You have already heard the view of the R community (in short namespaces create APIs and R is interpreted, so use is not derivation) for what it?s worth (it isn?t legally binding, either, but it explains what you see on CRAN), so you can take it or leave it, but you won?t get anything more definitive unless you seek legal advice (and even then you may not get a definitive answer, only an advice). Cheers, Simon
On 9/09/2025, at 19:07, Ilmari Tamminen <ilmari.tamminen at icloud.com> wrote: Thank you for the input. I have seen the same interpretation earlier, and it feels logical and intuitive to me as well. However, there is a lot of opposing opinions to it in different contexts of programming. For example, see the below question-answer, where the Free Software Foundation itself is also cited: https://opensource.stackexchange.com/questions/9085/can-i-distribute-non-gpl-code-that-uses-gpl-code-as-long-as-i-dont-distribute-m I think that the software aggregate is one central concept when considering the question: whether an R code/package using other R packages can be distributed without GPL "leaking" from one entity to another. Below is a link to the Free Software Foundation's interpretations about the aggregates. What do you think about these, how do they apply for the cases where GPL2+ or GPL3 -licensed R code calls GPL2package::function()? Or the installation of GPL2+ or GPL3 -licensed R package also installs a GPL2package? https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation Does the "shared address space" cover the typical case in R, where both my R code and the R package it loaded can access the same variable in the working memory? If so, then the Free Software Foundation seems to interpreter them as a single program, not an aggregate. And if the LGPL licenses are not used (allowing dynamic linking without the leakage, which is the default with R packages to my understanding), then the GPL licenses start to leak across R codes/packages. To my understanding. This might also be useful to look at: https://www.gnu.org/licenses/gpl-faq.en.html#GPLPlugins I am not familiar with Windows functions. But my gut feeling says that they are considered as separate entity, if standard command-line communication or similar is used (see the above link). The below lecture, from a real open-source legal expert, is titled for corporates, but the principles are the same. I link directly to the point where she discuss about the differences between the GPL and LGPL licenses. Soon after that she discusses how the operating system and its functionalities are considered as separate entity from the other software (with certain conditions). https://youtu.be/gF4b1TA5Q5w?t=831
On 8. Sep 2025, at 22.07, Duncan Murdoch <murdoch.duncan at gmail.com> wrote: On 2025-09-08 10:55 a.m., Ilmari Tamminen wrote:
I would like to release my R code under GPL-3. The code depends on a package (lme4) that itself uses "GPL >= 2", but which has upstream dependencies (minqa, numDeriv, rbibutils) that are GPL-2 only. According to what I've read (see below), GPL-2 and GPL-3 are incompatible. Are the GPL-2 upstream licenses a problem for my GPL-3 R code? If so, are there recommended ways of resolving this?
My understanding is that the licenses of other packages are only relevant if you are incorporating their code into yours and would like to release the combined work. If your code uses some other package but you are not distributing the other package then their license doesn't affect your package. For example, many packages (including R itself) are written to use Windows functions, but since they don't distribute copies of those functions the fact that Windows isn't open source doesn't matter. Duncan Murdoch
This post is written from the perspective of an R-package user. I am not an R-package developer nor a lawyer. I want to comply with the software licenses with the best available understanding about the topic I have. How did I found the issue: I built a container image from my code, then I ran: write.csv(installed.packages(fields = "License")[,c(1,10)], "Licenses-of-R-packages.csv") After inspecting the above list I found out that the lme4, central to my code, imports the minqa package. The lme4 is licensed under the "GPL-2 | GPL-3 [expanded from: GPL (? 2)]" according to CRAN, and the minqa package under "GPL-2". Thus, there might be a license incompatibility. The GPL2 vs GPL3 incompatibility is stated for example here: https://www.gnu.org/licenses/gpl-faq.html#v2v3Compatibility Also if you select both the GPL2 and GPL3 licenses in the following license tool, it says they are incompatible: https://ufal.github.io/public-license-selector/ Here is one of the graphs trying to simplify the license relations. Notice that there is no downstream-compatibility arrow from the GPLv2 to the GPLv2+. https://dwheeler.com/essays/floss-license-slide.html Here is another figure lacking the compatibility arrow. On the other hand, there is no red arrow or cross either. The compatibility graph was obtained from the: "Georgia M. Kapitsaki, Nikolaos D. Tselikas, Ioannis E. Foukarakis: An insight into license tools for open source software systems. Journal of Systems and Software 102: 72-87 (2015)". https://gkapi.blogspot.com/2016/09/foss-license-compatibilities.html?m=1 The main question is: are there incompatibilities between the upper stream GPL2 and lower stream "GPL-2 | GPL-3 [expanded from: GPL (? 2)]" R packages (minqa vs lme4)? If so, how could I deal with the situation as an R-package user trying to publish my source code under the GPL3? Or could the issue be solved by removing the minqa-based bobyqa optimiser from the lme4 package (a solution not directly in my hands)? Lme4 also suggests the GPL2 numDeriv, is this an issue as well? Furthermore, it is notable how the R package installations also install the undirect dependencies by default, even if my code works without them, complicating the topic further. For example, if I rely on an R package licensed to me with GPL3, after the installation my setup (computer or a container image) can be full of other and possibly non-complying R packages. One of them being the GPL2 licensed rbibutils, which becomes installed with the lme4, but the CRAN page of the lme4 does not mention this as a direct dependency. Best regards
______________________________________________ R-package-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
______________________________________________ R-package-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
On 12. Sep 2025, at 0.17, Ivan Krylov <ikrylov at disroot.or The _safest_ (possibly overly strict) assumption is that your package is a derived work of your GPL-2 dependencies even when they are not direct but transitive (which is the position taken by GPL FAQ), which necessitates licensing your code under GPL >= 2.
I tried to find a clear statement about the transitive case from the GPL FAQ without luck. By "transitive" did you mean distributing the code without the R packages the code depends on? Could you point out the part where the case was dealt with? I concluded it was not allowed, because the option was not separately mentioned, and because of the shared address space during the execution. Also the need for making the separate LGPL licenses affected my conclusion.
which necessitates licensing your code under GPL >= 2.
This would be a very easy option for me: instead of licensing my code with GPL3 only, I would use the GPL >= 2 option. Without the need of possibly removing all the GPL2-licensed dependencies, or ask the authors of the dependencies to update their licenses. It would probably also mean that there is not conflict between the GPL-2 | GPL-3 lme4 and GPL2 minqa packages either in the first place. But having basis for this option would also be good, such as explained by the free software foundation.
You have already heard the view of the R community (in short namespaces create APIs and R is interpreted, so use is not derivation)
Simon, this is very interesting information and makes sense. If I understood correctly, no derivative work but an aggregate, the code entities are communicating through the well-documented APIs. Where was this community view actually stated, do you have any source for further information? If this aligns with the explanations of the free software foundation and thus GPL licenses, then I think there is no issues indeed. I am very likely to ask about the topic from a software lawyer for my particular case. But to form educated questions, I first need to get some basic understanding, and also hear how the community thinks about these issues.
Le Fri, Sep 12, 2025 at 10:42:56AM +0300, Ilmari Tamminen a ?crit :
I am very likely to ask about the topic from a software lawyer for my particular case. But to form educated questions, I first need to get some basic understanding, and also hear how the community thinks about these issues.
Hi Ilmari, there is an important point to consider in order to have the big picture before asking for legal advice: on whom is the burden of license compatibility. I first wrote a long example, but here is a LLM summary that I am very satisfied of: GPL?2?only and GPL?3 are not license?compatible when combined into a single derivative work, but this is rarely an issue for developers who only distribute source code ? private use is unrestricted, and separate works can be redistributed side?by?side. The problem arises when redistributing binaries or other combined artefacts: if any binary contains code from both, it cannot be legally redistributed. This risk extends to container images: while a generic image bundling many unrelated packages is usually fine, an image built to run two incompatible?licensed components together could be considered a single work, triggering the same restrictions. So I think that the big question is not only on how you comply to license terms, some of which you can chose as you are the copyright holder, but also how your choices empower the downstream community to comply. Best, Charles
Charles Plessy Nagahama, Yomitan, Okinawa, Japan Debian Med packaging team http://www.debian.org/devel/debian-med Tooting from work, https://fediscience.org/@charles_plessy Tooting from home, https://framapiaf.org/@charles_plessy
I don?t think we should be trusting LLM output for questions like these. The GPL FAQ directly addresses the bindings between interpreted code modules (text, not binary) and the need for distribution of code under the GPL to either be under the same version code or a compatible license. On Sat, 13 Sep 2025 at 11:53?am, Charles Plessy <
charles-listes+rd at plessy.org> wrote:
Le Fri, Sep 12, 2025 at 10:42:56AM +0300, Ilmari Tamminen a ?crit :
I am very likely to ask about the topic from a software lawyer for my particular case. But to form educated questions, I first need to get some basic understanding, and also hear how the community thinks about these issues.
Hi Ilmari, there is an important point to consider in order to have the big picture before asking for legal advice: on whom is the burden of license compatibility. I first wrote a long example, but here is a LLM summary that I am very satisfied of: GPL?2?only and GPL?3 are not license?compatible when combined into a single derivative work, but this is rarely an issue for developers who only distribute source code ? private use is unrestricted, and separate works can be redistributed side?by?side. The problem arises when redistributing binaries or other combined artefacts: if any binary contains code from both, it cannot be legally redistributed. This risk extends to container images: while a generic image bundling many unrelated packages is usually fine, an image built to run two incompatible?licensed components together could be considered a single work, triggering the same restrictions. So I think that the big question is not only on how you comply to license terms, some of which you can chose as you are the copyright holder, but also how your choices empower the downstream community to comply. Best, Charles -- Charles Plessy Nagahama, Yomitan, Okinawa, Japan Debian Med packaging team http://www.debian.org/devel/debian-med Tooting from work, https://fediscience.org/@charles_plessy Tooting from home, https://framapiaf.org/@charles_plessy
______________________________________________ R-package-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
Hi all, Just adding my experience to this thread as a cautionary example against the notion that it should be no problem to release a package under GPL-3 if it only calls functions from packages released under GPL-2. Up to 2017, my afex package (which depended on several GPL-2 packages) was released under GPL-3. However, then an over-eager debian user reported this as a violation of the GPL, see here: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800891 As a consequence, Debian suspended hosting the corresponding binary package (r-cran-afex) until I changed my license to GPL (? 2). I in principle agree with both Duncan and Hadley position, but if someone more powerful (in this case the Debian package admin) has other opinions there was not much I could do. Best, Henrik Am Do., 11. Sept. 2025 um 23:32 Uhr schrieb Hadley Wickham < h.wickham at gmail.com>:
On Mon, Sep 8, 2025 at 2:08?PM Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
On 2025-09-08 10:55 a.m., Ilmari Tamminen wrote:
I would like to release my R code under GPL-3. The code depends on a
package (lme4) that itself uses "GPL >= 2", but which has upstream dependencies (minqa, numDeriv, rbibutils) that are GPL-2 only. According to what I've read (see below), GPL-2 and GPL-3 are incompatible. Are the GPL-2 upstream licenses a problem for my GPL-3 R code? If so, are there recommended ways of resolving this? My understanding is that the licenses of other packages are only relevant if you are incorporating their code into yours and would like to release the combined work. If your code uses some other package but you are not distributing the other package then their license doesn't affect your package. For example, many packages (including R itself) are written to use Windows functions, but since they don't distribute copies of those functions the fact that Windows isn't open source doesn't matter.
This is my belief too, and I've written a bit about it at https://r-pkgs.org/license.html#code-you-use Hadley -- http://hadley.nz [[alternative HTML version deleted]]
______________________________________________ R-package-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
Dr. Henrik Singmann Associate Professor, Experimental Psychology University College London (UCL), UK http://singmann.org [[alternative HTML version deleted]]
Thank you Henrik, I read the "bug" report. The precedent you described seems quite significant, and unfortunate of course, although dealt outside the courts. If no substantial counter arguments appear, such as a stance from the free software foundation or judicial decision that would falsify how your package was treated, I think I don't dare to use the lme4 package as such. Thus, I might need to make my own version and remove the GPL2 dependencies somehow. But there is the risk of breaking the code, as I am not a specialised lme4 developer. However, I have already tested that my mixed-model fittings do work after doing the following in a fresh R session:
library(lme4)
remove.packages(c("numDeriv", "minqa", "rbibutils"), c("/usr/local/lib/R/site-library"))
I understand the burden this would cause, but for me and maybe other lme4 users as well the easiest way would be to solve the assumed issues in more coordinated manner. By asking the dependency authors to update their licenses, or remove the dependencies from the official distribution of the lme4. But honestly I am still unsure is this an over reaction, or was the apex package treated incorrectly. Unfortunate uncertainties and delays for my project anyhow.
Best regards
Ilmari
Hi all, Just adding my experience to this thread as a cautionary example against the notion that it should be no problem to release a package under GPL-3 if it only calls functions from packages released under GPL-2. Up to 2017, my afex package (which depended on several GPL-2 packages) was released under GPL-3. However, then an over-eager debian user reported this as a violation of the GPL, see here: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800891 As a consequence, Debian suspended hosting the corresponding binary package (r-cran-afex) until I changed my license to GPL (? 2). I in principle agree with both Duncan and Hadley position, but if someone more powerful (in this case the Debian package admin) has other opinions there was not much I could do. Best, Henrik
I will go ahead and ask the upstream developers if they're willing to change their licenses from GPL-2 to "GPL >= 2", but honestly I think this is probably an overreaction. I suspect there are *many* packages on CRAN that have the same kind of license incompatibility, especially those relying on stable packages that are so old (pre-2007, e.g. numDeriv) that they were released before GPL-3 existed (and the package maintainers never saw the need to go back and change the license). On Sun, Sep 14, 2025 at 3:22?AM Ilmari Tamminen
<ilmari.tamminen at icloud.com> wrote:
Thank you Henrik, I read the "bug" report. The precedent you described seems quite significant, and unfortunate of course, although dealt outside the courts. If no substantial counter arguments appear, such as a stance from the free software foundation or judicial decision that would falsify how your package was treated, I think I don't dare to use the lme4 package as such. Thus, I might need to make my own version and remove the GPL2 dependencies somehow. But there is the risk of breaking the code, as I am not a specialised lme4 developer. However, I have already tested that my mixed-model fittings do work after doing the following in a fresh R session:
library(lme4)
remove.packages(c("numDeriv", "minqa", "rbibutils"), c("/usr/local/lib/R/site-library"))
I understand the burden this would cause, but for me and maybe other lme4 users as well the easiest way would be to solve the assumed issues in more coordinated manner. By asking the dependency authors to update their licenses, or remove the dependencies from the official distribution of the lme4. But honestly I am still unsure is this an over reaction, or was the apex package treated incorrectly. Unfortunate uncertainties and delays for my project anyhow.
Best regards
Ilmari
Hi all, Just adding my experience to this thread as a cautionary example against the notion that it should be no problem to release a package under GPL-3 if it only calls functions from packages released under GPL-2. Up to 2017, my afex package (which depended on several GPL-2 packages) was released under GPL-3. However, then an over-eager debian user reported this as a violation of the GPL, see here: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800891 As a consequence, Debian suspended hosting the corresponding binary package (r-cran-afex) until I changed my license to GPL (? 2). I in principle agree with both Duncan and Hadley position, but if someone more powerful (in this case the Debian package admin) has other opinions there was not much I could do. Best, Henrik
Hi Ilmari, Am I reading this correctly that you imply that a relationship arising from package A calling library(B), or having a more Imports or Depends on it, would lead to same GPL "virality" as having actual object code from an external package? The latter case (ie object code and linking) clearly is what the GPL has in mind, where virality matters, and where it is commonly applied. The established consensus, as best as I can tell, always has been is that the former (an R package calling another R package) is not, and the virality argument you are making does not apply. So I think you are fighting a fighting that does not exist. Cheers, Dirk
dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
Hi Dirk, You might have missed the point I made in my email which shows that some people from Debian (!) took exactly the position you believe does not exist and removed the binary version of afex from the Debian repositories. I link to the relevant Debian bug report again below which contains the following claims:
I believe the r-cran-afex package violates the GPL. It is released under
GPL3+, however it has GPL2-only dependencies (r-cran-stringr, r-cran-coin, r-crain-lsmeans), and it calls functions from these packages directly.
The nature of the interaction (function calls) means that r-cran-afex and
its dependencies constitute a single work, and not two separate programs, as per the GPL faq: [...] See here: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800891 While I also believe that this is likely a misinterpretation of the GPL, I was not in the mood to fight against this and simply changed my package's license. So while we might all be in agreement here, clearly not everyone sees it this way. Best, Henrik Am So., 14. Sept. 2025 um 13:38 Uhr schrieb Dirk Eddelbuettel < edd at debian.org>:
Hi Ilmari, Am I reading this correctly that you imply that a relationship arising from package A calling library(B), or having a more Imports or Depends on it, would lead to same GPL "virality" as having actual object code from an external package? The latter case (ie object code and linking) clearly is what the GPL has in mind, where virality matters, and where it is commonly applied. The established consensus, as best as I can tell, always has been is that the former (an R package calling another R package) is not, and the virality argument you are making does not apply. So I think you are fighting a fighting that does not exist. Cheers, Dirk -- dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
Dr. Henrik Singmann Associate Professor, Experimental Psychology University College London (UCL), UK http://singmann.org [[alternative HTML version deleted]]
Hi Henrik, People have been wrong on the internet before, and they continue to do so. Just because someone made a claim (which you and I considered false and without underlying merit), and even when action resulted, does not create "case law". That was simple a mistake being made. [1] The underlying issue is that nobody has shown that a Depends (or these days Imports) implies that the 'importing package' (here your `afex` package) inherits anything from the 'imported package' (here Ben's `lme4`). CRAN has over twenty-two thousand packages. There simply is no cross-pollination of licensing on package being used in this standard way. [2] What matters is that when a package gets onto CRAN is that its license is a suitable, understood and accepted license that is part of the master list CRAN keeps. All that is in the manuals. I will now try to extract myself now from this thread. It really is a flashback to earlier days in that it creates a lot of heat without much light. Cheers, Dirk [1] And having been part of Debian for thirty years I am with you that sometimes it is easier to just make a change to a package or file and move on. That by now means settles the underlying issue. There are simply too many hotheads to debate. [2] As said before, it is difference when a package builds, compiles, links, with an external library. That is the example of virality that matters. Different case though.
dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
Many thanks for the input everybody! I am glad to get help with the complex topic.
Am I reading this correctly that you imply that a relationship arising from package A calling library(B), or having a more Imports or Depends on it, would lead to same GPL "virality" as having actual object code from an external package?
According to my layman's understanding yes. The primary argument being the shared address space mentioned in the GPL's FAQ, also noted by Ivan. For example, a function defined in my R script can access the same variable as a package::function(). It was mentioned under the #MereAggregation, but with the ambiguous "almost surely" (leaving some space for the API interpretation, I will come back to this later). I also think that the invention of the separate LGPL licenses allowing dynamic linking to dependencies without the license virality supports the above indirectly. Why would the LGPL licenses be needed if the GPL licenses would already allow the dynamic linking? To my understanding, the default use of R language relies on dynamic linking, as no comprehensive executables are compiled prior the execution of the source code. I do hope that the above interpretation would be wrong and the fight wouldn't exist. For example, so that the handling of the Henrik's afex package would have been incorrect. I do like the other interpretation where the R's namespace is considered as an API interface leading to software aggregates. However, notice the many opposing opinions against the non virality in the https://opensource.stackexchange.com/, specially in the context of R. Although I haven't seen anyone raising the specific API interpretation, I think saw it first time in this discussion. They all might be wrong, but the situation is confusing. After the above, the most puzzling thing in my head currently reduces to the following. What is actually the difference between the dynamic linking and software aggregates? Any clarifying thoughts on this? The GPL2 license itself has the crucial permissible clause for the aggregates: "In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License." If the current discussion resembles some earlier debates (that I am not aware of), and the uncertainty is still floating, maybe it would be wise to find some decisive, unambiguous conclusion and state it somewhere officially and visibly. Pointing to the relevant arguments and sources, such as explaining the API interpretation and how it aligns with the GPL licenses and their FAQs. Possibly also deal the difference between the dynamic linking and software aggregates. Which one of the concepts actually covers the default application of the R language, or are they even counterparts? And why would the LGPL licenses be redundant in the context of the default use of R (or are they)? If these topics happen to be crucial for solving the seemingly long-lasting confusion. Br Ilmari
4 days later
Well, this turned out to be an odd case. It took quite long to notice the following in the end of the GPLv2: "10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally." The information I received from multiple sources was that the upstream licenses must be updated or the dependencies removed, if there is the GPLv2-only vs. GPLv3 conflict. Notably, the option based on the GPLv2 section 10. was not raised in this thread either. So, is an email "OK" enough for resolving the GPLv2-only vs. GPLv3 conflict? But not necessary only from the package maintainers though, but from all the relevant copyright holders. But the maintainer can ask the permissions and then probably act from behalf of the copyright holders for giving the centralised permission for the cross use. If this is indeed possible, maybe it would be wise to ask permissions (retroactively) for all the versions, to clear all possible conflicts and remove uncertainties from the future at once. It would also be wise to communicate the permissions along the distribution. I think the awareness about this less burdensome yet (I dare to say) unambiguous option should be distributed. I don't have the expertise to say is the namespace-API interpretation right or wrong. But this new approach is quite clearly defined in the GPLv2. However, I cannot give legal advice for all the possible circumstances. Everybody needs to do their own case-specific interpretations and take responsibility. Any thoughts? Br Ilmari Tamminen
On 15. Sep 2025, at 10.55, Ilmari Tamminen <ilmari.tamminen at icloud.com> wrote: Many thanks for the input everybody! I am glad to get help with the complex topic.
Am I reading this correctly that you imply that a relationship arising from package A calling library(B), or having a more Imports or Depends on it, would lead to same GPL "virality" as having actual object code from an external package?
According to my layman's understanding yes. The primary argument being the shared address space mentioned in the GPL's FAQ, also noted by Ivan. For example, a function defined in my R script can access the same variable as a package::function(). It was mentioned under the #MereAggregation, but with the ambiguous "almost surely" (leaving some space for the API interpretation, I will come back to this later). I also think that the invention of the separate LGPL licenses allowing dynamic linking to dependencies without the license virality supports the above indirectly. Why would the LGPL licenses be needed if the GPL licenses would already allow the dynamic linking? To my understanding, the default use of R language relies on dynamic linking, as no comprehensive executables are compiled prior the execution of the source code. I do hope that the above interpretation would be wrong and the fight wouldn't exist. For example, so that the handling of the Henrik's afex package would have been incorrect. I do like the other interpretation where the R's namespace is considered as an API interface leading to software aggregates. However, notice the many opposing opinions against the non virality in the https://opensource.stackexchange.com/, specially in the context of R. Although I haven't seen anyone raising the specific API interpretation, I think saw it first time in this discussion. They all might be wrong, but the situation is confusing. After the above, the most puzzling thing in my head currently reduces to the following. What is actually the difference between the dynamic linking and software aggregates? Any clarifying thoughts on this? The GPL2 license itself has the crucial permissible clause for the aggregates: "In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License." If the current discussion resembles some earlier debates (that I am not aware of), and the uncertainty is still floating, maybe it would be wise to find some decisive, unambiguous conclusion and state it somewhere officially and visibly. Pointing to the relevant arguments and sources, such as explaining the API interpretation and how it aligns with the GPL licenses and their FAQs. Possibly also deal the difference between the dynamic linking and software aggregates. Which one of the concepts actually covers the default application of the R language, or are they even counterparts? And why would the LGPL licenses be redundant in the context of the default use of R (or are they)? If these topics happen to be crucial for solving the seemingly long-lasting confusion. Br Ilmari
1 day later
On 2025-09-19 1:40 p.m., Ilmari Tamminen wrote:
Well, this turned out to be an odd case. It took quite long to notice the following in the end of the GPLv2: "10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally." The information I received from multiple sources was that the upstream licenses must be updated or the dependencies removed, if there is the GPLv2-only vs. GPLv3 conflict. Notably, the option based on the GPLv2 section 10. was not raised in this thread either. So, is an email "OK" enough for resolving the GPLv2-only vs. GPLv3 conflict? But not necessary only from the package maintainers though, but from all the relevant copyright holders. But the maintainer can ask the permissions and then probably act from behalf of the copyright holders for giving the centralised permission for the cross use. If this is indeed possible, maybe it would be wise to ask permissions (retroactively) for all the versions, to clear all possible conflicts and remove uncertainties from the future at once. It would also be wise to communicate the permissions along the distribution. I think the awareness about this less burdensome yet (I dare to say) unambiguous option should be distributed. I don't have the expertise to say is the namespace-API interpretation right or wrong. But this new approach is quite clearly defined in the GPLv2. However, I cannot give legal advice for all the possible circumstances. Everybody needs to do their own case-specific interpretations and take responsibility Any thoughts?
It would be easy enough to request permissions from maintainers.
> is an email "OK" enough for resolving the GPLv2-only vs. GPLv3 conflict?
Maybe?
> But the maintainer can ask the permissions and then probably act from
behalf of the copyright holders for giving the centralised permission
for the cross use. If this is indeed possible, maybe it would be wise to
ask permissions (retroactively) for all the versions, to clear all
possible conflicts and remove uncertainties from the future at once. It
would also be wise to communicate the permissions along the distribution.
I'm not quite sure what you want to have done here; if you're asking
me (the lme4 maintainer) to ask all of the upstream maintainers and
copyright holders (it's not clear to me who these are in the absence of
an explicit 'cph'-tagged entity in the DESCRIPTION file or an explicit
COPYRIGHTS file included in the package: maintainer? maintainer and all
authors? maintainer, authors, and contributors?), that seems like more
work than I want to do. Would I put these permissions in the LICENSE
file, or ... ?
I don't mind spending a bit of time asking upstream package
maintainers to re-license their packages under 'GPL >= 2', but collating
permissions actually seems like more work.
I agree that it might be nice to have a clearer statement about these
licensing issues, but the problem is that in the absence of a legal
precedent (which doesn't exist AFAIK, and seems unlikely to exist in the
future -- there would have to be an actual court case involving
permissions of R packages, and then that would only apply to one
particular jurisdiction etc. ...) it would still just be an opinion.
Relevant opinions from Stack Exchange (still just opinions):
https://opensource.stackexchange.com/questions/4414/if-my-r-package-uses-gpl-packages-does-mine-automatically-inherit-gpl
https://opensource.stackexchange.com/search?q=R+package+GPL
https://opensource.stackexchange.com/questions/14266/license-r-code-when-using-r-packages-with-different-license-types
Br Ilmari Tamminen
On 15. Sep 2025, at 10.55, Ilmari Tamminen <ilmari.tamminen at icloud.com> wrote: Many thanks for the input everybody! I am glad to get help with the complex topic.
Am I reading this correctly that you imply that a relationship arising from package A calling library(B), or having a more Imports or Depends on it, would lead to same GPL "virality" as having actual object code from an external package?
According to my layman's understanding yes. The primary argument being the shared address space mentioned in the GPL's FAQ, also noted by Ivan. For example, a function defined in my R script can access the same variable as a package::function(). It was mentioned under the #MereAggregation, but with the ambiguous "almost surely" (leaving some space for the API interpretation, I will come back to this later). I also think that the invention of the separate LGPL licenses allowing dynamic linking to dependencies without the license virality supports the above indirectly. Why would the LGPL licenses be needed if the GPL licenses would already allow the dynamic linking? To my understanding, the default use of R language relies on dynamic linking, as no comprehensive executables are compiled prior the execution of the source code. I do hope that the above interpretation would be wrong and the fight wouldn't exist. For example, so that the handling of the Henrik's afex package would have been incorrect. I do like the other interpretation where the R's namespace is considered as an API interface leading to software aggregates. However, notice the many opposing opinions against the non virality in the https://opensource.stackexchange.com/, specially in the context of R. Although I haven't seen anyone raising the specific API interpretation, I think saw it first time in this discussion. They all might be wrong, but the situation is confusing. After the above, the most puzzling thing in my head currently reduces to the following. What is actually the difference between the dynamic linking and software aggregates? Any clarifying thoughts on this? The GPL2 license itself has the crucial permissible clause for the aggregates: "In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License." If the current discussion resembles some earlier debates (that I am not aware of), and the uncertainty is still floating, maybe it would be wise to find some decisive, unambiguous conclusion and state it somewhere officially and visibly. Pointing to the relevant arguments and sources, such as explaining the API interpretation and how it aligns with the GPL licenses and their FAQs. Possibly also deal the difference between the dynamic linking and software aggregates. Which one of the concepts actually covers the default application of the R language, or are they even counterparts? And why would the LGPL licenses be redundant in the context of the default use of R (or are they)? If these topics happen to be crucial for solving the seemingly long-lasting confusion. Br Ilmari
Dr. Benjamin Bolker Professor, Mathematics & Statistics and Biology, McMaster University Director, School of Computational Science and Engineering > E-mail is sent at my convenience; I don't expect replies outside of working hours.
Sorry about my unclear communication. In the context of solving the assumed license conflicts in the lme4, I meant that you (Ben) could ask only one permission for the minqa, one permission for numderiv, and so on. The maintainers of those packages should know who contributed to the packages, and if there are multiple people, the maintainers could act behalf of those (for giving centralized permissions to you). However, this (and what follows) is only my best layman's understanding currently. It would indeed nice to have some earlier credible applications of the GPLv2 section 10. or relevant FSF FAQ. For example, to me the expression "parts" does not exclude "all parts". And would "all parts" even used in an usual case, if only a limited number of functions and their arguments are called from an R package. The packages are not usually even distributed along the code of interest (in this case the lme4), why saying "all parts were incorporated" does not sound valid. Even if the lme4 would call all the functions and their arguments from a package, the "incorporated parts" would still be limited to those superficial elements. And this could be agreed with the dependency maintainers: only the function calls are incorporated (the situation now resembling the namespace-API interpretation, but enhanced with the permissions). The spirit of the FSF in the section 10. is also notable. In the lme4 case, "the parts" are incorporated with the GPL-2 | GPL-3 software, promoting. sharing and reusing. But these are only my hopefull interpretations. As said, it was surprising to find the section 10. so late, nobody haven't talked about it. Coming searches should be focused on the application of the section 10. I will search more when I have time. If you feel that getting the lme4 dependency licenses updated is possible, then I think it would be the clearest option from these two. Regards Ilmari Tamminen P?iv?n? 20. syysk. 2025, klo 23.05, Ben Bolker <bbolker at gmail.com> kirjoitti: On 2025-09-19 1:40 p.m., Ilmari Tamminen wrote: Well, this turned out to be an odd case. It took quite long to notice the following in the end of the GPLv2: "10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally." The information I received from multiple sources was that the upstream licenses must be updated or the dependencies removed, if there is the GPLv2-only vs. GPLv3 conflict. Notably, the option based on the GPLv2 section 10. was not raised in this thread either. So, is an email "OK" enough for resolving the GPLv2-only vs. GPLv3 conflict? But not necessary only from the package maintainers though, but from all the relevant copyright holders. But the maintainer can ask the permissions and then probably act from behalf of the copyright holders for giving the centralised permission for the cross use. If this is indeed possible, maybe it would be wise to ask permissions (retroactively) for all the versions, to clear all possible conflicts and remove uncertainties from the future at once. It would also be wise to communicate the permissions along the distribution. I think the awareness about this less burdensome yet (I dare to say) unambiguous option should be distributed. I don't have the expertise to say is the namespace-API interpretation right or wrong. But this new approach is quite clearly defined in the GPLv2. However, I cannot give legal advice for all the possible circumstances. Everybody needs to do their own case-specific interpretations and take responsibility Any thoughts? It would be easy enough to request permissions from maintainers. > is an email "OK" enough for resolving the GPLv2-only vs. GPLv3 conflict? Maybe? > But the maintainer can ask the permissions and then probably act from behalf of the copyright holders for giving the centralised permission for the cross use. If this is indeed possible, maybe it would be wise to ask permissions (retroactively) for all the versions, to clear all possible conflicts and remove uncertainties from the future at once. It would also be wise to communicate the permissions along the distribution. I'm not quite sure what you want to have done here; if you're asking me (the lme4 maintainer) to ask all of the upstream maintainers and copyright holders (it's not clear to me who these are in the absence of an explicit 'cph'-tagged entity in the DESCRIPTION file or an explicit COPYRIGHTS file included in the package: maintainer? maintainer and all authors? maintainer, authors, and contributors?), that seems like more work than I want to do. Would I put these permissions in the LICENSE file, or ... ? I don't mind spending a bit of time asking upstream package maintainers to re-license their packages under 'GPL >= 2', but collating permissions actually seems like more work. I agree that it might be nice to have a clearer statement about these licensing issues, but the problem is that in the absence of a legal precedent (which doesn't exist AFAIK, and seems unlikely to exist in the future -- there would have to be an actual court case involving permissions of R packages, and then that would only apply to one particular jurisdiction etc. ...) it would still just be an opinion. Relevant opinions from Stack Exchange (still just opinions): https://opensource.stackexchange.com/questions/4414/if-my-r-package-uses-gpl-packages-does-mine-automatically-inherit-gpl https://opensource.stackexchange.com/search?q=R+package+GPL https://opensource.stackexchange.com/questions/14266/license-r-code-when-using-r-packages-with-different-license-types Br Ilmari Tamminen On 15. Sep 2025, at 10.55, Ilmari Tamminen <ilmari.tamminen at icloud.com> wrote: Many thanks for the input everybody! I am glad to get help with the complex topic. Am I reading this correctly that you imply that a relationship arising from package A calling library(B), or having a more Imports or Depends on it, would lead to same GPL "virality" as having actual object code from an external package? According to my layman's understanding yes. The primary argument being the shared address space mentioned in the GPL's FAQ, also noted by Ivan. For example, a function defined in my R script can access the same variable as a package::function(). It was mentioned under the #MereAggregation, but with the ambiguous "almost surely" (leaving some space for the API interpretation, I will come back to this later). I also think that the invention of the separate LGPL licenses allowing dynamic linking to dependencies without the license virality supports the above indirectly. Why would the LGPL licenses be needed if the GPL licenses would already allow the dynamic linking? To my understanding, the default use of R language relies on dynamic linking, as no comprehensive executables are compiled prior the execution of the source code. I do hope that the above interpretation would be wrong and the fight wouldn't exist. For example, so that the handling of the Henrik's afex package would have been incorrect. I do like the other interpretation where the R's namespace is considered as an API interface leading to software aggregates. However, notice the many opposing opinions against the non virality in the https://opensource.stackexchange.com/ , specially in the context of R. Although I haven't seen anyone raising the specific API interpretation, I think saw it first time in this discussion. They all might be wrong, but the situation is confusing. After the above, the most puzzling thing in my head currently reduces to the following. What is actually the difference between the dynamic linking and software aggregates? Any clarifying thoughts on this? The GPL2 license itself has the crucial permissible clause for the aggregates: "In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License." If the current discussion resembles some earlier debates (that I am not aware of), and the uncertainty is still floating, maybe it would be wise to find some decisive, unambiguous conclusion and state it somewhere officially and visibly. Pointing to the relevant arguments and sources, such as explaining the API interpretation and how it aligns with the GPL licenses and their FAQs. Possibly also deal the difference between the dynamic linking and software aggregates. Which one of the concepts actually covers the default application of the R language, or are they even counterparts? And why would the LGPL licenses be redundant in the context of the default use of R (or are they)? If these topics happen to be crucial for solving the seemingly long-lasting confusion. Br Ilmari -- Dr. Benjamin Bolker Professor, Mathematics & Statistics and Biology, McMaster University Director, School of Computational Science and Engineering > E-mail is sent at my convenience; I don't expect replies outside of working hours.
1 day later
Hi, could the moderators remove my previous message. For some reason my email client screwed the response, as you can see: https://stat.ethz.ch/pipermail/r-package-devel/2025q3/012000.html I didn't find any address to moderators. Here is the previous message, hopefully better this time: Sorry about my unclear communication. In the context of solving the assumed license conflicts in the lme4, I meant that you (Ben) could ask only one permission for the minqa, one permission for numderiv, and so on. The maintainers of those packages should know who contributed to the packages, and if there are multiple people, the maintainers could act behalf of those (for giving centralized permissions to you). However, this (and what follows) is only my best layman's understanding currently. It would indeed nice to have some earlier credible applications of the GPLv2 section 10. or relevant FSF FAQ. For example, to me the expression "parts" does not exclude "all parts". And would "all parts" even used in a usual case, if only a limited number of functions and their arguments are called from an R package. The packages are not usually even distributed along the code of interest (in this case the lme4), why saying "all parts were incorporated" does not sound valid. Even if the lme4 would call all the functions and their arguments from a package, the "incorporated parts" would still be limited to those superficial elements. And this could be agreed with the dependency maintainers: only the function calls are incorporated (the situation now resembling the namespace-API interpretation, but enhanced with the permissions). The spirit of the FSF in the section 10. is also notable. In the lme4 case, "the parts" are incorporated with the GPL-2 | GPL-3 software, promoting. sharing and reusing. But these are only my hopefull interpretations. As said, it was surprising to find the section 10. so late, nobody haven't talked about it. Coming searches should be focused on the application of the section 10. I will search more when I have time. If you feel that getting the lme4 dependency licenses updated is possible, then I think it would be the clearest option from these two. Regards Ilmari Tamminen
2 days later
Regarding the utilisation of the GPL2 section 10 for solving the GPL2-only vs. GPL3 conflicts, it is important to remember the GPL3 virality. If only the GPL licenses are being read then it looks like that the conflicts exist, and the two most certain solutions are: 1) Update the upstream licenses 2) Not use the GPL2 packages downstream Then, however, the FSF's GPL FAQ takes the more liberal stance, allowing for example the command-line communication within software aggregates. It doesn't sound a valid independency, if one code entity cannot call another one and then fails executing its purpose because of it, but this kind of application without the GPL3 virality seem to be widely accepted despite the language in the GPL licenses. Furthermore, to my understanding the GPL licenses do not clearly take into account whether the dependencies are conveyed with the code of interest or not, making the situation even more blurry. Thus, the situation is still unfortunately unclear. It seems that the language in the GPL licenses is the strictest, but the popular and widely accepted interpretations are more liberal way or another, divided into the two schools (the R community's way I would like to call as the namespace-API interpretation). Regards Ilmari Tamminen