Reinstallable - base

Viktor Dukhovni ietf-dane at dukhovni.org
Tue Oct 17 16:54:17 UTC 2023


On Tue, Oct 17, 2023 at 04:54:41PM +0100, Adam Gundry wrote:

> Thanks for starting this discussion, it would be good to see progress in
> this direction. As it happens I was discussing this question with Ben and
> Matt over dinner last night, and unfortunately they explained to me that it
> is more difficult than I naively hoped, even once wired-in and known-key
> things are moved to ghc-internal.
> 
> The difficulty is that, as a normal Haskell library, ghc itself will be
> compiled against a particular version of base. Then when Template Haskell is
> used (with the internal interpreter), code will be dynamically loaded into a
> process that already has symbols for ghc's version of base, which means it
> is not safe for the code to depend on a different version of base. This is
> rather like the situation with TH and cross-compilers.

To avoid that problem, GHC's own dependency on "base" could be indirect
via a shared object with versioned symbol names and a version-specific
SONAME (possibly even a private to GHC SONAME and private symbol version
names).  Say "libbase.so.4.19.1".

The dependency on "base" in the TemplatHaskell generated code would then
also need to be dynamic, allowing the two versions of base to coexist
without conflict, both in turn depdent on a common version of the GHC
internal libraries.

This would of course somewhat complicate binary distributions, but that
should be manageable.  Perhaps there are less invasive (more clever)
solutions?

-- 
    Viktor


More information about the ghc-devs mailing list