On Friday, 26 June 2020 at 11:10:27 UTC, ikod wrote:

Hello,

re `requests` - it uses dlopen (and variants for OSX and Windows, see https://github.com/ikod/dlang-requests/blob/master/source/requests/ssl_adapter.d#L50). The reason for dlopen is simple - compatibility with both openssl ver 1.0 and 1.1 (which have incompatible interfaces). To solve this problem I expose common interface for Requests internal needs, and detect and use different underlying openssl interfaces depending on library version.

Oh, it's that bad. That's disappointing.

I'm sure it is possible to detect library version at build time, and then use static linking. It just require some time investment to find most acceptable solution on how to do this.

I'm using a script (written in D) in my tool, DStep [1][2], to identify which versions of libclang is available and to select between dynamic link (not using `dlopen`) and static linking of libclang. It works pretty well.

Re Windows - I'd be happy to use native SecureChannel but I have zero windows programming experience. I'm completely open for any help in this field.

I don't have much experience with programming on Windows either. macOS is my main platform.

Bottom line - problem with SSL/TLS libraries lies in incompatibility between platforms and even inside the single library.

Yes. I'm trying to identify the best solution, which ideally requires the least amount of work.

[1] https://github.com/jacob-carlborg/dstep/blob/master/configure.d [2] https://github.com/jacob-carlborg/dstep/blob/master/dub.json#L34-L41

--
/Jacob Carlborg

Reply via email to