The D ecosystem in Debian with free-as-in-freedom DMD

Matthias Klumpp via Digitalmars-d digitalmars-d at puremagic.com
Mon Apr 10 11:12:26 PDT 2017


On Monday, 10 April 2017 at 17:29:04 UTC, H. S. Teoh wrote:
> On Mon, Apr 10, 2017 at 11:40:12AM +0000, Matthias Klumpp via 
> Digitalmars-d wrote: [...]
>> [...]
>> If we do that, we will run into the D ABI trap: Libraries 
>> compiled with compiler X can not be used from software 
>> compiled with D compiler Y. There is actually no ABI stability 
>> guarantee even between DMD releases.  This will make 
>> integrating D a huge pain. Recompiling the dependency-chain of 
>> a software from source when compiling a package using the 
>> "right" compiler and statically adding the code is forbidden 
>> by distro policy.  Having static libraries in the dependencies 
>> doesn't solve the issue.  Compiling each library with all D 
>> compilers is highly impractical and not really feasible.
>
> This is not a hard problem to solve, IMO.  Just build the 
> library into two separate binaries, each with a SONAME that 
> encodes the ABI it is compatible with.

This would require to hack each and every build system to support 
this *and* if there is a pkgconfig file for the shared library, 
to change all depending software to check for multiple library 
names which is a bit crazy...

> The resulting two .so's can either be distributed as separate 
> packages (for minimum bloat, if that's a concern), or as a 
> single package that contains both binaries (since they have 
> different SONAMEs this should not be a problem).

Since one library == one package in Debian, it would have to be 
multiple packages, otherwise we would need to override Lintian 
errors/warnings, which is always a bad idea.

> Then if you compile some software X that depends on this 
> library, it will pick up the correct version of the library 
> depending on which compiler you compiled with.

Unfortunately not without special support in the software's build 
system :-/

> [...]
> DMD is unlikely to support other archs than amd64/ia32 in the 
> foreseeable future, so the justification for dmd being 
> unavailable for arch X would be that upstream DMD simply 
> doesn't support it.  This, however, should not prevent us from 
> using gdc/ldc on those other archs, so that we can still ship 
> packages for those archs.  They will merely require ldc rather 
> than dmd. And obviously, libraries built for that arch will 
> only support the ldc SONAME, not the dmd one. (This may be an 
> argument for bundling both SONAMEs in a single package -- it 
> gets messy if we start shipping multiple libraries, some of 
> which may not be available on all archs. By shipping a single 
> package that includes both versions for ia32/amd64, we can 
> simply omit the DMD-compiled version from other archs.)

Conditional build-dependencies are a bit annoying, but with a 
metapackage "d-compiler" or similar, using different D compilers 
on different architectures would definitely be possible.

> Unfortunately, I realize that this means some packages that 
> require the latest DMD would not be available on all archs, if 
> they require features unavailable in gdc/ldc.  But this problem 
> may not be a huge one, now that ldc is mostly up-to-date with 
> dmd (at most 1 release behind, IIRC). GDC may lag behind a bit 
> more because it is unfortunately tied to GCC releases, so we 
> may have to forego using gdc for building newer D packages. But 
> we should be able to ship most D packages compiled with both.

Compiling with multiple compilers is a really big effort with 
rather questionable gain, IMO.
But as far as LDCs compatibility with other D projects goes: That 
is really good, the only reason you sometimes can't compile some 
random D code with LDC might be bugs, but not old standard 
libraries.

> Furthermore, I wonder if we should standardize on ldc for most 
> D software instead of dmd, unless that software absolutely 
> depends on features only available on dmd.  My reasons are:
>
> - While dmd compiles very fast, it consistently (IME) produces 
> code that
>   runs about 20-30% slower than code produced by gdc (and I 
> presume ldc
>   as well). Since we're talking about building Debian packages 
> on
>   Debian's buildd's, which are background batch processes, 
> compilation
>   speed is no big deal, but the performance of the executable 
> *is* a big
>   deal. The last thing we want is to give a poor impression of 
> D by
>   shipping official Debian packages that have subpar 
> performance.
>
> - DMD is unlikely to target other archs than ia32/amd64 in the
>   foreseeable future, AFAIK, unless the recent relicensing 
> triumph of
>   dmd's backend makes this future more likely.  There will 
> definitely be
>   resistance among DDs because of lack of support for other 
> archs. LDC,
>   in contrast, supports all of Debian's supported archs.
>
> - LDC is already available in Debian, meaning that we can 
> already start
>   adding D packages built with ldc without needing to work 
> through the
>   red tape involved in adding a new compiler to the archive.

I agree with all of that, I think sticking with LDC might indeed 
be the least painful thing to do...

> - The only case where I can see we'd want to compile with dmd 
> is if the
>   target software uses features that are only available on dmd.

Oddly, it usually is the other way round :P - some projects 
explicitly want LDC or GDC.

> [...]
> Of course, this in no way diminishes the priority in 
> *distributing* dmd in the Debian archive as -dev packages. Just 
> don't build other Debian packages with it. :-D

Indeed. It needs license review (urgh... ^^), but when it's 
through that there is no reason not to have it in Debian main and 
Ubuntu.

> [...]
>> Also: If you want to help out Debian's D team, feel free to 
>> ping me or any other D team member (we are very short handed 
>> and are only two active people right now). See 
>> https://wiki.debian.org/D (caution, wiki page is very 
>> outdated, last touched in 2012)
>
> I'd like to be involved, since I *am* technically a Debian 
> developer (though haven't been very active for the past long 
> while -- I do try to at least keep the meager few packages I 
> maintain up-to-date, though).

It's unlikely that I will maintain the dmd package (I might 
co-maintain it or sponsor uploads though - reason is simply lack 
of time and -ETOOMANYPROJECTS), so any help there is highly 
appreciated and I'd help with it whenever I can (I just can't 
make long-term commitments).
If DMD is uploaded as part of the D team, spreading the 
maintenance cost will be rather simple too :-)



More information about the Digitalmars-d mailing list