-
-
Notifications
You must be signed in to change notification settings - Fork 649
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Consider using win-iconv for iconv on Windows #4277
Comments
What license is win-iconv under? I don't see it in the git repository. |
The readme says "public domain"1 (see https://github.com/burgerrg/win-iconv/blob/master/readme.txt#L3) Footnotes
|
We should try to reach out to the author and see if they're willing to apply CC0 to it, so it can be used internationally. Otherwise, this is exchanging one set of licensing problems for another. How extensively is libiconv used in Racket right now? Maybe we can just use the relevant win32 APIs directly on Windows builds? |
I'd be fine with contacting the author, although there haven't been any commits since 2016. But I think that while the public domain declaration has various legal issues, it's almost certainly not a problem in practice and would improve the licensing situation. iconv is used only by |
If it is in the public domain, I would assume any person or organization in a country that recognizes that status could simply fork it and issue it under a new license. But now you're the maintainer. |
@samth wrote:
I know @burgerrg is involved in Chez Scheme, but it looks to me from https://github.com/burgerrg/win-iconv/blob/db14b52d58f98b7700863bb38ae69d7d5121f1fa/readme.txt#L20 like win-iconv is forked from an upstream project with several contributors: https://github.com/win-iconv/win-iconv/graphs/contributors I think to be really robust we would need all of them to agree to CC0 (unless maybe some have made only trivial commits). (Maybe this is a situation where we should seek guidance from the SFC?) I agree that the informal public-domain declaration is not very likely to be a problem in practice. However, when not building with |
Neither the LGPL or a DIY public-domain declaration "spark joy" here. Poking someone at the SFC might be a good idea, but I suspect the expedient thing may be to |
I'm pretty sure it would not be public domain in some jurisdictions, and therefor forking it to apply a fallback license for those jurisdictions would violate the authors' copyright in those jurisdictions, which would effectively solve no problems, but create several new ones. |
Would it be viable to remove the unused portion from Chez? As for the other parts, maybe there's another library we can use to provide similar functionality as the subset of iconv that is actually used? Is there a quick way to enumerate the calls we're actually using? |
iconv was added by @mflatt to I don't know much about linking, but: since Racket doesn't use the Chez Scheme portion that uses iconv, can't we create a stub libiconv that has blank implementation? That way, we don't need to change Chez Scheme itself. |
Chez Scheme dynamically links iconv when needed, so not having the iconv library should be fine if you don't use |
It's possible to build Racket with Given that, the remaining challenge is the dynamic dependency on the iconv dll. It seems like it should be possible to disable that dependency if |
From racket/libs@8ba7a87, it sounds like the iconv dll is also used by e.g. |
My understanding is that it's totally fine to have the iconv dependency as long as it's not a dependency of |
I agree with @sorawee. An optional LGPL dependency to an optional LGPL package is not the end of the world. |
How bad would it be to just take In some sense it would be a non-compatible change for users of "minimal Racket" (with only
All we would have to change is "the Racket software distributions" in the margin note to something like "the main Racket distribution". We could provide a meta-package |
Re #4276 (comment) (keeping iconv-specific discussion in one place seemed best):
I noticed 8a08704 says that Android doesn't provide iconv, either. It seems like it might be generally useful to implement the POSIX iconv API on top of ICU. I haven't found any project that's done so, but apparently ICU distributes a program |
As another option, the Apache Portable Runtime project provides an iconv implementation with a permissive (but not dubious DIY) license: https://apr.apache.org I haven't tried building or using it, and I don't know how its features compare to GNU libiconv or others. (But my general view is that the non-Unicode functionality for which |
I've looked into this a bit more. Apparently Windows has incorporated the ICU C API as a public system library since Windows 10 Creators Update (1703), released in 2017. IIUC, that means it is available in all versions of Windows currently supported by Microsoft (except for enterprise "extended support" for Windows 8.1 which ends on January 10, 2023). The ICU function I think we could reasonably either distribute an I've looked into it a little, but I thought I'd post here in case anyone else has the time and inclination to explore it before I do. |
Currently, the "base" package depends on the "racket-win32-x86_64" package, which includes libiconv. libiconv is under the LGPL v2.1, and is the only LGPL dependency of minimal Racket (the others are from OpenSSL and libedit on various platforms).
The win-iconv project (see https://github.com/burgerrg/win-iconv) has a Windows-only iconv replacement that is already mentioned by the Chez documentation. It is available under a non-restrictive license. It's also much smaller (1 MB vs 30kB).
The text was updated successfully, but these errors were encountered: